电脑维修 笔记本维修 手机维修 打印机维修 IT外包
24小时服务电话:0731-84688748  18229718750
地址:长沙市天心区青园街道友谊社区友谊小区A3栋15号

服务区域:湖南省政府方圆5公里内(友谊社区 青园小区 阳光嘉园 天一康园 湘超景园 国际公寓 HOPSCA写字楼 豪布斯卡 天城·泰祥苑 国检园 梦网景园 石人村金石·蓉园安置小区 鑫隆家园 湘诚嘉园 童话里 七星车城 华铁佳苑 巢之恋 鑫远杰座 鑫远华城 满庭芳 宽域 鑫天山水洲城 星语林名园 青园街道进湾子社区 白沙世纪佳园 长沙欧洲城 长沙奥林匹克花园 高升安置小区 湘府名邸 嘉尚君远 富景园 鑫源公寓 岳泰理想城 等等...)

银河麒麟V10 在飞腾FT1500A CPU下PE识别4核,正常桌面识别1核修复方法 - 全文内容:

显示技术博客列表

银河麒麟V10 在飞腾FT1500A CPU下PE识别4核,正常桌面识别1核修复方法

超短链接


背景问题

  • 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}
saveenv

U-boot解释:

一、U-Boot 的启动流程

U-Boot 本身就像 可编程 BIOS

  1. 上电 → 执行 U-Boot

  2. U-Boot 按顺序执行 启动命令(bootcmd)

  3. 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