内核编译打包

2023年 10月 15日 77.9k 0

前言

最近在技术支持的时候,需要在客户机器上编译驱动代码,遇到了一个问题,客户机器上面没有相应的内核头文件编译环境,没办法编译。

后面由同事通过安装deb包的形式把头文件之类的安装后,就可以正常编译了。

在我之前的理解中,要替换内核的话,只能在目标机器上编译内核,然后按照之前编译内核的文章讲的步骤替换内核。

现在发现,内核也是可以通过软件包的方式安装的,自己动手走一下打包流程。

打包

关于内核打包的方法在网络上找到了一些文章,本人也实践了一下,确实可行,主要流程如下:

# 下载内核源码, 并编译, 提前编译可以加快后面打包速度
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.xz

tar xvf linux-5.10.tar.xz

cd linux-5.10

# 方便起见,直接使用当前的配置

cp /boot/config-5.15.56 .config

make menuconfig

make -j 8

# 准备打包环境
sudo apt install build-essential
sudo apt install kernel-package
sudo apt install dwarves


sudo make-kpkg --initrd --revision 001 --append-to-version -20230823 kernel_image kernel_headers --config menuconfig

# make-kpkg 用于为内核源码打包debian包, 这个命令需要在内核源码根目录下运行,打包结束后会在上层目录生成目标文件。
# --initrd:选项会让make-kpkg自动帮我们生成initramfs。
# --revision:会给生成的deb文件加上一个版本信息,这个参数只是影响到文件名,如果不指定,默认会是“10.00.Custom”。
# --append-to-version:是一种版本信息,它不仅出现在deb安装包的文件名里,也会影响到kernel的名称,比如本例中,内核更新完成之后,用“uname -r”查看会得到 5.10.0-20230823
# kernel_image:表示生成内核和默认模块的安装包。
# kernel_headers:表示生成一个内核头文件的安装包;如果不生成这个deb包,那么我们就无法在/usr/src目录下生成linux-headers-x.x.x,这样就无法编译自己的内# 核模块(虽然可以通过apt-get来安装,但是通过这个方式安装的不一定是自己正在使用的内核版本)。
# --config=menuconfig:表示以menuconfig的方式编译。

# 编译完成后,会在linux-5.10的上一级目录生成2个文件,一个是image的,一个是headers的

linux-headers-5.10.0-20230823_001_arm64.deb
linux-image-5.10.0-20230823_001_arm64.deb


dpkg -i linux-headers-5.10.0-20230823_001_arm64.deb linux-image-5.10.0-20230823_001_arm64.deb

行动,才不会被动!

欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。

博客地址: fishmwei.github.io

掘金主页: juejin.cn/user/208432…

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论