修补和编译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. $ make modules_install ARCH=x86后/lib/modules/3.13.3/kernel/fs/文件有了正确的时间戳

  4. 最后
  5. :

    $ 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)概述

相关内容

  • 没有找到相关文章

最新更新