linux kernel内存管理学习篇
生活随笔
收集整理的這篇文章主要介紹了
linux kernel内存管理学习篇
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1、DDR的注冊
- (1)、在dts中定義了DDR(memory)的范圍
- (2)、將DDR地址范圍注冊到linux kernel
- 2、reserved-memory的注冊
- (1)、在dts中定義了reserved-memory的范圍
- (2)、將reserved memory信息告知給linux kernel
★★★ 友情鏈接 : 個人博客導讀首頁—點擊此處 ★★★
1、DDR的注冊
(1)、在dts中定義了DDR(memory)的范圍
memory@0 {device_type = "memory";reg = <0x0 0x80000000 0x2 0x0>; };(2)、將DDR地址范圍注冊到linux kernel
early_init_dt_scan_memory()
early_init_dt_scan_memory() —> early_init_dt_add_memory_arch(base, size) —> memblock_add(base, size)—>memblock_add_region(base, size, MAX_NUMNODES, 0)
MAX_NUMNODES表示有幾塊DDR區域(注意是幾塊DDR區域,并不是幾塊DDR),大小為1(1<<0)或和CONFIG_NODES_SHIFT值相關
#define MAX_NUMNODES (1 << NODES_SHIFT)#ifdef CONFIG_NODES_SHIFT #define NODES_SHIFT CONFIG_NODES_SHIFT #else #define NODES_SHIFT 0 #endif2、reserved-memory的注冊
(1)、在dts中定義了reserved-memory的范圍
reserved-memory {#address-cells = <1>;#size-cells = <1>;ranges;/* global autoconfigured region for contiguous allocations */linux,cma {compatible = "shared-dma-pool";reusable;size = <0x4000000>;alignment = <0x2000>;linux,cma-default;};display_reserved: framebuffer@78000000 {reg = <0x78000000 0x800000>;};multimedia_reserved: multimedia@77000000 {compatible = "acme,multimedia-memory";reg = <0x77000000 0x4000000>;};};/* ... */fb0: video@12300000 {memory-region = <&display_reserved>;/* ... */};scaler: scaler@12500000 {memory-region = <&multimedia_reserved>;/* ... */};codec: codec@12600000 {memory-region = <&multimedia_reserved>;/* ... */};(2)、將reserved memory信息告知給linux kernel
__fdt_scan_reserved_mem()
__fdt_scan_reserved_mem() —> __reserved_mem_reserve_reg() —> early_init_dt_reserve_memory_arch(base, size, nomap)—>memblock_reserve(base, size) —> memblock_reserve_region(base, size, MAX_NUMNODES, 0)
總結
以上是生活随笔為你收集整理的linux kernel内存管理学习篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [toolchains]-ARM Too
- 下一篇: [ATF]-ATF启动--BL31跳转到