本文基于Redhat Enterprise Linux 9.3 (aarch64架构)操作系统,使用容器运行Ubuntu 22.04,简要介绍一下该环境下将内核编译为deb软件包的方法。

1、安装编译环境:

apt install debhelper rsync kmod cpio
apt install build-essential dwarves python3 libncurses-dev flex bison libssl-dev bc libelf-dev zstd gnupg2 wget -y

2、拉取内核源码包:

你可以从这里很方便的获取到内核的源码:https://kernel.org/

下载你所需要的内核版本,我们这里以6.6.21版本的Linux内核为例:

这是图片

点击longterm 6.6.21后的tarball,复制下载链接,回到服务器中使用以下命令下载,解压并切换到解压出来的目录中:

wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.21.tar.xz
tar -xvf linux-6.6.21.tar.xz
cd linux-6.6.21

3、编译内核:

我们首先配置内核选项,使用以下命令打开内核选项菜单:

make menuconfig

如果你是在x86平台为aarch64进行交叉编译的话,那么使用以下的命令:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig

注意,CROSS_COMPILE=后替换为你本地的交叉编译环境的位置!

在执行完上述命令之后,你会看到一个这样的页面:

这是图片

你可以在这个页面中,去配置你所需要配置的内核选项,或者你还可以从/boot目录下找到你目前所使用的内核的配置文件,你可以将该配置文件复制到内核源码文件夹中:

cp /boot/config* .config

如果是交叉编译的话,建议直接使用aarch64的配置文件,而不是引用x86平台的内核配置文件,这里我们提供了一个配置文件可供选择:配置文件。你可以直接引用这一个配置文件进行编译。

在配置完成之后,接下来就是编译了,使用下一个命令编译:

make bindeb-pkg LOCALVERSION=-custom KDEB_PKGVERSION=$(make kernelversion)-1 -i -j8

同样的,如果是在x86平台下交叉编译的话,使用如下的命令:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bindeb-pkg LOCALVERSION=-custom KDEB_PKGVERSION=$(make kernelversion)-1 -i -j8 

注意,CROSS_COMPILE=后替换为你本地的交叉编译环境的位置!

然后等待编译完成即可:

no

在编译完成之后,在 ../目录下,你会找到linux-headers-6.6.21-20240315-1.aarch64-custom_6.6.21-1_arm64.deb,linux-image-6.6.21-20240315-1.aarch64-custom_6.6.21-1_arm64.deb,linux-libc-dev_6.6.21-1_arm64.deb。

将内核这部分文件拷贝到需要安装的计算机上,就可以使用dpkg安装啦!