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

我目前正在修补Ext4作为学术用途(只有linux / fs / ext4 / *,比如file.c,ioctl.c,ext4.h)。 我正在开发QEMU虚拟机,并加速我selectExt4作为内核模块进行编译的整个过程。 问题出现在testing新的更改时,因为即使运行make modules ARCH=x86 && make modules_install ARCH=x86并重新引导计算机(/是Ext4),除非重新编译整个内核,否则它们是不可见的。 这有点奇怪,因为我有各种各样的标志,Ext4已被编译为一个模块:

  1. 它被configuration为:

     $ 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

有关:

  • Linux初始化RAM磁盘(initrd)概述