kernel6.1 中使用脚本编译 ubuntu22 时的问题
基于 kernel6.1 的 linux SDK通过开源ubuntu22编译脚本去编译ubuntu22时出现的问题。
开源地址:https://github.com/LeenixP/ubuntu22.04-rootfs
问题分析
根本原因
mk-ubuntu-rootfs.sh 脚本是为 kernel 5.10.209 硬编码的,而当前 SDK 是 kernel 6.1.141。脚本第 49-57 行写死了旧版本:
LINUX_UPDATE_DEB_HEADERS="../linux-headers-5.10.209_5.10.209-*_arm64.deb"
LINUX_UPDATE_DEB_IMAGE="../linux-image-5.10.209_5.10.209-*_arm64.deb"
LINUX_UPDATE_DEB_LIBC_DEV="../linux-libc-dev_5.10.209-*_arm64.deb"
两个缺失条件
1. 标准内核 deb 包未生成
脚本要找的三个包是标准 Debian 格式的内核包(由 make bindeb-pkg 生成),不是 Rockchip SDK 自带的 linux-headers-6.1-arm64_arm64.deb(那个是用于编译外部模块的 kbuild 包,两者不同)。
目前 SDK 根目录(../)里没有任何 .deb 文件。
2. 脚本版本号未更新
脚本内核版本写死为 5.10.209,必须改成 6.1.141,不修改脚本根本无法运行。
解决步骤
需要在 Ubuntu 22 虚拟机中执行:
第一步:生成 kernel 6.1 的标准 deb 包
进入内核源码目录:
执行:
注意加 LOCALVERSION="" 是避免 git hash 附加到版本号(因为 .config 里 CONFIG_LOCALVERSION_AUTO=y)。
生成成功后,会在 SDK 根目录(rk3566_rk3568_linux6.1_release/)出现三个文件:
第二步:修改 mk-ubuntu-rootfs.sh
将第 49-51 行的 5.10.209 全部替换为 6.1.141:
原来(5.10.209)
改为(6.1.141)
同时第 72-74 行的 cp 命令也要同步修改。
第三步:按 README 正常编译


评论