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

时间:2014-07-01 12:54:43

标签: linux linux-kernel kernel-module qemu ext4

我目前正在为学术目的修补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. {/ 1}} /lib/modules/3.13.3/kernel/fs/中的文件后有适当的时间戳。

  4. 最后:

    $ make modules_install ARCH=x86
  5. 出于某种原因,我必须$ lsmod Module Size Used by ext4 340817 1 (...) 才能看到我的更改出现在运行时中。我错过了什么?谢谢!

1 个答案:

答案 0 :(得分:4)

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

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

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

相关: