背景问题
FT1500A(ARM64)
麒麟 Kylin Desktop V10(2020)
Live 启动 4 核
安装后(GRUB 启动)只剩 1 核
内核相同、无参数限制
👉 根因:GRUB 启动时使用的 DTB 与 Live 启动不一致
方案一:让 GRUB 使用和 Live 启动完全一致的 DTB(推荐)
一、方案原理
ARM 多核是否启用,取决于 DTB
Live 启动 → 正确 DTB
GRUB 启动 → 错误 / 缺失 DTB
→ 手动指定 GRUB 使用 Live 的 DTB
二、实施前确认(非常重要)
1️⃣ Live 环境确认是 4 核
lscpu
或:
ls /proc/device-tree/cpus
应看到:
cpu@0 cpu@1 cpu@2 cpu@3
2️⃣ Live 环境获取当前使用的 DTB
dmesg | grep -i dtb
常见输出示例:
OF: fdt: Machine model: Phytium FT1500A OF: fdt: Using dtb at 0x...
或:
ls /proc/device-tree/model
三、操作步骤(核心)
步骤 1:从 Live 系统拷贝正确 DTB
假设 DTB 位于:
/boot/ft1500a-live.dtb
将其复制到已安装系统的 /boot:
mount /dev/sdXn /mnt # 挂载已安装系统根分区 cp /boot/*.dtb /mnt/boot/ sync
⚠️ 确保拷贝的是 Live 启动时正在使用的 DTB
步骤 2:修改 GRUB 配置,显式指定 DTB
编辑 GRUB 配置文件(具体位置因发行版不同):
vi /boot/grub/grub.cfg
找到对应的启动项:
menuentry 'Kylin Desktop V10' {
linux /boot/Image root=UUID=xxxx ro quiet
}修改为:
menuentry 'Kylin Desktop V10' {
linux /boot/Image root=UUID=xxxx ro quiet
devicetree /boot/ft1500a-live.dtb
}步骤 3:重启并验证
reboot
启动后验证:
lscpu ls /proc/device-tree/cpus
应恢复:
cpu@0 cpu@1 cpu@2 cpu@3
四、注意事项
❗ 必须保证 DTB 与主板/SoC 完全匹配
❗ GRUB 更新可能会覆盖
grub.cfg✔ 推荐将 DTB 固化到 GRUB 模板中(如
/etc/grub.d/40_custom)
方案二:跳过 GRUB,直接像 Live 一样启动(成功率最高)
一、方案原理
Live 启动路径正确
GRUB 启动路径有问题
→ 彻底绕过 GRUB
启动链变为:
U-Boot → Linux Image + DTB
二、适用场景
开发商不愿/不能修改 GRUB
现场交付、追求稳定
不要求多系统引导
三、实施方式一:U-Boot 直接启动内核(推荐)
步骤 1:确认内核与 DTB
在 Live 系统中确认:
ls /boot/Image ls /boot/*.dtb
步骤 2:拷贝内核和 DTB 到硬盘
mount /dev/sdXn /mnt cp /boot/Image /mnt/boot/ cp /boot/*.dtb /mnt/boot/ sync
步骤 3:修改 U-Boot 启动参数
进入 U-Boot 控制台:
setenv bootargs root=/dev/sdXn rw console=ttyAMA0,115200
load mmc 0:1 ${kernel_addr_r} /boot/Image
load mmc 0:1 ${fdt_addr_r} /boot/ft1500a-live.dtb
booti ${kernel_addr_r} - ${fdt_addr_r}
saveenvU-boot解释:
一、U-Boot 的启动流程
U-Boot 本身就像 可编程 BIOS:
上电 → 执行 U-Boot
U-Boot 按顺序执行 启动命令(bootcmd)
bootcmd 可以选择:
从硬盘启动
从 U 盘启动
从网络启动(PXE)
二、修改 U-Boot 的参数只是“默认启动设置”
修改
bootargs→ 影响 Linux 内核启动参数(比如 root、console、DTB)修改
bootcmd→ 影响 默认启动路径(硬盘、U盘)执行
saveenv→ 把这些修改写入主板闪存
关键点:
只要你不改
bootcmd指向 U 盘 → U-Boot 默认会先从硬盘启动但 U-Boot 本身依然可以手动选择从 U 盘启动
FT1500A 永久 4 核 U-Boot 启动模板:
# ------------------------------
# 1️⃣ 进入 U-Boot 控制台
# 通常开机按任意键(串口或显示器控制台)
# ------------------------------
# ------------------------------
# 2️⃣ 设置 Linux 内核参数(bootargs)
# root=/dev/mmcblk0p2 <-- 已安装系统根分区
# console=ttyAMA0,115200 <-- 串口
# dtb=正确的 DTB 文件
# ------------------------------
setenv bootargs "root=/dev/mmcblk0p2 rw console=ttyAMA0,115200"
# ------------------------------
# 3️⃣ 设置默认启动命令(bootcmd)
# 这里加载硬盘内核 + Live DTB(保证 4 核)
# ------------------------------
setenv bootcmd 'mmc dev 0; load mmc 0:1 ${kernel_addr_r} /boot/Image; load mmc 0:1 ${fdt_addr_r} /boot/ft1500a-live.dtb; booti ${kernel_addr_r} - ${fdt_addr_r}'
# ------------------------------
# 4️⃣ 保存修改到板子闪存(永久生效)
# ------------------------------
saveenv
# ------------------------------
# ✅ 5️⃣ 解释
# - 每次开机默认从硬盘启动 4 核
# - Linux 内核使用 Live DTB,保证 SMP
# - U 盘启动仍然可用,方法如下:
# 进入 U-Boot 手动执行:
# usb start
# load usb 0:1 ${kernel_addr_r} /boot/Image
# load usb 0:1 ${fdt_addr_r} /boot/ft1500a-live.dtb
# booti ${kernel_addr_r} - ${fdt_addr_r}
# ------------------------------
步骤 4:重启验证
reboot
验证 CPU:
lscpu