Chcete zlepšit tuto otázku? Aktualizujte otázku tak, aby se zaměřila pouze na jeden problém úpravou tohoto příspěvku.
Zavřeno před 4 lety.
Vylepšete tuto otázku
Zajímám se o Linux a nějakou dobu se v něm zabývám. Právě jsem se naučil zkompilovat linuxové jádro ze zdrojového kódu a nabootovat ho pomocí Grub, což vám dá shell jádra.
Nyní, jakmile je jádro nahráno do paměti, hledá init
načíst to. Mým úkolem je vyvolat shell (který může použít běžný uživatel – například bash
).
Jak to tedy mohu přinést?
Musím nakonfigurovat init pro načtení bash shellu, nebo můžu něco udělat?
Stavím si vlastní distro a potřebuji jen, aby distro mělo shell (bash) a nic jiného.
Přijatá odpověď:
Hmm Toho by nemělo být složité dosáhnout, ale je to také velmi složité 🙂
Můžete jednoduše udělat to, co navrhl Alexander (init=/bin/bash
), a půjde vám to dobře.
Proces init je to, co jádro volá, a spustí vše vaší uživatelské země. Včetně přihlašovacího terminálu. Pokud váš init pouze spustí tento bash terminál, jste v pořádku. Ale pokud se tento terminál zhroutí nebo odejde, init se má vyčistit. Pokud některé procesy spouštěné z terminálu zemřou, musíte je vyčistit. Pokud zemřou, pak jejich děti potřebují nový rodičovský proces, bude to vaše init.
Vřele doporučuji věnovat tomuto přečtení 10 minut, je to velmi přátelský přehled toho, co init
dělá:
http://tilde.town/~elly/userland.txt
Pak se přiblížíte k pochopení toho, co obnáší spuštění vlastního init.
Relevantní část tohoto odkazu říká:
Je jen jedna věc, kterou
musíme udělat:poskytnout počáteční binární soubor ke spuštění na kterékoli z těchto cest:/sbin/init, /etc/init, /bin/init nebo /bin/sh. Tento proces (init) je spuštěn jako pid 1.Proces init musí udělat dvě věci:
Nikdy neukončujte (pokud init skončí, jádro zpanikaří)
Reap zombie procesy
Zbytek textu pak implementuje jednoduchý init.