联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话: QQ:1602036736

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 包

进入内核源码目录:

cd /path/to/rk3566_rk3568_linux6.1_release/kernel

执行:

  make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 \ 
       LOCALVERSION="" \ 
       bindeb-pkg -j$(nproc)
注意加 LOCALVERSION="" 是避免 git hash 附加到版本号(因为 .config 里 CONFIG_LOCALVERSION_AUTO=y)。

生成成功后,会在 SDK 根目录(rk3566_rk3568_linux6.1_release/)出现三个文件:

linux-headers-6.1.141_6.1.141-1_arm64.deb
linux-image-6.1.141_6.1.141-1_arm64.deb
linux-libc-dev_6.1.141-1_arm64.deb

第二步:修改 mk-ubuntu-rootfs.sh

将第 49-51 行的 5.10.209 全部替换为 6.1.141:

  • 原来(5.10.209)

    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"

  • 改为(6.1.141)

      LINUX_UPDATE_DEB_HEADERS="../linux-headers-6.1.141_6.1.141-*_arm64.deb"
      LINUX_UPDATE_DEB_IMAGE="../linux-image-6.1.141_6.1.141-*_arm64.deb"
      LINUX_UPDATE_DEB_LIBC_DEV="../linux-libc-dev_6.1.141-*_arm64.deb"

同时第 72-74 行的 cp 命令也要同步修改。

第三步:按 README 正常编译

  cd ubuntu22.04-rootfs-main
GUI=desktop ./mk-base-ubuntu.sh   # 如果之前生成过 base tar.gz 可跳过
GUI=desktop ./mk-ubuntu-rootfs.sh
./mk-image.sh

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册