gpt4 book ai didi

linux - 将 Ext4 打补丁并编译为内核模块

转载 作者:IT王子 更新时间:2023-10-29 00:32:16 25 4
gpt4 key购买 nike

我目前正在为学术目的修补 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)中,并将硬盘 block 保存为引导加载程序中的数字列表。然后它可以使用原始的 IDE/SATA 驱动程序直接加载 block ,提取驱动程序并加载它们。

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

相关:

关于linux - 将 Ext4 打补丁并编译为内核模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24510849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com