İnitrd'ye bir modül nasıl yüklenir?


13

Ana sistem başlatma prosedürüne netconsolebenzer şekilde, initrd aşamasında açıkça bir modül (örneğin ) yüklemek istiyorum /etc/modules.

İlk olarak, sistemimdeki initrd'in zaten istenen modülü içerdiğini kontrol ettim (bkz. Ek).

İçine baktım /initrd.img(sıkıştırılmış bir cpio arşivi, bu yüzden hızlıca bakmak için yaptım zcat /initrd.img > initrd.cpiove içine girdim mc). modprobeKomut dosyaları arasında herhangi bir çağrı aradım ve /conf/modules( /burada initrd kökü) listelenen modüllerin ( tarafından çağrılan ) load_modules()işlevi tarafından otomatik olarak yüklendiğini anladım ./scripts/functions/init

Peki Ubuntu sistemindeki /conf/modulesinitrd'nin güncellenmesi için standart araç ne olurdu ?

(BTW, Ubuntu'nun initrd kodunu incelediğimde netconsole, /initkomut dosyasında ihtiyaçlarım için iş yapabileceğim bazı özel destek olduğunu fark ettim , ancak her neyse, sorum diğer genel modüllerle ilgili olarak daha genel .)

apandis

Yukarıda söylediğim gibi: ilk olarak, sistemimdeki initrd'in zaten istenen modülü (yani netconsole) içerdiğini kontrol ettim . Bu nasıl:

# zcat /initrd.img | cpio --extract --verbose --list  | fgrep netconsole
-rw-r--r--   1 root     root        25372 Aug 31 20:59 lib/modules/3.19.0-28-generic/kernel/drivers/net/netconsole.ko
109504 blocks
# 

Ayrıca, gerekli ağ sürücüsünü zaten içerdiğini kontrol ettim:

# ls -ld /sys/class/net/eth0/device/driver
lrwxrwxrwx 1 root root 0 Sep 21 15:34 /sys/class/net/eth0/device/driver -> ../../../../bus/pci/drivers/sky2
# zcat /initrd.img | cpio --extract --verbose --list  | fgrep sky2
-rw-r--r--   1 root     root        92948 Aug 31 20:49 lib/modules/3.19.0-28-generic/kernel/drivers/net/ethernet/marvell/sky2.ko
109504 blocks
# 

3
İleride, lsinitramfsdahil initramfs-toolshemen aynı yapar zcat /initrd.img ..burada gösterilen komutu.
timss

Yanıtlar:


14

Ubuntu 14.04'te initrd'e nasıl modül ekleneceğini keşfettim. Modüllerin adlarını / etc / initramfs-tools / modüllerine ekledim. Bu modülleri initrd dosyasına ekledi. / Etc / initramfs-tools / modüllerinde değişiklik yaptıktan sonra initrd dosyasını (update-initramfs -u) güncellemeyi unutmayın.


Modül adlarını nasıl tanımlarsınız? Şimdi ahci.ko modülünü eklemem gerekiyor mu? Peki bu dosyaya ne dahil edilmelidir?
sandun dhammika

@sandundhammikaahci
Ken Sharp

3

Ubuntu, initrd oluşturma işlemlerini gerçekleştirmek için initramfs-tools (giriş için man initramfs-tools bölümüne bakınız) kullanır.

İnitrd içine bir modül netconsole eklemek ve yüklemeye zorlamak için / etc / initramfs-tools / hooks (yani / etc / initramfs-tools / hooks / netconsole) içinde bir dosya oluşturun:

#! / Bin / sh
Önkoşul = ""
önkoşul ()
{
   echo "$ PREREQ"
}

1 ABD doları
önkoşul)
   önkoşul
   çıkış 0
   ;;
esac

. / Usr / share / initramfs-araçlar / kanca işlevleri

force_load netconsole

ve çalıştırılabilir yapın. O zaman koş:

update-initramfs -u

en yeni çekirdeğin başlangıcını güncellemek için.


1
Ancak, modül adını eklemenin daha basit bir yolu yok /conf/modulesmu? Kullanmak için nereye koymalıyım update-initramfs -u?
imz - Ivan Zakharyaschev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.