note:若设备树中同时还指定了 no-map,则保留的内存不会被统计到 reserved 和 Memory available 中,对系统不可见。此时需要自己建立地址映射,如下: /* Get reserved memory region from Device-tree */ np =of_parse_phandle(dev->of_node,"memory-region",0); if(!np) { dev_err(dev,"No %s specified\...
unflatten_device_tree(); ... 2.1 解析内核中的保留内存空间 在各平台初始化过程中调用early_init_fdt_scan_reserved_mem()进行保留内存的初始化。 setup_arch_memory in init.c (arch\arc\mm) : early_init_fdt_scan_reserved_mem(); arm64_memblock_init in init.c (arch\arm64\mm) : early_init...
/* Get reserved memory region from Device-tree */np=of_parse_phandle(dev->of_node,"memory-region",0);if(!np){dev_err(dev,"No %s specified\n","memory-region");goto error1;}rc=of_address_to_resource(np,0,&r);if(rc){dev_err(dev,"No memory address assigned to the region\n")...
root@plnx_aarch64:~# insmod /lib/modules/4.6.0-xilinx/extra/reserved-memory.ko [ 80.745166] reserved-memory reserved-driver@0: Device Tree Probing [ 80.750183] reserved-memory reserved-driver@0: assigned reserved memory node buffer@0 [ 81.220878] reserved-memory reserved-driver@0: Allocated co...
reserved-memory 节点正是用来设置保留内存的相关信息,在该节点下的所有子节点都表示需要保留的一段内存,其中 reg 用来指定保留内存的起始地址和 size。 最后,这片保留内存需要和特定的设备建立联系,就需要在对应设备节点中提供 memory-region 属性,对保留内存节点进行引用,表明当前设备需要使用到对应的保留内存。
启动日志中 zone range大小是规格内存大小,这个值是从bootloader 读取memory 控制器获取, 然后修改设备树中memory字段获取,可以通过/proc/device-tree/memoryXXX查看(但是实际上这里可以修改bootloader, 设置保留内存大小的); [ 0.000000] Zone ranges: [ 0.000000] DMA [mem 0x0000000040000000-0x00000000bfffffff] ...
memory { device_type = “memory”; reg = <0 0>; }; }; 如上,属性# address-cells的值为1,它代表以“/”根节点为parent的子节点中,reg属性中存在一个address值;#size-cells的值为1,它代表以“\” 根节点为parent的子节点中,reg属性中存在一个size值。即父节点的# address-cells和#size-cells决定...
DTB(device tree blob) dtb文件是.dts 被 DTC 编译后的二进制格式的设备树文件,它由Linux内核解析,也可以被bootloader进行解析。 通常在我们为电路板制作NAND、SD启动映像时,会为.dtb文件单独留下一个很小的区域以存放之,之后bootloader在引导内核的过程中,会先读取该.dtb到内存。
memory@80000000 { device_type = "memory"; reg = <0x80000000 0x20000000>; }; /*根节点的子节点*/ reserved-memory { #address-cells = <1>; #size-cells = <1>; ranges; linux,cma { compatible = "shared-dma-pool"; reusable; size = <0xa000000>; ...
{...arm_memblock_init(mdesc);...unflatten_device_tree();... 2.1 解析内核中的保留内存空间 在各平台初始化过程中调用early_init_fdt_scan_reserved_mem()进行保留内存的初始化。 setup_arch_memoryininit.c(arch\\arc\\mm) :early_init_fdt_scan_reserved_mem();arm64_memblock_initininit.c(arch\...