本文翻译自:
msm-5.4/arch/arm64/boot/dts/vendor/bindings/reserved-memory/reserved-memory.txt
*** Reserved内存区域 ***
保留内存被指定为 /reserved-memory 节点下的一个节点。操作系统应将保留内存排除在正常使用之外,可以创建子节点来描述特定的保留(从正常使用中排除)内存区域。此类内存区域通常设计用于各种设备驱动程序的特殊用途。
每个内存区域的参数都可以使用以下节点编码到设备树中:
1. /reserved-memory 节点
#address-cells、#size-cells(必需) - 标准定义,应使用与根节点相同的值
ranges(必需) - 标准定义,- 应为空
2. /reserved-memory/ 子节点
reserved-memory 节点的每个子节点指定一个或多个保留内存区域。每个子节点可以使用“reg”属性来指定特定范围的保留内存,#####或使用带有可选约束的“size”属性来请求动态分配的内存块。
按照通用名称推荐的做法,节点名称应反映节点的用途(如“framebuffer”或“dma-pool”)。如果节点是静态分配,######则应将单元地址 (@<address>) 附加到名称中。
3. 属性:
需要下面的 a) 或 b)。
a) 静态分配
reg(必需)- 标准定义
b) 动态分配
size(必需)- 基于父级 #size-cells 的长度,保留的内存大小(以字节为单位)。
alignment(可选)- 基于父级 #size-cells 的长度,分配对齐的地址边界。
alloc-ranges(可选)- prop-encoded-array(地址、长度对)。指定可接受分配的内存区域。
如果同时存在 reg 和 size,则 reg 属性优先,size 将被忽略。
4. 附加属性:
compatible(可选) - 标准定义
- 可能包含以下字符串:
shared-dma-pool: 这表示内存区域旨在用作一组设备的 DMA 缓冲区共享池。如果需要,操作系统可以使用它来实例化必要的池管理子系统。
供应商特定字符串,格式为 <vendor>,[<device>-]<usage>
no-map(可选)- 空属性
- 表示操作系统不得创建该区域的虚拟映射,不得将其作为系统内存标准映射的一部分,也不得在任何情况下允许对其进行推测性访问,除非在使用该区域的设备驱动程序的控制下。
reusable(可选) - 空属性
- 操作系统可以使用此区域中的内存,但限制是拥有该区域的设备驱动程序要能够将其回收。通常,这意味着操作系统可以使用该区域来存储易失性或缓存的数据,这些数据可以以其他方式重新生成或迁移到其他地方。
Linux 实现注意事项:
- 如果存在“linux,cma-default”属性,则 Linux 将使用该区域作为连续内存分配器的默认池。
- 如果存在“linux,dma-default”属性,则 Linux 将使用该区域作为一致 DMA 分配器的默认池。
5. 设备节点对reserved内存的引用
/reserved-memory 节点中的区域可以通过向设备节点添加 memory-region 属性而被其他设备节点引用。
memory-region(可选)= phandle,phandle 是 /reserved-memory 子节点的。
示例
-------
此示例为 Linux 内核定义了 3 个连续区域:
一个是所有设备驱动程序的默认区域(名为 linux,cma@72000000,大小为 64MiB),一个专用于帧缓冲区设备(名为 framebuffer@78000000,8MiB),一个用于多媒体处理(名为 musical-memory@77000000,64MiB)。
/ { #address-cells = <1>; #size-cells = <1>; memory { reg = <0x40000000 0x40000000>; //1GB }; 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>; /* ... */ }; };
标签:reserved,14,区域,内存,memory,节点,size From: https://www.cnblogs.com/hellokitty2/p/18284414