img_01.png

君正®


Release history

Date Revision Change
2020.11.30 1.0 First release
2022.12.21 2.0 Second release

预留内存简介

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

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

预留内存配置

Devicetree 配置说明

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

默认配置

/ {

 reserved-memory {

 #address-cells = <1>;

 #size-cells = <1>;

 ranges =<>;

 reserved_memory: reserved_mem@0x6000000{

 compatible = "shared-dma-pool";

 reg = <0x06000000 0x2000000>;

 };

 };

};

&rotate {

 status = "okay";

 memory-region=<&reserved_memory>;

};

&felix {

 status = "okay";

 memory-region=<&reserved_memory>;

};

&helix {

 status = "okay";

 memory-region=<&reserved_memory>;

};

&ispcam0 {

 status = "okay";

 memory-region=<&reserved_memory>;

};

&ispcam1 {

 status = "okay";

 memory-region=<&reserved_memory>;

};

自定义配置

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

Start 地址, 如: 0x06000000

Size 大小,如: 0x2000000

reserved_memory: reserved_mem@0x6000000{

 compatible = "shared-dma-pool";

 reg = <0x06000000 0x2000000>;

 };

内核驱动配置说明

预留内存推荐配置

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

reserved_mem start地址 size大小
8M 0x7800000 0x800000
32M 0x6000000 0x2000000
64M 0x4000000 0x4000000