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
arootfs.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.