img_01.png

君正®


Release history

Date Revision Change
2022.12.22 2.0 First release

预留内存简介

预留内存主要解决由于部分硬件设备需要反复申请大量的连续物理内存,如果使用系统内存分配,容易导致内存碎片,从而存在内存申请失败的风险。

通过使用Linux 提供的预留内存分配策略,通过预先估计,可以保证硬件驱动肯定能够申请到内存,该预留内存不受系统内存管理,在DTS中配置之后,驱动可以使用标准的API 进行申请和释放操作。

预留内存配置

Devicetree 配置说明

dts 文件中主要包含对预留内存的起始地址,大小进行描述,对设备是否使用预留内存进行定义。

默认配置

/ {

 reserved-memory {

 #address-cells = <1>;

 #size-cells = <1>;

 ranges =<>;

 reserved_memory: reserved_mem@0x2000000{

 compatible = "shared-dma-pool";

 reg = <0x02000000 0x2000000>;

 };

 };

};

&cim {

 status = "okay";

 memory-region=<&reserved_memory>;

};

自定义配置

用户可以根据实际情况,修改

Start 地址, 如: 0x02000000

Size 大小,如: 0x2000000

x1600芯片总内存为32M,x1600e芯片总内存为64M,预留内存大小应适当合理,不宜全部占用,过大可能会导致kernel启动失败。

reserved_memory: reserved_mem@0x2000000{

 compatible = "shared-dma-pool";

 reg = <0x02000000 0x2000000>;

 };

内核驱动配置说明

预留内存推荐配置

根据实际应用场景,针对Camera使用预留内存方式,可以有效降低由于内存碎片引起的内存申请不到的问题。以x1600和x1600e分别申请8M内存为例,推荐使用如下配置:

芯片 DDR 预留内存 start地址 size大小
x1600 32M 8M 0x1800000 0x800000
x1600e 64M 8M 0x3800000 0x800000