
Linux 内核 ARC 架构支持完全指南从交叉编译到 ARCv2 平台适配【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux导读本文基于内核官方文档 Documentation/arch/arc/arc.rst 及其入口 Documentation/arch/arc/index.rst系统讲解 Linux 内核如何为 Synopsys ARC 处理器ARCompact 与 ARCv2 两代指令集完成构建、配置与启动镜像生成。你将掌握ARCHarc交叉编译的完整流程、ARC 处理器高度可配置性在 Kconfig 中的映射方式以及 vmlinux 与 uImage 等启动镜像的生成与加载方法文章同时结合本仓库arch/arc/下的 Kconfig、Makefile 与 defconfig 源码给出可验证的实现细节。ARC 架构文档的组成结构Linux 内核为 ARC 架构维护了独立的一整套文档目录 Documentation/arch/arc/index.rst文档入口仅通过 toctree 聚合下列两个子页面arc.rst主体技术文档涵盖外部资料索引、处理器可配置性注意事项、内核构建方法features.rst通过.. kernel-feat:: features arc指令动态导入内核特性矩阵即 Documentation/features 目录下按架构归类的功能支持列表。因此阅读 ARC 架构文档的正确顺序是先看 index 入口再深入 arc.rst 掌握构建流程最后通过 features.rst 查看 ARC 对各内核特性的支持现状。ARC 处理器可配置性软件视角的三层划分ARC 处理器以高度可配置著称arc.rst 明确指出在 Linux 内核中这些可配置选项被划分为三类对软件透明的选项例如缓存几何参数cache geometry内核无需感知即可正常工作可在运行时检测并适配的选项内核在启动阶段读取处理器配置寄存器后自动启用对应功能必须显式选择/配置的选项需要在make menuconfig中手工指定。从源码看这种分层在 arch/arc/Kconfig 中体现得十分直接。文件开头config ARCKconfig通过大量select语句为整个架构声明了通用能力如OF、IRQ_DOMAIN、HAVE_KPROBES、HAVE_EBPF_JIT if ISA_ARCV2、HAVE_ARCH_TRANSPARENT_HUGEPAGE if ARC_MMU_V4等这类能力对软件透明而 ISA、核心型号、MMU 版本、页大小等则放在 ARC Architecture Configuration 菜单下交由用户在配置阶段显式选择。文档特别提醒并非所有 ARC 处理器的可配置项都被 Linux 支持。SoC 设计团队应参照 ARC HS Databook 的 Appendix E: Configuration for ARC Linux 中的可配置性指南在芯片定义阶段就遵循这些约束提前选定合法配置才能避免 SoC bringup 和软件开发阶段的意外问题。构建 Linux 内核 for ARC两种方式与完整命令交叉编译 vs 原生编译arc.rst 指出 ARC 内核构建与其他架构流程相同有两种途径交叉编译在开发主机一般为 x86_64/amd64上为 ARC 目标编译原生编译在 ARC 平台硬件板卡或 QEMU 模拟器上借助平台上完整的开发环境GNU 工具链、dtc、make 等直接编译。无论哪种方式都需要一个针对主机的、最新版的 ARC GNU 工具链。工具链获取与 PATH 配置文档推荐从以下渠道获取预编译工具链Synopsys GNU 工具链发布版由 foss-for-synopsys-dwc-arc-processors 组织维护Linux 内核交叉编译器集合kernel.org mirrors 的 crosstool 目录Bootlin 的工具链集合。工具链安装后需将其bin目录加入PATH环境变量。内核自身也内置了自动探测逻辑arch/arc/Makefile 在未显式指定CROSS_COMPILE时会依次尝试arc-linux-、arceb-linux-、arc-linux-gnu-前缀。三步构建命令# 1. 指定架构与交叉编译前缀 export ARCHarc export CROSS_COMPILEarc-linux- # 与所装工具链前缀保持一致 # 2. 生成默认配置并编译 make defconfig make构建完成后内核源码树根目录会生成vmlinux文件可通过 JTAG 直接加载到目标系统。若需要可供 U-Boot 引导程序使用的镜像则执行make uImage生成的uImage位于arch/arc/boot目录。从 arch/arc/Makefile 可以确认其实现细节uImage是软链接目标实际产物依据压缩配置而定——uImage.bin未压缩默认、CONFIG_KERNEL_GZIP使能时为uImage.gz、CONFIG_KERNEL_LZMA使能时为uImage.lzma这也与 arch/arc/Kconfig 中HAVE_KERNEL_GZIP/HAVE_KERNEL_LZMA的声明一一对应。默认配置与板级 defconfigmake defconfig使用的默认配置由 arch/arc/Makefile 中的KBUILD_DEFCONFIG : haps_hs_smp_defconfig决定。仓库 arch/arc/configs/ 下共维护 13 份板级 defconfig覆盖了各代 ISA 与典型平台defconfig目标平台/场景haps_hs_defconfig/haps_hs_smp_defconfigARC HS 系列默认 defconfig 来源axs101_defconfig/axs103_defconfig/axs103_smp_defconfigAXS10x 软件平台hsdk_defconfigHSDK 开发板nsim_700_defconfig/nsimosci*_defconfignSIM/nsimosci 模拟器tb10x_defconfigTB10x 平台vdk_hs38_defconfig/vdk_hs38_smp_defconfigVirtual Development KitHS38以 hsdk_defconfig 为例它体现了 ARCv2 平台的关键配置组合CONFIG_ARC_SOC_HSDKy选择 HSDK 平台、CONFIG_ISA_ARCV2y选择第二代 ISA、CONFIG_SMPy、CONFIG_LINUX_LINK_BASE0x90000000、CONFIG_LINUX_RAM_BASE0x80000000、CONFIG_BUILTIN_DTB_NAMEhsdk内嵌设备树并启用了 STMMAC 以太网、DW SPI、GPIO、DRM、MMC 等外设驱动——这些都与 arch/arc/boot/dts/ 下对应的设备树源文件hsdk.dts、axs10x_mb.dtsi等配套。Kconfig 核心选项从 ISA 到缓存与 MMU文档强调部分选项需要在make menuconfig中显式选择以下列出 arch/arc/Kconfig 中与 ARC Linux 构建最相关的核心配置均位于 ARC Architecture Configuration 菜单下ISA 与核心型号choiceISA 选择KconfigISA_ARCOMPACTARC600/700 使用的原始 ARC ISA与ISA_ARCV2面向下一代 ARC-HS 核心默认选项。核心选择KconfigARC_CPU_770ARCompact 下的 ARC770具备 MMU-v3、可变页大小、更大的 J-TLB、LLOCK/SCOND 等特性与ARC_CPU_HSARCv2 下的 ARC HS38x支持最多 4 核 SMP 与一致性、可选 L2 缓存、MMUv4、LDD/STD、DIV/REM、ENTER_S/LEAVE_S、CLRI/SETI 等指令。编译选项ARC_TUNE_MCPUKconfig字符串选项覆盖默认的-mcpu编译器标志若编译器不支持则回退到 ISA 默认值。默认值见 arch/arc/MakefileARCompact 为-mcpuarc700ARCv2 为-mcpuhs38。CPU_BIG_ENDIANKconfig构建大端 ARC 内核对应 Makefile 中的-mbig-endian与链接器-EB。SMP 与多核SMPKconfig使能多 CPU 支持ARCV2 下自动选择ARC_MCIP。NR_CPUSKconfig取值范围 2–4096默认 4。ARC_MCIPKconfigARConnect Multicore IP为 ARC-HS38 提供核间中断、多核调试硬件信号量、共享内存等能力。ARC_SMP_HALT_ON_RESETKconfigSMP 下选择 halt-on-reset 还是所有核同时启动的启动模式。缓存与紧耦合存储器ARC_CACHE及其子项Kconfig全局缓存开关ARC_CACHE_LINE_SHIFT范围 5–7默认 6对应 32/64/128 字节缓存行Linux 要求 I/D 缓存行长一致ARC_HAS_ICACHE/ARC_HAS_DCACHEARC_CACHE_PAGES提供按页覆盖全局缓存使能的细粒度控制注意全局禁用 按页使能不生效。ARC_HAS_ICCM/ARC_HAS_DCCMKconfig单周期紧耦合 RAMICCM 用于存放快速路径代码DCCM 用于数据均默认 64 KBDCCM 映射地址默认0xA0000000。MMU 与页大小MMU 版本KconfigARC_MMU_V3ARCompact可变页大小 1k–16k、J-TLB 128 项、共享地址空间 SASID与ARC_MMU_V4ARCV2。页大小Kconfig4KB / 8KB默认/ 16KB 三选一。大页Kconfig依赖ISA_ARCV2 TRANSPARENT_HUGEPAGE支持 2MB默认/ 16MB。原子操作与访存特性ARC_HAS_LLSCKconfigLLOCK/SCOND 指令用于高效原子操作默认使能。ARCV2 专属KconfigARC_USE_UNALIGNED_MEM_ACCESS硬件非对齐访问默认使能对应 Makefile 中-munaligned-accessARC_HAS_LL6464 位 LDD/STD对应-mno-ll64ARC_HAS_DIV_REM硬件除法/取余指令ARC_HAS_ACCL_REGS累加器寄存器对 r58:r59内核需按进程保存/恢复以及 DSP 支持三档选择无 DSP 扩展 / DSP 仅内核 / DSP 用户空间 / DSPAGU 用户空间。这些选项最终通过 arch/arc/Makefile 中的条件编译转换成具体的编译器/汇编器标志如-mlock、-munaligned-access、-mno-ll64、-mbig-endian使内核二进制与所选 CPU 配置严格匹配。特性矩阵ARC 对内核特性的支持现状features.rst 是理解 ARC 支持边界的重要入口它通过内核的kernel-feat机制动态生成特性矩阵数据源为 Documentation/features 下按架构组织的特性清单。阅读该矩阵可以快速确认某个通用内核特性如 kprobes、jump-label、eBPF JIT 等在 ARC 上是否可用避免在配置阶段踩坑。该机制与 arch/arc/Kconfig 中HAVE_*系列select声明相互印证。源码结构速览ARC 移植的工程布局结合 arch/arc/ 目录可以更深入地理解 ARC 移植的工程组织kernel/入口汇编head.S、entry*.S、中断控制器intc-arcv2.c/intc-compact.c、SMP 与 MCIPsmp.c、mcip.c、异常/陷阱traps.c、未对齐访问处理unaligned.c、FPU、kprobes、kgdb、perf 等mm/缓存管理cache.c、TLB 与页表tlb.c、tlbex.S、DMA、ioremap、highmem、缺页处理fault.clib/针对 ARC 优化的字符串/内存例程memcpy-*、memset-*、strcmp-*等汇编实现net/eBPF JIT 编译器bpf_jit_arcv2.c、bpf_jit_core.c由HAVE_EBPF_JIT if ISA_ARCV2使能boot/dts/各平台设备树源文件AXS10x、HSDK、HAPS、nSIM、TB10x、VDK 等plat-*/平台级代码plat-axs10x、plat-hsdk、plat-sim、plat-tb10x。快速上手检查清单安装与主机匹配的最新 ARC GNU 工具链并将bin目录加入PATH确认ARCHarc、CROSS_COMPILE前缀与工具链一致Makefile 会自动探测arc-linux-/arceb-linux-/arc-linux-gnu-用make defconfig载入默认配置对应haps_hs_smp_defconfig或改用 arch/arc/configs/ 中针对具体板卡的 defconfig如make hsdk_defconfig如需定制运行make menuconfig重点检查 ISA/核心型号、SMP、MMU/页大小、缓存与 ICCM/DCCM 等 arch/arc/Kconfig 中定义的选项并确保所选组合符合 ARC Linux 可配置性指南make生成 vmlinuxJTAG 加载make uImage生成arch/arc/boot/uImageU-Boot 引导在 QEMU 或 nSIM 等模拟器上进行原生/仿真验证再进入真实 SoC bringup 阶段。【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考