1.kernel下载与解压
linux kernel下载地址:
https://www.kernel.org/pub/linux/kernel/
我下载的是linux-5.4.146.tar.xz
解压:
tar -xf linux-5.4.146.tar.xz
2.环境
编译前需做好准备工作,安装必要的工具:
sudo apt install build-essential
sudo apt install kernel-package
sudo apt install dwarves
3.配置
可copy一份本机原来对应内核版本的配置文件,并在此基础上进行修改。
cd linux-5.4.146
cp /boot/config-5.4.0-146-generic .config
4.编译
sudo make-kpkg --initrd --revision 001 --append-to-version -20230524 kernel_image kernel_headers --config menuconfig
编译选项解释如下:
--initrd:选项会让make-kpkg自动帮我们生成initramfs。
--revision:会给生成的deb文件加上一个版本信息,这个参数只是影响到文件名,如果不指定,默认会是“10.00.Custom”。
--append-to-version:是一种版本信息,它不仅出现在deb安装包的文件名里,也会影响到kernel的名称,比如本例中,内核更新完成之后,用“uname -r”察看会得到“5.4.146-20230524”。
kernel_image:表示生成内核和默认模块的安装包。
kernel_headers:表示生成一个内核头文件的安装包;如果不生成这个deb包,那么我们就无法在/usr/src目录下生成linux-headers-x.x.x,这样就无法编译自己的内核模块(虽然可以通过apt-get来安装,但是通过这个方式安装的不一定是自己正在使用的内核版本)。
--config=menuconfig:表示以menuconfig的方式编译。
编译完成后,会在linux-5.4.146的上一级目录生成2个文件,一个是image的,一个是headers的,如我生成的2个文件为:linux-image-5.4.146-20230524_001_amd64.deb,linux-headers-5.4.146-20230524_001_amd64.deb
至此,kernel的deb包就生成完成了。