no-map,使内核无法访问这些区域。
可配置的划出区域在 arch/arm64/boot/dts/qcom/kodiak.dtsi 文件的 reserved-memory 节点下定义。
对于 Qualcomm SoC,请参阅特定于 SoC 的 Qualcomm DTSI 文件以获取此信息。
连续内存分配器
Qualcomm Linux 发行版支持 CMA 来分配大块物理连续内存。CMA 在启动时保留一块大的物理连续内存区域,并为 CMA 分配提供物理连续内存。在不使用时,CMA 内存可供内核伙伴分配器(buddy allocator)用于可移动(movable)分配。 要更改默认 CMA 区域的大小,请在内核命令行参数中使用cma=size_in_MB。有关如何使用该内核参数的更多信息,请参阅以下示例:
reserved-memory 节点下定义,并带有表示 CMA 区域的 shared-dma-pool compatible 标记:
支持的堆
下表列出了 Qualcomm Linux 发行版默认支持的堆: 表:默认支持的堆使用 DMA-BUF 堆
Qualcomm Linux 发行版支持 DMA-BUF 堆,用于指定自定义 CMA 堆。使用 DMA-BUF 堆时,/dev/dma_heap 文件系统中的每个堆都对应一个设备文件。除了 system 堆和通用的 CMA reserved 堆之外,您还可以创建自己的 CMA 类型 DMA-BUF 堆。
以下示例程序演示了如何使用 Qualcomm Linux 内核在 /dev/dma_heap/system 中创建的 DMA-BUF system 堆:
将 ZRAM 配置为交换设备
ZRAM 是一种压缩交换机制,它在 RAM 中创建一个虚拟块设备。ZRAM 在内核 defconfig 中作为模块启用。 ZRAM 在 Yocto 构建中的recipes-extended/zram/zram/zram-swap-init-update 文件中配置。
要启用或配置 ZRAM,请执行以下操作:
扩展内存映射
要扩展内存映射,请在 DTSI 文件中调整内存区域的地址和大小。 使用以下信息扩展划出区域: 使用以下语法在arch/arm64/boot/dts/qcom/<SoC>-<board>-<variant>.dts 文件的 reserved-memory 节点中添加划出区域:
- 任何区域都不应重叠。如果必须增大某个区域的大小,请移动所有后续区域,并在设备树中进行配置以避免重叠。
- 内核要求为内核使用而定义的所有内存区域边界为 1 MB。
- 现有的划出区域受可信固件保护,内核无法访问。减小其大小或删除它们可能导致外部中止(external abort),进而引发内核崩溃。
arch/arm64/boot/dts/qcom/<SoC>-<board>-<variant>.dts 文件的 reserved-memory 节点下添加 CMA 区域,请使用以下语法:

