GNU/Linux >> Znalost Linux >  >> Linux

Je možné zavést linuxové jádro bez vytvoření obrazu initrd?

initrd/initramfs je volitelný a není podmínkou. bzImage je čistý obraz jádra a lze jej zavést přímo bootloaderem. Může však být nutné provést některé úlohy (načtení modulů souborového systému, ovladačů pro přístup na disk, připojení kořenového systému souborů z nějakého vyměnitelného média bez pevného názvu/cesty atd.), které by obvykle vyžadovaly přístup k souborovému systému a nástrojům uživatelského prostoru.

To je to, co initramfs je pro:Je to archiv CPIO, který se připojí k obrazu jádra (obraz jádra je kontejner pro initramfs a ne jinak) buď v samotném obrazu jádra, nebo bootloaderem při bootu.

Tento archiv CPIO obsahuje počáteční rootfs s moduly potřebnými k nastavení všech zařízení pro přístup ke správnému kořenovému souborovému systému a některé programy pro identifikaci těchto zařízení, načtení modulů, provedení některých dalších úloh spouštění, opětovné připojení správného kořenového souborového systému do / a spuštění /sbin /init

initrd je podobný, s hlavním rozdílem, že se jedná o obraz souborového systému, který může být a obvykle je komprimován. Jádro musí mít vestavěnou podporu pro použitý souborový systém a připojí tento obraz jako počáteční /.

Vzhledem k tomu, že CPIO je o několik řádů jednodušší, je initramfs preferován před initrd, protože to šetří požadavky na jakékoli vestavěné moduly souborového systému a také usnadňuje vytváření initramfs. Místo toho, abyste museli vytvořit ext2 image, připojit zařízení do smyčky a naplnit jej, scvrkává se na jednoduché vytvoření archivu, ne nepodobné použití tar.

Pokud však zkompilujete své jádro se všemi požadovanými ovladači a moduly zabudovanými do obrazu jádra a vaše zařízení s kořenovým souborovým systémem má v systému pevný název, nepotřebujete initramfs, protože jádro pak může dělat věci samo.


Příklad minimálního QEMU + Buildroot

Zde je minimální konkrétní příklad, který ukazuje, že initrd není povinný:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/0b4f156b1b536a89c90882ed8ce551abcd3780af#initrd

S tímto nastavením můžeme snadno spustit dva funkční příkazy QEMU typu:

qemu-system-x86_64 -drive file=rootfs.ext2

a:

qemu-system-x86_64 -initrd rootfs.cpio

Kde:

  • rootfs.ext2 a rootfs.cpio jsou v podstatě stejný kořenový souborový systém, ale v různých formátech
  • první příkaz má pevný disk a nemá -initrd
  • druhý příkaz -initrd ale žádný pevný disk

V obou případech se Linux nabootuje dobře, kromě toho v -initrd systém, zápisy souborů nejsou trvalé, protože vše je v paměti.


Linux
  1. Moduly linuxového jádra, bez kterých nemůžeme žít

  2. Linuxové jádro:5 nejlepších inovací

  3. Životní cyklus testování linuxového jádra

  1. Linux – Je možné vzdáleně připojit obraz, který se může spustit a nainstalovat?

  2. Linux – podílíte se na e-mailové konferenci jádra?

  3. Je možné vyvinout modul linuxového jádra v CLion?

  1. Těšíme se na konfiguraci sítě Linux v počátečním ramdisku (initrd)

  2. Jak nainstalujete Linux vedle Windows 8, aniž byste poškodili spouštěcí konfiguraci Windows 8?

  3. Jak zobrazit parametry příkazového řádku linuxového jádra dané pro aktuální boot?