/** * struct memblock_region - represents a memory region * @base: base address of the region * @size: size of the region * @flags: memory region attributes * @nid: NUMA node id */ struct memblock_region { phys_addr_t base; // 起始物理地址 phys_addr_t size; // 长度 enum membl...
内存初始化主要在start_kernel函数中,主要内容有: 从dts中扫描所有物理内存和预留内存,并添加到memblock子系统 给memblock中的所有非预留memory region建立页表映射 sparse内存模型初始化 计算每个zone管理内存的大小以及每个zone的free list初始化 释放所有空闲内存块到伙伴系统 6.初始化slab和vmalloc子系统 7.初始化kasan...
(1)我们前面解析了DTS的memory节点,已经向系统加入了不少的memory type的region,当然reserved memory block也会有一些,例如DTB对应的memory就是reserved。memory_limit可以对这些DTS的设定给出上限,memblock_enforce_memory_limit函数会根据这个上限,修改各个memory region的base和size,此外还将大于memory_limit的memory bloc...
对应设备树节点(另外,CMA 也可以通过 cmdline 和 .config 文件进行配置,配置的优先级 dts > cmdline > .config): reserved_memory: reserved-memory { #address-cells =<2>; #size-cells =<2>; ranges; linux_cma_region: linux-cma-buffers@931000000{ compatible ="shared-dma-pool"; reusable; reg = <...
在dts文件里,每个大括号{ }代表一个节点,比如根节点里有个大括号,对应一个device_node结构体;memory也有一个大括号,也对应一个device_node结构体。 节点里面有各种属性,也可能里面还有子节点,所以它们还有一些父子关系。 根节点下的memory、chosen、led等节点是并列关系,兄弟关系。 对于父子关系、兄弟关系,在device...
然后就可以通过memory-region参数将预留的内存空间分配给特定的设备驱动程序使用。 用于64位Cortex-A53 MPSoC的system-top.dts文件中的设备树节点: AI检测代码解析 reserved-memory{ #address-cells = <2>; #size-cells = <2>; ranges; reserved:buffer@0{ ...
Linux加载DTS设备节点的过程(以高通8974平台为例) DTS是Device Tree Source的缩写,用来描述设备的硬件细节。 在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲, 不过是垃圾,如板上的platform设备、resource、i2c_boa...
在dts文件里,每个大括号{ }代表一个节点,比如根节点里有个大括号,对应一个device_node结构体;memory也有一个大括号,也对应一个device_node结构体。 节点里面有各种属性,也可能里面还有子节点,所以它们还有一些父子关系。 根节点下的memory、chosen、led等节点是并列关系,兄弟关系。 对于父子关系、兄弟...
这一点,在设备树dts里面就可以轻松配置,要么配置一个自己特定的cma区域,要么从“linux,cma-default”指定的缺省的CMA池子里面取内存: 代码语言:javascript 复制 reserved-memory{#address-cells=<1>;#size-cells=<1>;ranges;/* global autoconfigured region for contiguous allocations */linux,cma{compatible="...
arch/arm64/boot/dts/rockchip/rk3568.dtsi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 display_subsystem: display-subsystem { compatible = "rockchip,display-subsystem"; memory-region = <&...