no-map,使内核无法访问这些区域。
可配置的划出区域在 arch/arm64/boot/dts/qcom/kodiak.dtsi 文件的 reserved-memory 节点下定义。
对于 Qualcomm SoC,请查看 SoC 专属的 Qualcomm DTSI 文件以获取此信息。
连续内存分配器
Qualcomm Linux 发行版支持使用 CMA 来分配大块物理连续内存。CMA 在启动时保留一大块物理连续内存区域,并为 CMA 分配提供物理连续的内存。在不使用时,CMA 内存可供内核伙伴(buddy)分配器用于可移动分配。 要更改默认 CMA 区域的大小,请在内核命令行参数中使用cma=size_in_MB。有关如何使用该内核参数的更多信息,请参阅以下示例:
reserved-memory 节点下定义,并带有 shared-dma-pool compatible 标记来指示 CMA 区域:
支持的堆
下表列出了 Qualcomm Linux 发行版默认支持的堆: 表:默认支持的堆使用 DMA-BUF 堆
Qualcomm Linux 发行版支持通过 DMA-BUF 堆来分配自定义 CMA 堆。使用 DMA-BUF 堆时,/dev/dma_heap 文件系统中会为每个堆提供一个设备文件。除系统堆和通用的 CMA reserved 堆外,您还可以创建自己的 CMA 类型 DMA-BUF 堆。
以下示例程序演示了如何使用 Qualcomm Linux 内核在 /dev/dma_heap/system 中创建的 DMA-BUF 系统堆:
将 ZRAM 配置为交换设备
ZRAM 是一种压缩交换机制,它在 RAM 中创建一个虚拟块设备。ZRAM 在内核 defconfig 中作为模块启用。 在 Yocto 构建中,ZRAM 在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 区域,请使用以下语法:

