2014-07-01 6 views
5

Ich bin derzeit patchen Ext4 für akademische Zwecke (nur Linux/fs/ext4/*, wie file.c, ioctl.c, ext4.h). Ich arbeite an der virtuellen QEMU-Maschine und um den gesamten Prozess zu beschleunigen, habe ich Ext4 als Kernel-Modul kompiliert. Das Problem tritt auf, wenn es darum geht, neue Änderungen zu testen, auch wenn ich make modules ARCH=x86 && make modules_install ARCH=x86 ausführen und die Maschine neu starten (/ ist Ext4), sind sie nicht sichtbar, wenn ich den gesamten Kernel neu kompiliere. Es ist ein bisschen seltsam, wie ich eine Vielzahl von Zeichen haben, dass das Ext4 hat als Modul kompiliert worden:Patchen und Kompilieren von Ext4 als Kernelmodul

  1. es so, dass konfiguriert ist:

    $ grep EXT4 .config 
    CONFIG_EXT4_FS=m 
    
  2. es als Modul nicht kompiliert:

    $ 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. Nach $ make modules_install ARCH=x86 die Dateien in /lib/modules/3.13.3/kernel/fs/ haben richtige Zeitstempel.

  4. Endlich:

    $ lsmod 
    Module     Size Used by 
    ext4     340817 1 
    (...) 
    

Aus irgendeinem Grund habe ich $ make all ARCH=x86 zu tun, um meine Änderungen zu sehen erscheinen in der Laufzeit. Was habe ich verpasst? Vielen Dank!

Antwort

4

Die meisten Boot-Prozesse verwenden eine "initial ramdisk" (initrd), die alle Kernel-Module enthält, die der Kernel laden muss, um irgendetwas tun zu können - schließlich benötigt der Kernel zum Lesen von Dateien aus einem Ext4-Dateisystem einen Treiber für dieses Dateisystem und wenn der Treiber auf dem Dateisystem ist, nun, ...

Also die Lösung ist, alle diese Dateien in ein Archiv (die ursprüngliche Ramdisk) zu packen und speichern Sie die Festplattenblöcke als Liste von Zahlen im Bootloader. Es kann dann einen primitiven IDE/SATA-Treiber verwenden, um die Blöcke direkt zu laden, die Treiber zu extrahieren und sie zu laden.

Überprüfen Sie die Dokumentation Ihrer Linux Distribution, um herauszufinden, wie initrd aktualisiert werden kann. Auf meinem Ubuntu Linux ist es mkinitramfs.

Verwandte:

+0

Danke, das war natürlich die Antwort! Ich hätte daran denken können :) –

Verwandte Themen