Vuoi migliorare questa domanda? Aggiorna la domanda in modo che si concentri su un solo problema modificando questo post.
Chiuso 4 anni fa.
Migliora questa domanda
Sono interessato a Linux e lo sto scavando da un po '. Ho appena imparato a compilare un kernel Linux dal sorgente e ad avviarlo con Grub che ti porta con la shell del kernel.
Ora non appena il kernel viene caricato in memoria, cerca init
per caricarlo. Il mio programma è quello di aprire una shell (che un utente normale può usare, come bash
).
Allora, come posso portarlo?
Devo configurare init per caricare la shell bash o c'è qualcosa che potrei fare?
Sto costruendo la mia distribuzione e ho solo bisogno che la distribuzione abbia una shell (bash) e nient'altro.
Risposta accettata:
Hmm. Questo non dovrebbe essere complicato da raggiungere, ma è anche molto complesso 🙂
Puoi semplicemente fare ciò che ha suggerito Alexander (init=/bin/bash
), e andrà tutto bene.
Il processo init è ciò che il kernel chiama e dà il via a tutti della tua userland. Terminale di accesso incluso. Se il tuo init genera solo quel terminale bash, stai bene. Ma se quel terminale si arresta in modo anomalo o esce, init dovrebbe ripulire. Se alcuni dei processi avviati dal terminale muoiono, è necessario ripulire. Se muoiono, allora loro i bambini hanno bisogno di un nuovo processo genitoriale, sarà il tuo init.
Consiglio vivamente di dedicare 10 minuti alla lettura di questo, è una panoramica molto amichevole di cosa init
fa:
http://tilde.town/~elly/userland.txt
Quindi ti avvicinerai per capire cosa significa eseguire il tuo init.
Una parte rilevante di quel link dice:
C'è solo una cosa che
dobbiamo fare:fornire un binario iniziale da avviare in uno qualsiasi di questi percorsi:/sbin/init, /etc/init, /bin/init o /bin/sh. Questo processo (init) viene eseguito come pid 1.
Il processo init deve fare due cose:
-
Non uscire mai (se init esce, il kernel va in panico)
-
Raccogli i processi di zombi
Il resto del testo implementa quindi un semplice init.