日期: 2026-08-30 设备: OrangePi 5 Plus (RK3588, ARM64) 系统版本: fnOS 1.2.0503 问题内核: linux-image-6.18.18.c994-trim(更新后一直提示更新,重启也不生效)
问题现象
系统更新提示有 6.18.18.c994-trim 内核包待更新,执行更新、重启后,更新提示依然存在,反复出现。
根本原因
飞牛OS在 RK3588 这类走 U-Boot(而非GRUB)引导的机型上,OTA更新脚本存在结构性薄弱环节:
新内核文件(
vmlinuz-*、config-*、System.map-*)会被正常下载到/boot但对应的
initrd.img-*和uInitrd-*(U-Boot启动所需的initramfs)可能没有被正确生成U-Boot 实际读取的是
/boot/Image和/boot/uInitrd这两个固定名字的符号链接(不是像GRUB那样动态读取配置选择内核版本),OTA脚本需要显式把这两个链接重新指向新内核——这一步容易失败或被跳过以上任一环节出问题,系统重启后仍从旧内核启动,
uname -a版本不变,更新程序检测不到变化,于是持续提示"有更新"
这不是偶发个例,而是该机型OTA机制的已知薄弱点,此前也因为 /usr/sbin 不在 PATH 里导致 update-initramfs 底层工具调不到而出现过同类问题。
排查与修复步骤
1. 确认当前实际运行的内核
uname -a
版本号如果不是目标版本,说明切换确实没成功。
2. 检查 /boot 目录,确认新内核相关文件是否齐全
ls -la /boot/ | grep -E "<目标内核版本号>|Image|uInitrd|vmlinuz"
重点检查:
新内核的
vmlinuz-<版本>是否存在对应的
initrd.img-<版本>和uInitrd-<版本>是否存在(最常见的缺失点)
3. 检查 U-Boot 实际读取的符号链接
ls -la /boot/Image /boot/uInitrd
看这两个链接当前指向的是不是旧内核版本。
4. 如缺少 initramfs,手动生成
export PATH=$PATH:/usr/sbin
sudo update-initramfs -c -k <目标内核版本号>
生成成功后会自动完成U-Boot格式封装(uInitrd),并可能自动切换 uInitrd 符号链接(但 Image 链接不一定会自动切)。
5. 检查并手动切换 /boot/Image 符号链接(如未自动切换)
ls -la /boot/Image
若仍指向旧内核,手动切换:
cd /boot
sudo ln -sf vmlinuz-<目标内核版本号> Image
ls -la /boot/Image /boot/uInitrd # 确认两个链接都已指向新版本
6. 重启并验证
sudo reboot
重启后:
uname -a
确认版本号已变为目标内核版本,并去系统更新页面确认提示已消失。
后续建议
旧内核文件(如本次的
c821-trim)不必立即删除,留作应急回退,待新内核稳定运行几天后再清理每次系统更新后,养成先用
uname -a核对内核版本的习惯,而不只是看更新页面是否还提示——如果版本没变,第一时间按上述流程排查,几分钟即可解决,避免问题累积