Linux 将Ext4作为内核模块进行修补和编译
我目前正在为学术目的修补Ext4(仅限于linux/fs/Ext4/*,如file.c、ioctl.c、Ext4.h)。我正在开发QEMU虚拟机,为了加快整个过程,我选择了Ext4作为内核模块进行编译。在测试新更改时会出现问题,因为即使我运行Linux 将Ext4作为内核模块进行修补和编译,linux,linux-kernel,kernel-module,qemu,ext4,Linux,Linux Kernel,Kernel Module,Qemu,Ext4,我目前正在为学术目的修补Ext4(仅限于linux/fs/Ext4/*,如file.c、ioctl.c、Ext4.h)。我正在开发QEMU虚拟机,为了加快整个过程,我选择了Ext4作为内核模块进行编译。在测试新更改时会出现问题,因为即使我运行makemodulesarch=x86&&makemodules\u install ARCH=x86并重新启动机器(/is Ext4),除非重新编译整个内核,否则这些更改都不可见。这有点奇怪,因为我有各种迹象表明Ext4已经编译为一个模块: $ make
makemodulesarch=x86&&makemodules\u install ARCH=x86
并重新启动机器(/is Ext4),除非重新编译整个内核,否则这些更改都不可见。这有点奇怪,因为我有各种迹象表明Ext4已经编译为一个模块:
$ 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
$ grep EXT4 .config
CONFIG_EXT4_FS=m
$ 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
$make modules\u install ARCH=x86
之后,/lib/modules/3.13.3/kernel/fs/中的文件具有正确的时间戳$ lsmod
Module Size Used by
ext4 340817 1
(...)
出于某种原因,我必须执行
$makeall ARCH=x86
,以便在运行时看到我的更改。我错过了什么?谢谢 大多数引导过程使用“初始ramdisk”(initrd
),其中包含内核需要加载的所有内核模块,以便能够执行任何操作-毕竟,要从Ext4文件系统读取文件,内核需要该文件系统的驱动程序,如果驱动程序位于所述文件系统上,那么
因此,解决方案是将所有这些文件打包到一个归档文件(初始ramdisk)中,并将硬盘块保存为引导加载程序中的数字列表。然后,它可以使用基本的IDE/SATA驱动程序直接加载块,提取驱动程序并加载它们
查看linux发行版的文档,了解如何更新initrd。在我的Ubuntu Linux上,它是mkinitramfs
相关的: