修改Linux内核源码后如何应用变更?是否需重复全编译流程?
不用每次执行完整内核编译流程,优化方法看这里
你修改的/fs/ext4/file.c和/fs/btrfs/file.c属于可加载内核模块(绝大多数情况下,ext4和btrfs默认以模块形式编译,而非内置到内核镜像),因此不需要每次重复完整的编译安装步骤,只需要针对性编译并更新对应的模块即可,具体步骤如下:
1. 确认文件系统的编译模式
先检查你的内核配置中,ext4和btrfs是否为模块形式编译:
grep -E "CONFIG_EXT4_FS|CONFIG_BTRFS_FS" .config
如果输出是CONFIG_EXT4_FS=m和CONFIG_BTRFS_FS=m,说明是模块模式,可以用以下优化方法;如果是=y,则为内置模式,只能全量编译内核。
2. 仅编译修改的文件系统模块
在内核源码根目录下,直接编译对应的文件系统模块,这只会处理你修改的代码及依赖,速度远快于全量编译:
# 编译ext4模块 make -j4 fs/ext4/ # 编译btrfs模块 make -j4 fs/btrfs/
编译完成后,新的模块文件会生成在fs/ext4/ext4.ko和fs/btrfs/btrfs.ko。
3. 替换系统中的旧模块并更新依赖
将新编译的模块替换到系统的模块存放目录:
# 替换ext4模块 sudo cp fs/ext4/ext4.ko /lib/modules/$(uname -r)/kernel/fs/ext4/ # 替换btrfs模块 sudo cp fs/btrfs/btrfs.ko /lib/modules/$(uname -r)/kernel/fs/btrfs/
然后更新模块依赖关系:
sudo depmod -a
4. 加载新模块(或重启)
- 如果修改的文件系统不是根文件系统:可以直接卸载旧模块并加载新模块,无需重启:
# 卸载并重新加载ext4 sudo modprobe -r ext4 sudo modprobe ext4 # 卸载并重新加载btrfs sudo modprobe -r btrfs sudo modprobe btrfs - 如果修改的是根文件系统的模块:由于模块正被系统挂载使用,无法直接卸载,此时只能重启系统来加载新模块。
内容的提问来源于stack exchange,提问作者Winny
相关产品推荐
相关产品推荐

