diff options
| author | TENGZIJUN <[email protected]> | 2026-11-05 16:31:33 +0800 |
|---|---|---|
| committer | Rbb666 <[email protected]> | 2026-11-05 22:26:23 +0800 |
| commit | 89c70abccd0359f9f7ba9df2e81dbe764d3e78d3 (patch) | |
| tree | 0cfa957a6d4d0f113c1ba5b8d0ef1046b9644889 | |
| parent | cbadbdf1bff3430bdb2f3fa6c52e7308ad1ac016 (diff) | |
| -rw-r--r-- | documentation/4.tool/scons/libcpu_kconfig_arm_split.md | 90 | ||||
| -rw-r--r-- | libcpu/Kconfig | 174 | ||||
| -rw-r--r-- | libcpu/arm/Kconfig | 176 |
3 files changed, 267 insertions, 173 deletions
diff --git a/documentation/4.tool/scons/libcpu_kconfig_arm_split.md b/documentation/4.tool/scons/libcpu_kconfig_arm_split.md new file mode 100644 index 0000000000..862c6fe37c --- /dev/null +++ b/documentation/4.tool/scons/libcpu_kconfig_arm_split.md @@ -0,0 +1,90 @@ +# libcpu Kconfig 的 ARM 配置拆分说明 + +## 目的与范围 + +`libcpu/Kconfig` 原来同时包含 CPU 公共能力、跨架构内存管理、ARM 配置、其他架构配置及子配置文件入口。本次将 ARM 专属配置集中到 `libcpu/arm/Kconfig`,便于按架构维护。 + +本次只搬迁 ARM 配置,保留配置符号、类型、提示文字、默认值、依赖、选择关系和原有条件,不拆分其他架构,不新增菜单,不修改 BSP 配置。 + +## 文件职责 + +| 文件 | 职责 | +| --- | --- | +| `libcpu/Kconfig` | CPU 公共能力、跨架构内存管理、其他架构配置,以及子文件引用 | +| `libcpu/arm/Kconfig` | ARM 架构标识、内核型号及 ARM 专属能力 | +| `libcpu/aarch64/Kconfig` | 原有 AArch64 详细配置,本次不修改 | +| `libcpu/risc-v/Kconfig` | 原有 RISC-V 详细配置,本次不修改 | + +新增文件沿用仓库已有的 `Kconfig` 大小写命名。 + +## 搬迁内容 + +- ARM 架构及内核标识:`ARCH_ARM`、所有 `ARCH_ARM_CORTEX_*`、`ARCH_ARM_ARM9`、`ARCH_ARM_ARM11` 和 `ARCH_ARMV8`。 +- ARM 专属能力:`ARCH_ARM_BOOTWITH_FLUSH_CACHE`、`ARCH_ARM_MMU`、`ARCH_ARM_MPU` 和 `ARCH_ARM_SECURE_MODE`。 +- Cortex-A 配套选项:`RT_SMP_AUTO_BOOT`、`RT_USING_GIC_V2`、`RT_USING_GIC_V3` 和 `RT_NO_USING_GIC`。 +- 当前依赖 Cortex-A 的选项:`RT_IOREMAP_LATE` 和 `RT_BACKTRACE_FUNCTION_NAME`。 + +ARM 条目在新文件内保留原先的相对顺序。 + +## 引用与依赖处理 + +`libcpu/Kconfig` 在原 `ARCH_ARM_BOOTWITH_FLUSH_CACHE` 定义的位置无条件引入 ARM 子文件: + +```kconfig +rsource "arm/Kconfig" +``` + +`rsource` 按当前 Kconfig 文件所在目录解析相对路径,且目标文件缺失时会报错。BSP 继续通过原有入口加载 `libcpu/Kconfig`,无需逐个调整引用。 + +引用外不增加 `if ARCH_ARM`。子文件本身定义 `ARCH_ARM`,各内核型号通过 `select` 选择该符号;额外增加条件会改变依赖关系,并可能形成循环依赖。 + +以下配置保留在公共文件: + +- CPU 位宽、大小端、缓存、原子操作、栈方向和 FFS 等公共能力。 +- `ARCH_MM_MMU`、`ARCH_MM_MPU`、`ARCH_REMAP_KERNEL`、`ARCH_USING_ASID` 等跨架构能力。 +- `KERNEL_VADDR_START`:同时包含 ARM、ARMv8 和 RISC-V 的地址默认值,继续保留在 `if RT_USING_SMART` 内。 + +`RT_IOREMAP_LATE` 搬迁后单独保留 `if RT_USING_SMART`,并保留原有的 Cortex-A、MMU 依赖。GIC 等选项继续位于原有的 `if ARCH_ARM_CORTEX_A` 内。 + +`ARCH_ARMV8` 作为 ARM 架构标识一起搬迁;原有 `ARCH_ARMV8 && ARCH_CPU_64BIT` 条件下的 AArch64 子文件入口保持原样。 + +原文件中两处 `ARCH_ARM_CORTEX_R` 定义一起原样搬迁,不在此次合并;公共配置中重复的 `ARCH_CPU_STACK_GROWS_UPWARD` 也保持原样。 + +## 验证结果 + +使用 Kconfiglib 14.1.0,基于以下 BSP 工作区已有的 `.config`,比较搬迁前后的解析结果: + +| BSP | 覆盖范围 | 比较结果 | +| --- | --- | --- | +| `bsp/frdm-k64f` | Cortex-M4 | 一致 | +| `bsp/qemu-vexpress-a9` | Cortex-A9、MMU、GIC | 一致 | +| `bsp/renesas/rzt2m_rsk` | Cortex-R52 | 一致 | +| `bsp/qemu-virt64-aarch64` | ARMv8、64 位及 AArch64 子配置 | 一致 | +| `bsp/qemu-virt64-riscv` | RISC-V 和公共配置 | 一致 | + +比较覆盖全部解析符号的值、类型、可见性、可赋值范围、默认值、直接依赖、反向依赖,以及各定义节点的提示、依赖、`select` 和 `imply`。忽略文件路径及行号变化后,解析警告也与搬迁前一致,没有新增警告。 + +此外,在内存中为 Cortex-A9、AArch64 和 RISC-V BSP 启用 `RT_USING_SMART` 后再次比较,结果一致: + +- Cortex-A9 的 `KERNEL_VADDR_START` 为 `0xc0000000`,并验证 `RT_IOREMAP_LATE` 可启用。 +- AArch64 的 `KERNEL_VADDR_START` 为 `0xffff000000000000`。 +- RISC-V 的 `KERNEL_VADDR_START` 为 `0xffffffc000000000`。 + +验证仅加载配置及在内存中调整选项,没有写入 BSP 的 `.config` 或 `rtconfig.h`,没有进行固件编译或运行验证。 + +## 后续验证方式 + +在已安装 Kconfiglib 的 Python 环境中,从待验证 BSP 的目录运行以下命令,可以检查配置解析及主要架构符号;该命令不写回配置文件: + +```sh +python3 - <<'PY' +import kconfiglib + +config = kconfiglib.Kconfig("Kconfig") +config.load_config(".config") +for name in ("ARCH_ARM", "ARCH_ARMV8", "ARCH_CPU_64BIT", "ARCH_RISCV"): + print("{}={}".format(name, config.syms[name].str_value)) +PY +``` + +需要复查等价性时,应在变更前后使用同一份 BSP 配置和同一版本的解析器,比较上述符号属性,并排除搬迁导致的诊断位置变化。上述简短命令只用于解析检查,不能替代完整的前后比较。 diff --git a/libcpu/Kconfig b/libcpu/Kconfig index 3b1edab250..ead8d14794 100644 --- a/libcpu/Kconfig +++ b/libcpu/Kconfig @@ -24,9 +24,7 @@ config ARCH_USING_HW_ATOMIC_16 config ARCH_CPU_BIG_ENDIAN bool -config ARCH_ARM_BOOTWITH_FLUSH_CACHE - bool - default n +rsource "arm/Kconfig" config ARCH_CPU_STACK_GROWS_UPWARD bool @@ -42,97 +40,6 @@ config ARCH_MM_MMU config ARCH_MM_MPU bool -config ARCH_ARM - bool - -config ARCH_ARM_CORTEX_M - bool - select ARCH_ARM - -config ARCH_ARM_CORTEX_R - bool - select ARCH_ARM - -config ARCH_ARM_CORTEX_FPU - bool - -config ARCH_ARM_CORTEX_SECURE - bool - -config ARCH_ARM_CORTEX_M0 - bool - select ARCH_ARM_CORTEX_M - -config ARCH_ARM_CORTEX_M3 - bool - select ARCH_ARM_CORTEX_M - select RT_USING_CPU_FFS - select RT_USING_HW_ATOMIC - select ARCH_USING_HW_ATOMIC_8 - select ARCH_USING_HW_ATOMIC_16 - -config ARCH_ARM_MPU - bool - depends on ARCH_ARM - select ARCH_MM_MPU - -config ARCH_ARM_CORTEX_M4 - bool - select ARCH_ARM_CORTEX_M - select RT_USING_CPU_FFS - select RT_USING_HW_ATOMIC - select ARCH_USING_HW_ATOMIC_8 - select ARCH_USING_HW_ATOMIC_16 - -config ARCH_ARM_CORTEX_M7 - bool - select ARCH_ARM_CORTEX_M - select RT_USING_CPU_FFS - select RT_USING_CACHE - select RT_USING_HW_ATOMIC - select ARCH_USING_HW_ATOMIC_8 - select ARCH_USING_HW_ATOMIC_16 - -config ARCH_ARM_CORTEX_M85 - bool - select ARCH_ARM_CORTEX_M - select RT_USING_CPU_FFS - select RT_USING_HW_ATOMIC - select ARCH_USING_HW_ATOMIC_8 - select ARCH_USING_HW_ATOMIC_16 - -config ARCH_ARM_CORTEX_M23 - bool - select ARCH_ARM_CORTEX_M - select RT_USING_HW_ATOMIC - select ARCH_USING_HW_ATOMIC_8 - select ARCH_USING_HW_ATOMIC_16 - -config ARCH_ARM_CORTEX_M33 - bool - select ARCH_ARM_CORTEX_M - select RT_USING_CPU_FFS - select RT_USING_HW_ATOMIC - select ARCH_USING_HW_ATOMIC_8 - select ARCH_USING_HW_ATOMIC_16 - -config ARCH_ARM_CORTEX_R - bool - select ARCH_ARM - select RT_USING_HW_ATOMIC - select ARCH_USING_HW_ATOMIC_8 - select ARCH_USING_HW_ATOMIC_16 - -config ARCH_ARM_CORTEX_R52 - bool - select ARCH_ARM_CORTEX_R - -config ARCH_ARM_MMU - bool - select RT_USING_CACHE - select ARCH_MM_MMU - depends on ARCH_ARM - if RT_USING_SMART config KERNEL_VADDR_START hex "The virtural address of kernel start" @@ -141,87 +48,8 @@ if RT_USING_SMART default 0xffffffc000000000 if ARCH_RISCV && ARCH_REMAP_KERNEL default 0x80000000 if ARCH_RISCV depends on ARCH_MM_MMU - - config RT_IOREMAP_LATE - bool "Support to create IO mapping in the kernel address space after system initlalization." - default n - depends on ARCH_ARM_CORTEX_A - depends on ARCH_MM_MMU endif -config ARCH_ARM_ARM9 - bool - select ARCH_ARM - -config ARCH_ARM_ARM11 - bool - select ARCH_ARM - -config ARCH_ARM_CORTEX_A - bool - select ARCH_ARM - select ARCH_ARM_MMU - select RT_USING_CPU_FFS - select RT_USING_HW_ATOMIC - select ARCH_USING_HW_ATOMIC_8 - select ARCH_USING_HW_ATOMIC_16 - - if ARCH_ARM_CORTEX_A - config RT_SMP_AUTO_BOOT - bool - default n - - config RT_USING_GIC_V2 - bool - default n - - config RT_USING_GIC_V3 - bool - default n - - config RT_NO_USING_GIC - bool - default y if !RT_USING_GIC_V2 && !RT_USING_GIC_V3 - endif - -config ARCH_ARM_CORTEX_A5 - bool - select ARCH_ARM_CORTEX_A - -config ARCH_ARM_CORTEX_A7 - bool - select ARCH_ARM_CORTEX_A - -config ARCH_ARM_CORTEX_A8 - bool - select ARCH_ARM_CORTEX_A - -config ARCH_ARM_CORTEX_A9 - bool - select ARCH_ARM_CORTEX_A - -config ARCH_ARM_CORTEX_A55 - bool - select ARCH_ARM_CORTEX_A - -config ARCH_ARM_SECURE_MODE - bool "Running in secure mode [ARM Cortex-A]" - default n - depends on ARCH_ARM_CORTEX_A - -config RT_BACKTRACE_FUNCTION_NAME - bool "To show function name when backtrace." - default n - depends on ARCH_ARM_CORTEX_A - -config ARCH_ARMV8 - bool - select ARCH_ARM - select ARCH_ARM_MMU - select RT_USING_CPU_FFS - select ARCH_USING_ASID - select ARCH_USING_IRQ_CTX_LIST - config ARCH_MIPS bool diff --git a/libcpu/arm/Kconfig b/libcpu/arm/Kconfig new file mode 100644 index 0000000000..80a52ec350 --- /dev/null +++ b/libcpu/arm/Kconfig @@ -0,0 +1,176 @@ +config ARCH_ARM_BOOTWITH_FLUSH_CACHE + bool + default n + +config ARCH_ARM + bool + +config ARCH_ARM_CORTEX_M + bool + select ARCH_ARM + +config ARCH_ARM_CORTEX_R + bool + select ARCH_ARM + +config ARCH_ARM_CORTEX_FPU + bool + +config ARCH_ARM_CORTEX_SECURE + bool + +config ARCH_ARM_CORTEX_M0 + bool + select ARCH_ARM_CORTEX_M + +config ARCH_ARM_CORTEX_M3 + bool + select ARCH_ARM_CORTEX_M + select RT_USING_CPU_FFS + select RT_USING_HW_ATOMIC + select ARCH_USING_HW_ATOMIC_8 + select ARCH_USING_HW_ATOMIC_16 + +config ARCH_ARM_MPU + bool + depends on ARCH_ARM + select ARCH_MM_MPU + +config ARCH_ARM_CORTEX_M4 + bool + select ARCH_ARM_CORTEX_M + select RT_USING_CPU_FFS + select RT_USING_HW_ATOMIC + select ARCH_USING_HW_ATOMIC_8 + select ARCH_USING_HW_ATOMIC_16 + +config ARCH_ARM_CORTEX_M7 + bool + select ARCH_ARM_CORTEX_M + select RT_USING_CPU_FFS + select RT_USING_CACHE + select RT_USING_HW_ATOMIC + select ARCH_USING_HW_ATOMIC_8 + select ARCH_USING_HW_ATOMIC_16 + +config ARCH_ARM_CORTEX_M85 + bool + select ARCH_ARM_CORTEX_M + select RT_USING_CPU_FFS + select RT_USING_HW_ATOMIC + select ARCH_USING_HW_ATOMIC_8 + select ARCH_USING_HW_ATOMIC_16 + +config ARCH_ARM_CORTEX_M23 + bool + select ARCH_ARM_CORTEX_M + select RT_USING_HW_ATOMIC + select ARCH_USING_HW_ATOMIC_8 + select ARCH_USING_HW_ATOMIC_16 + +config ARCH_ARM_CORTEX_M33 + bool + select ARCH_ARM_CORTEX_M + select RT_USING_CPU_FFS + select RT_USING_HW_ATOMIC + select ARCH_USING_HW_ATOMIC_8 + select ARCH_USING_HW_ATOMIC_16 + +config ARCH_ARM_CORTEX_R + bool + select ARCH_ARM + select RT_USING_HW_ATOMIC + select ARCH_USING_HW_ATOMIC_8 + select ARCH_USING_HW_ATOMIC_16 + +config ARCH_ARM_CORTEX_R52 + bool + select ARCH_ARM_CORTEX_R + +config ARCH_ARM_MMU + bool + select RT_USING_CACHE + select ARCH_MM_MMU + depends on ARCH_ARM + +if RT_USING_SMART + config RT_IOREMAP_LATE + bool "Support to create IO mapping in the kernel address space after system initlalization." + default n + depends on ARCH_ARM_CORTEX_A + depends on ARCH_MM_MMU +endif + +config ARCH_ARM_ARM9 + bool + select ARCH_ARM + +config ARCH_ARM_ARM11 + bool + select ARCH_ARM + +config ARCH_ARM_CORTEX_A + bool + select ARCH_ARM + select ARCH_ARM_MMU + select RT_USING_CPU_FFS + select RT_USING_HW_ATOMIC + select ARCH_USING_HW_ATOMIC_8 + select ARCH_USING_HW_ATOMIC_16 + + if ARCH_ARM_CORTEX_A + config RT_SMP_AUTO_BOOT + bool + default n + + config RT_USING_GIC_V2 + bool + default n + + config RT_USING_GIC_V3 + bool + default n + + config RT_NO_USING_GIC + bool + default y if !RT_USING_GIC_V2 && !RT_USING_GIC_V3 + endif + +config ARCH_ARM_CORTEX_A5 + bool + select ARCH_ARM_CORTEX_A + +config ARCH_ARM_CORTEX_A7 + bool + select ARCH_ARM_CORTEX_A + +config ARCH_ARM_CORTEX_A8 + bool + select ARCH_ARM_CORTEX_A + +config ARCH_ARM_CORTEX_A9 + bool + select ARCH_ARM_CORTEX_A + +config ARCH_ARM_CORTEX_A55 + bool + select ARCH_ARM_CORTEX_A + +config ARCH_ARM_SECURE_MODE + bool "Running in secure mode [ARM Cortex-A]" + default n + depends on ARCH_ARM_CORTEX_A + +config RT_BACKTRACE_FUNCTION_NAME + bool "To show function name when backtrace." + default n + depends on ARCH_ARM_CORTEX_A + +config ARCH_ARMV8 + bool + select ARCH_ARM + select ARCH_ARM_MMU + select RT_USING_CPU_FFS + select ARCH_USING_ASID + select ARCH_USING_IRQ_CTX_LIST + |
