繁体   English   中英

修补和编译Ext4作为内核模块

[英]Patching and compiling Ext4 as a kernel module

我目前正在出于学术目的对Ext4进行补丁(仅linux / fs / ext4 / *,例如file.c,ioctl.c,ext4.h)。 我正在QEMU虚拟机上工作,为了加快整个过程,我选择了Ext4作为内核模块进行编译。 当测试新更改时会出现问题,因为即使我运行make modules ARCH=x86 && make modules_install ARCH=x86并重新引导计算机(/是Ext4),它们也将不可见,除非我重新编译整个内核。 有点怪异,因为我有各种各样的迹象表明Ext4已被编译为模块:

  1. 它被配置为:

     $ grep EXT4 .config CONFIG_EXT4_FS=m 
  2. 它确实作为一个模块进行编译:

     $ make modules ARCH=x86 (...) CC [M] fs/ext4/ioctl.o LD [M] fs/ext4/ext4.o Building modules, stage 2. MODPOST 3 modules LD [M] fs/ext4/ext4.ko 
  3. $ make modules_install ARCH=x86 ,/lib/modules/3.13.3/kernel/fs/中的文件具有正确的时间戳。

  4. 最后:

     $ lsmod Module Size Used by ext4 340817 1 (...) 

由于某种原因,我必须执行$ make all ARCH=x86才能看到我的更改出现在运行时中。 我错过了什么? 谢谢!

大多数引导过程使用“初始ramdisk”( initrd ),其中包含内核需要加载才能执行任何操作的所有内核模块-毕竟,要从Ext4文件系统读取文件,内核需要用于该文件的驱动程序系统,如果驱动程序在所述文件系统上,那么...

因此,解决方案是将所有这些文件打包到一个归档文件(初始ramdisk)中,并将硬盘块另存为引导加载程序中的数字列表。 然后,它可以使用原始的IDE / SATA驱动程序直接加载模块,提取驱动程序并加载它们。

查看Linux发行版的文档以了解如何更新initrd。 在我的Ubuntu Linux上,它是mkinitramfs

有关:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM