Arm64/Aarch64 Linux 5.9内核启动报错:无法找到引导CPU节点求助
Arm64 Linux 5.9设备树启动CPU匹配问题解决思路
针对启动时出现的Failed to find device node for boot cpu和missing boot CPU MPIDR, not enabling secondaries警告,核心问题是内核无法通过MPIDR寄存器值匹配到设备树中的Boot CPU节点,以下是具体解决步骤:
修正CPUs节点的地址编码配置
Arm64架构下,CPU的reg属性需要对应MPIDR_EL1寄存器的64位Affinity值,因此CPUs节点的#address-cells必须设为<2>(表示用两个32位单元存储64位地址),当前配置的<0x01>仅支持32位地址,会导致内核解析MPIDR不完整。修改后的CPUs节点开头应为:cpus { #size-cells = <0>; #address-cells = <2>; // 后续CPU节点... };匹配Boot CPU的MPIDR值到
reg属性- 在Bootloader中打印Boot CPU的MPIDR_EL1寄存器值(执行
mrs x0, mpidr_el1后输出x0的值),取该值的低64位(通常掩码为0xFFFFFFFFFFFFFF,去掉MT和Reserved位)。 - 将该值拆分为两个32位单元,填入CPU节点的
reg属性。例如,若MPIDR值为0x00000000,则reg = <0x0 0x0>;若为0x00000001,则reg = <0x0 0x01>。确保Boot CPU对应的cpu@x节点的reg值与实际MPIDR完全匹配。
- 在Bootloader中打印Boot CPU的MPIDR_EL1寄存器值(执行
完善PSCI相关配置
由于使用了enable-method = "psci",需确保:- 设备树中添加PSCI节点,示例:
psci { compatible = "arm,psci-1.0"; // 根据平台支持的PSCI版本调整 method = "smc"; // 或"hvc",对应平台的PSCI调用方式 }; - 内核配置开启
CONFIG_ARM_PSCI、CONFIG_ARM_PSCI_FW,同时确保Bootloader已完成PSCI框架的初始化。
- 设备树中添加PSCI节点,示例:
验证内核与Bootloader的其他配置
- 内核需开启
CONFIG_SMP以支持多核启动; - 确认Bootloader传递给内核的设备树镜像完整无损坏,物理地址传递正确。
- 内核需开启
内容的提问来源于stack exchange,提问作者Jayaprakash
相关产品推荐
相关产品推荐

