缓存控制配置
本文概述了 Zephyr 的缓存接口以及与缓存控制器相关的 Kconfig 选项。API 参考资料请参阅 缓存 API 。
Zephyr 提供了不同的 Kconfig 选项,用于控制缓存控制器的实现方式和控制方式。
CONFIG_CPU_HAS_DCACHE/CONFIG_CPU_HAS_ICACHE:当 CPU 确实支持数据缓存或指令缓存时,应在 SoC / 平台层选择这些隐藏选项。缓存控制器可以位于核心内部,也可以是提供了相应驱动的外部缓存控制器。这些选项用于表明硬件具备某项功能,无论是否计划在 Zephyr 中支持和使用缓存控制,都应设置这些选项。
CONFIG_DCACHE/CONFIG_ICACHE:当 Zephyr 中具备数据缓存或指令缓存支持且能正常工作时,必须选择这些选项。请注意,即使禁用这些选项,缓存仍可能处于启用状态,具体取决于硬件的默认设置。所有与缓存控制相关的代码路径都必须根据这些符号有条件地启用。设置相应符号后,即认为缓存已启用并正在使用。
这些符号并不说明实际向用户提供了什么 API 接口。例如,使用数据缓存的平台可以启用
CONFIG_DCACHE符号,并在平台专用代码中使用 HAL 导出的某个函数来启用和管理数据缓存。CONFIG_CACHE_MANAGEMENT:当通过标准 API 向用户提供缓存操作时,必须选择此选项(请参阅 缓存 API )。启用此选项后,即假定所有缓存函数均已在架构代码或外部缓存控制器驱动中实现。
CONFIG_MEM_ATTR:此选项允许用户使用 内存区域属性 指定一个固定的内存区域,内核初始化完成后,该区域的缓存将被禁用。CONFIG_NOCACHE_MEMORY:此选项允许用户使用__nocache将单个全局变量指定为不缓存。这会指示链接器将所有带有此标记的变量放入内存中的特殊nocache区域,MPU 驱动会将该区域配置为不缓存。CONFIG_ARCH_CACHE/CONFIG_EXTERNAL_CACHE:这两个选项是CACHE_TYPE的互斥选项,用于定义缓存操作是在架构层实现,还是通过具有相应驱动的外部缓存控制器实现。CONFIG_ARCH_CACHE:缓存 API 由架构代码实现CONFIG_EXTERNAL_CACHE:缓存 API 由支持外部缓存控制器的驱动实现。在这种情况下,驱动必须按惯例放在drivers/cache/目录中