RK3288 Armbian 内核编译与避坑指南:从 recompile 到启动排障完整流程
【免费下载链接】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
sudo ./recompile -k 5.15.y跑了一夜,日志最后停在一段找不到内核源包、gcc 版本对不上的报错里。很多人第一反应是"网络不行,重跑一次",重跑之后还是同样的错。其实这类失败九成卡在两件事上:编译依赖没装全,或者工具链版本和内核源码要求不匹配。RK3288 这类 Rockchip 设备要跑 Armbian,走的就是 amlogic-s9xxx-armbian 项目这条线:它把 Amlogic、Rockchip、Allwinner 三个平台的设备都纳入了支持列表(RK3288 在列),既能本地打包整个系统镜像,也能单独编译内核再装进已有系统。下面按真实踩坑的顺序讲怎么把链路走通。
编译报错先看依赖和工具链
依赖缺失是最先要排除的变量。项目给 Ubuntu 24.04 准备了一份专门的依赖清单文件 compile-kernel/tools/script/ubuntu2404-build-armbian-depends,用$(cat ...)展开后一次性apt-get install装完,比逐条看报错补装省事得多。其他发行版没有现成清单,只能按报错提示手动补对应的开发包。常见坑集中在三处:gcc/clang 版本与内核源码要求不符、内核头文件和开发库缺失、交叉编译工具配置错误。
工具链用recompile的-t参数切换,这是个可选项而不是玄学问题:
gcc:默认值,稳定性最好,遇到问题先拿它做基线clang:编译更快,错误提示更友好,适合读报错定位配置问题gcc-<version>:指定版本,依赖全、报错依旧时用它排除工具链冲突
磁盘是第三道门槛:源码、工具链、中间产物加一起,编译机至少留 20GB 可用空间,不够的话先清临时文件再开跑。
recompile 关键参数逐个讲清楚
编译内核的命令只有一条,但参数决定了产物长什么样:
sudo ./recompile -k 5.15.y -a true -n -rk3288 -p true拆开看每个参数的作用:
-k 5.15.y:指定内核版本,带.y表示"这个系列"。推荐 5.15.y 是因为它对老 Rockchip 芯片的驱动覆盖比较完整;也可以写成精确版本号如5.15.100-a true:自动取同系列最新版,设为false则严格按-k写的版本编译。日常建议保持true-n -rk3288:给内核加自定义签名,产物会变成5.15.100-rk3288这类名字,多版本并存时一眼能分清哪个是专给 RK3288 编的。签名里不要带空格-p true:应用 compile-kernel/tools/patch 目录下的自定义补丁,默认是关的
脚本会自动下载构建环境和内核源码、完成全部配置,产物落在源码树的compile-kernel/output目录里。编译全程盯三个节点,对应不同阶段的问题:配置阶段检查 RK3288 相关驱动有没有被启用;编译阶段盯着内存水位,机器内存不够时编译会被 OOM 杀掉,日志停在很随机的位置,看起来像"随机失败";打包阶段核对Image、modules、dtbs是否齐全——用-m dtbs只编设备树、-m all编全套,按需选择。
启动失败的三步排查法
系统烧好后第一次开机卡在 logo 或反复重启,不要盲目重刷,按顺序查三样东西:
- 内核镜像完整性——下载或编译产出的
Image有没有被截断,armbian-update这类流程内部会做 sha256 校验,手动拷贝时要自己确认文件大小与来源一致 - 设备树匹配——dtb 文件名和设备芯片对不上,机器能出画面但起不来或起成错误型号。拿不准就先用
-m dtbs单独重编 DTB 验证 - bootloader 配置——u-boot 指向的内核路径、bootargs 参数是不是被改坏了
启动慢属于另一类问题,优化思路有三条:裁剪不需要的内核模块、把 initramfs 压小(-z参数选压缩格式,xz / gzip / zstd / lzma,默认xz)、把 bootargs 精简到只留设备真正用到的项。
还有一道保命机制值得先知道:armbian-update更新内核时会自动把当前内核备份到/ddbr/backup,最多保留 3 份。新内核起不来的时候,用armbian-update -s把系统内核从 eMMC/SD 备份里恢复回来,不用重新刷机。
装好之后:在线更新内核与内存管理
日常维护基本就是两条命令。先说更新:
armbian-update不带参数时直接升到最新版;也可以-k 5.15锁定系列(自动取该系列最新)、-k 5.15.50锁精确版本,-d deb指定用 deb 包格式安装,后续要编自定义驱动模块时 deb 格式更方便。
内存这边,RK3288 常见 1-2GB 配置,跑 Docker 这类吃内存的东西容易触底。解决办法是拿磁盘空间补内存:
armbian-swap 1参数单位是 GB,默认 1,按剩余空间调整。另外把不需要的常驻服务关掉,比堆优化参数更有效。装监控组件走软件中心:armbian-software一键装/更新/卸载常用软件,armbian-software -u先刷新本地软件列表,装好性能监控组件后,内存和负载有没有异常一眼可见。
定制与集群:把内核版本管起来
📌 有驱动不在主线内核里、或者要针对特定应用调性能时,就从"编译"切入定制:往 compile-kernel/tools/patch 里加补丁、调 compile-kernel/tools/config 下的配置模板,-p true打补丁后重编,再按需裁剪掉用不到的内核功能减小体积。
设备数量上去了(比如拿一批盒子组小集群),管理核心就变成"版本统一":
- 统一内核版本——所有设备用同一个
-k系列号编译,-n加同一签名,升级时批量执行同一条armbian-update -k 5.15 - 批量镜像——本地打包用
rebuild一次出多型号镜像,-b支持用下划线拼接多个设备代号,也支持按平台批量(如-b rockchip) - 集中监控——每台机器装好监控组件后,靠
armbian-sync把系统里的服务脚本同步到最新版,保持整批设备行为一致
批量部署前建议先在一台机器上把下面清单跑通,再复制到整批。
完成度检查清单
- 依赖清单装完,
gcc/clang版本与内核要求一致,磁盘余量 ≥ 20GB sudo ./recompile -k 5.15.y -a true -n -rk3288编译跑通,compile-kernel/output里Image、modules、dtbs齐全- 设备用新内核正常启动,dtb 型号与芯片匹配
/ddbr/backup中能看到当前内核备份,armbian-update -s恢复路径验证过一次armbian-swap已按内存规模配置,重负载场景下不再出现 OOM- 集群场景:所有设备内核版本号一致,
armbian-sync已统一执行
下一步行动(按顺序做,每步都有可验证结果):
- 在编译机上装完依赖清单文件里的全部包,跑
gcc --version记录版本,作为后续排查基线 - 执行一次
recompile,编译结束后数一下compile-kernel/output里的产物类型是否完整 - 设备上执行
armbian-update,完成后到/ddbr/backup确认生成了备份 - 执行
armbian-swap 1,用free -h确认 swap 生效,再跑一个吃内存的应用压测 - 集群部署时,先在一台设备上走完上面 1-4 步,全部打勾后再批量执行
参考文档在仓库里都有对应章节,遇到问题优先查 documents/README.md,编译相关的参数全表见 compile-kernel/README.md。
【免费下载链接】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),仅供参考