2014-07-01 11 views
5

Attualmente sto correggendo Ext4 per scopi accademici (solo linux/fs/ext4/*, come file.c, ioctl.c, ext4.h). Sto lavorando sulla macchina virtuale QEMU e per accelerare l'intero processo ho selezionato Ext4 per compilare come modulo del kernel. Il problema si verifica quando si testano nuove modifiche, anche se eseguo make modules ARCH=x86 && make modules_install ARCH=x86 e riavvio il computer (/ è Ext4), non sono visibili a meno che non ricompili l'intero kernel. E 'un po' strano come ho una varietà di segni che l'Ext4 è stato compilato come modulo:Patching e compilazione di Ext4 come modulo del kernel

  1. Si configura come che:

    $ grep EXT4 .config 
    CONFIG_EXT4_FS=m 
    
  2. lo fa compilare come modulo:

    $ 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. Dopo $ make modules_install ARCH=x86 i file in /lib/modules/3.13.3/kernel/fs/ avere una corretta data e ora.

  4. Infine:

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

Per qualche motivo che devo fare $ make all ARCH=x86 al fine di vedere i miei cambiamenti appaiono nel runtime. Cosa mi sono perso? Grazie!

risposta

4

La maggior parte dei processi di avvio utilizza un "ramdisk iniziale" (initrd) che contiene tutti i moduli del kernel che il kernel deve caricare per essere in grado di fare qualsiasi cosa - dopo tutto, per leggere i file da un file system Ext4, il kernel ha bisogno di un driver per questo file system e se il driver è su detto file system, beh ...

Quindi la soluzione è di riunire tutti quei file in un archivio (il ramdisk iniziale) e salvare i blocchi del disco rigido come un elenco di numeri nel boot loader. Può quindi utilizzare un primitivo driver IDE/SATA per caricare direttamente i blocchi, estrarre i driver e caricarli.

Controlla la documentazione della tua distribuzione linux per scoprire come aggiornare initrd. Sul mio Ubuntu Linux, è mkinitramfs.

correlati:

+0

Grazie, naturalmente, che è stata la risposta! Avrei potuto pensarci :) –

Problemi correlati