
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 |