Cache
Cache 模块提供 DCache(Data Cache)维护接口,作为 OSAL(OS Abstract Layer)的组成部分,支持按内存区域执行 DCache 回写、失效与清理操作,覆盖 linux、liteos、seliteos 系统。
模块公共头文件
接口清单
| 接口名称 | 功能简述 |
|---|---|
| osal_dcache_region_wb | 对指定内存区域执行 DCache 回写操作 |
| osal_dcache_region_inv | 对指定内存区域执行 DCache 失效操作 |
| osal_dcache_region_clean | 对指定内存区域执行 DCache 清理操作 |
Functions
osal_dcache_region_wb
声明头文件
功能说明
- 将指定内存区域的 DCache 数据写回主存(write-back)。
- 起始地址若未按 CACHE_LINE_SIZE(32Bytes)对齐,将自动向下对齐到 CACHE_LINE_SIZE 边界。
- 当 MMU(Memory Management Unit)不存在时,需确保 phys_addr 有效,此时用户通过 kvirt 参数设置地址。
前置条件
- 无 MMU 场景下,phys_addr 参数必须为有效的物理地址,或通过 kvirt 传入有效地址。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| kvirt | void * | 内核虚拟地址指针 | 非 NULL 指针,指向有效内存区域 |
| phys_addr | unsigned long | 需要回写的起始物理地址 | 有效物理地址;当 MMU 不存在时需确保有效,若为 0 则使用 kvirt 的地址值 |
| size | unsigned long | 需要回写的内存大小(字节) | 大于 0 |
参考案例
src/middleware/utils/update/common/upg_verify.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| OSAL_API_SUPPORT_DCACHE | 特性宏 | linux 实现体由 #ifdef 包裹,无前缀注入宏(接口级) | 由构建目标决定 |
| LOSCFG_ARCH_ARM_CORTEX_A | 特性宏 | liteos 实现内部分支宏(分支级) | 由构建目标决定 |
osal_dcache_region_inv
声明头文件
功能说明
- 使指定内存区域的 DCache 缓存行失效(invalidate)。
- 起始地址若未按 CACHE_LINE_SIZE(32Bytes)对齐,将自动向下对齐到 CACHE_LINE_SIZE 边界。
- 用于 DMA 读取前使 CPU 缓存失效,确保后续读取来自主存而非缓存。
前置条件
- addr 指向的内存区域必须有效且可访问。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| addr | void * | 需要无效的起始地址 | 非 NULL 指针,指向有效内存区域 |
| size | unsigned long | 需要无效的内存大小(字节) | 大于 0 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| OSAL_API_SUPPORT_DCACHE | 特性宏 | linux 实现体由 #ifdef 包裹,无前缀注入宏(接口级) | 由构建目标决定 |
| LOSCFG_ARCH_ARM_CORTEX_A | 特性宏 | liteos 实现内部分支宏(分支级) | 由构建目标决定 |
osal_dcache_region_clean
声明头文件
功能说明
- 将指定内存区域的 DCache 数据写回主存(clean)。
- 根据起始地址和大小清除 DCache,将脏缓存行写回主存。
- 用于 DMA 写入前确保 CPU 已写入的数据已同步到主存。
前置条件
- addr 指向的内存区域必须有效且可访问。
入参
| 名称 | 参数类型 | 说明 | 约束取值范围 |
|---|---|---|---|
| addr | void * | 需要清除的起始地址 | 非 NULL 指针,指向有效内存区域 |
| size | unsigned int | 需要清除的内存大小(字节) | 大于 0 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| LOSCFG_ARCH_ARM_CORTEX_A | 特性宏 | liteos 实现内部分支宏(分支级) | 由构建目标决定 |