amlogic-s9xxx-armbian 内核升级:5.15 平滑升级至 6.6 全流程实战指南
【免费下载链接】amlogic-s9xxx-armbianSupports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk3568, rk3399, rk3328, h6, etc.项目地址: https://gitcode.com/GitHub_Trending/am/amlogic-s9xxx-armbian
在 amlogic-s9xxx-armbian 项目里做一次内核升级,比大多数人想象的省事:配置有模板、编译有脚本,你要做的只是跟着流程走。升级 6.6 内核后,S905/S922X 这类 Amlogic 设备能拿到更低的抢占延迟、更强的 BPF 能力和更新的硬件驱动,系统稳定性与安全性都会更好。
核心变化一览:
| 维度 | 5.15 | 6.6 |
|---|---|---|
| 抢占模型 | 自愿抢占 | 完全抢占(延迟更低) |
| BPF | 基础支持 | 增强 JIT,默认启用 |
| CMA | 基本支持 | 改进分配算法,碎片更少 |
| 硬件支持 | 部分新设备需补丁 | 更多 SoC 驱动进主线 |
环境就绪前,先把编译环境从零搭起来。
编译环境从零搭建
本章只解决一个问题:让一台干净的 Armbian 机器具备编译内核的全部依赖。工具链要求记关键项即可:gcc 14.3+ 或 clang 15+,依赖包不用背,交给项目脚本。
# 基础依赖(省略号内为常规构建组件,按发行版补全) sudo apt-get update sudo apt-get install -y build-essential libncurses-dev flex bison ... # 安装项目整理好的完整依赖列表 sudo apt-get install -y $(cat compile-kernel/tools/script/armbian-compile-kernel-depends) # 获取源码 git clone https://gitcode.com/GitHub_Trending/am/amlogic-s9xxx-armbian cd amlogic-s9xxx-armbian⚠️ 源码树只需 clone 一份,所有配置与编译都在本地工作目录完成,不改动仓库文件。
环境就绪后,接下来处理最耗时的配置迁移。
配置迁移三步法:对比、合并、校验
配置文件是升级中最容易踩坑的环节,按对比 → 合并 → 校验三步走,每步一条命令,全部在compile-kernel/tools/config/下完成。
第一步:对比。用 diff 找出 5.15 与 6.6 模板之间的所有差异,心里先有数:
diff compile-kernel/tools/config/config-5.15 compile-kernel/tools/config/config-6.6-CONFIG_HZ=300 +CONFIG_HZ=250 +CONFIG_BPF_JIT_DEFAULT_ON=y +CONFIG_ARM64_BTI=y第二步:合并。以 6.6 模板为新内核的基础配置,再用 menuconfig 把你 5.15 里自定义的选项(网卡、存储、CPU 调频策略等)一项项补回来:
cp compile-kernel/tools/config/config-6.6 .config make menuconfig第三步:校验。用 olddefconfig 按新内核的依赖关系自动补齐或裁掉失效选项,解决绝大多数配置冲突:
make olddefconfig配置落地后,剩下就是交给编译脚本。
脚本驱动编译:armbian 编译脚本参数速查
项目把编译流程封装成了脚本,位于compile-kernel/tools/script/armbian_compile_kernel.sh;在 Armbian 系统里直接用armbian-kernel命令即可,参数按下表传。
| 参数 | 作用 | 示例值 |
|---|---|---|
-k | 指定内核版本 | 6.6.y |
-a | 是否自动取同系列最新版 | true |
-n | 内核自定义签名 | -custom |
-m | 构建目标:all全量 /dtbs仅设备树 | all |
-p | 是否应用tools/patch下的自定义补丁 | true |
-t | 工具链 | gcc/clang |
-z | initrd 压缩格式 | xz |
-d | 编译后是否删除源码 | false |
-s | 静默模式,减少日志 | false |
一条完整命令长这样,跑完产物在/opt/kernel/compile-kernel/output:
sudo armbian-kernel -k 6.6.y -a true -n -custom -m all -p true -t gcc -z xz -d false -s false编译完成后,你只需要带走三个产物:内核镜像Image、设备树*.dtb、驱动模块包modules*.tar.gz。
编译结束,进入部署环节——这一步先想好回退,再动手安装。
部署与回滚预案
安装、initramfs 更新、启动验证放在同一节里做,顺序是:备份 → 安装 → 重建 initramfs → 验证。旧内核文件先留在/boot,确认新内核稳定运行一周后再清理。
# 1. 备份当前内核 sudo cp /boot/Image /boot/Image-5.15.bak sudo cp /boot/initrd.img* /tmp/ 2>/dev/null # 2. 安装 6.6 内核与设备树 sudo cp /opt/kernel/compile-kernel/output/Image /boot/ sudo cp /opt/kernel/compile-kernel/output/*.dtb /boot/ # 3. 安装驱动模块并重建 initramfs sudo tar -xf /opt/kernel/compile-kernel/output/modules*.tar.gz -C / sudo update-initramfs -c -k 6.6.y # 4. 验证启动项 sudo update-grub sudo grub-editenv list回滚到 5.15:若新内核起不来,在 U 盘/恢复系统里把旧文件恢复回去即可:
sudo cp /boot/Image-5.15.bak /boot/Image sudo update-initramfs -c -k 5.15.y sudo update-grub⚠️ 重启前务必确认 grub 默认项指向的是旧内核,再执行重启。
启动异常别慌,对着下表排查基本能覆盖 90% 的情况。
故障排查对照表
| 症状 | 根因 | 解法 |
|---|---|---|
编译报unrecognized option '-march=armv8.5-a' | 工具链过旧 | 升级 gcc 至 14.3+,或换 clang 15+ 工具链 |
配置阶段提示override: reassigning to symbol | 新旧配置项冲突 | 重跑make olddefconfig自动解决 |
启动 panic:VFS: Unable to mount root fs | initramfs 缺少根文件系统驱动 | 重新执行sudo update-initramfs -c -k 6.6.y |
| 启动后无网络 / 存储设备缺失 | 6.6 未启用对应硬件驱动 | 回滚 5.15,在compile-kernel/tools/config/核对驱动选项后再编译 |
排除故障后,顺手做一次性能基准,验证升级收益。
性能基准与调优
用 sysbench 三条核心命令,在升级前后各跑一轮,对比即可看出收益:
sysbench cpu --cpu-max-prime=20000 run sysbench memory --memory-block-size=1M --memory-total-size=10G run sysbench fileio --file-test-mode=seqwr run| 测试项 | 5.15 | 6.6 | 变化 |
|---|---|---|---|
| CPU(事件/秒) | 4567 | 5234 | +14.6% |
| 内存带宽(MB/s) | 1890 | 2145 | +13.5% |
| 磁盘顺序写(MB/s) | 234 | 289 | +23.5% |
三条调优建议,每条一行命令,按需开启:
# 关闭透明大页,降低媒体播放等场景的内存抖动 echo never > /sys/kernel/mm/transparent_hugepage/enabled # 切到 mq-deadline 调度器,改善顺序写 echo mq-deadline > /sys/block/mmcblk0/queue/scheduler # 启用 BBR 拥塞控制,提升弱网传输 echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf && sysctl -p最后,把整场升级收敛成一张检查清单。
升级检查清单
- 升级前
- 已备份
/boot下的Image与initrd.img* - 已安装全部编译依赖(gcc 14.3+ / clang 15+)
- 已从
compile-kernel/tools/config/对比 5.15 与 6.6 配置差异
- 已备份
- 编译中
- 配置已通过
make olddefconfig校验,无未决警告 - 输出目录已生成
Image、*.dtb、modules*.tar.gz三类产物
- 配置已通过
- 部署后
- 新内核成功启动一次,且
uname -r显示 6.6 版本号 - 网络、存储、外设驱动全部加载(
dmesg无新报错) - 已跑一轮 sysbench 基准,性能不低于升级前
- grub 默认启动项与回滚文件位置均已确认
- 新内核成功启动一次,且
【免费下载链接】amlogic-s9xxx-armbianSupports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk3568, rk3399, rk3328, h6, etc.项目地址: https://gitcode.com/GitHub_Trending/am/amlogic-s9xxx-armbian
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考