如何在Ubuntu Jammy HWE内核中重新编译单个模块?附我完成的6.8.0-45版本内核编译步骤
如何在Ubuntu Jammy HWE内核中重新编译单个模块?附我完成的6.8.0-45版本内核编译步骤
嗨,我刚搞定了Ubuntu Jammy HWE 6.8.0-45版本内核的全量重新编译,顺便也梳理了单个模块的编译方法——先给你看我完整的全量编译流程,再讲怎么简化到单个模块:
我完成的6.8.0-45版本内核全量编译步骤
1. 克隆Ubuntu官方内核仓库并切换到对应版本
git clone git://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/jammy cd jammy git checkout Ubuntu-hwe-6.8-6.8.0-45.45_22.04.1
2. 安装编译依赖
先装官方内核编译依赖,再补全额外工具:
sudo apt build-dep linux linux-image-unsigned-`uname -r` sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev fakeroot libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf llvm dwarves
3. 彻底清理源码目录
确保源码目录是干净的初始状态,避免旧配置干扰:
fakeroot debian/rules clean && make ARCH=x86 mrproper && git clean -fd && git restore . && git clean -fd && git restore .
4. 做自定义修改
这里是我自己的定制操作,你可以根据需求调整:
# 追加自定义版本号到变更日志 code debian.hwe-6.8/changelog # 修改内核的系统名称标识 code include/linux/uts.h
5. 修复权限并生成内核安装包
chmod a+x debian/rules && chmod a+x debian/scripts/* && chmod a+x debian/scripts/misc/* fakeroot debian/rules clean # 生成内核相关的deb安装包 fakeroot debian/rules binary-headers binary-generic binary-lowlatency
只编译单个内核模块的简化方法
如果你不需要编译整个内核,只想单独更新某个模块(比如文件系统、驱动模块),可以跳过全量编译的大部分步骤,直接这么做:
- 先按照上面的步骤1-2,完成源码克隆、版本切换和依赖安装,确保源码目录干净
- 加载当前系统的内核配置,避免重新配置整个内核:
cp /boot/config-$(uname -r) .config make oldconfig - 确认目标模块的编译模式是模块模式(
m):
运行make menuconfig,找到你要编译的模块(比如File systems > The Extended 4 (ext4) filesystem),确保它被设置为m(如果是y就是编译进内核,无法单独替换),设置好后保存退出 - 编译单个模块,比如以
ext4为例:# 方法1:指定子目录编译 make modules SUBDIRS=fs/ext4 # 方法2:直接指定目标ko文件 make fs/ext4/ext4.ko - 替换系统中的旧模块并生效:
# 复制新模块到系统模块目录 sudo cp fs/ext4/ext4.ko /lib/modules/$(uname -r)/kernel/fs/ext4/ # 更新模块依赖 sudo depmod -a # 重新加载模块 sudo modprobe -r ext4 && sudo modprobe ext4
备注:内容来源于stack exchange,提问作者Nicholas Redi
相关产品推荐
相关产品推荐

