it-swarm.it

È possibile installare il kernel Linux da solo?

Sono solo curioso di sapere se è possibile installare il kernel Linux da solo o se è necessario utilizzare uno dei sapori. Se fosse possibile, come lo faresti? Non ho bisogno di un tutorial dettagliato. Voglio solo sapere come sarebbe fatto concettualmente. Non sono bravo con cose di basso livello e voglio sapere come ottenere un sistema operativo nel computer. Immagino che abbia qualcosa a che fare con l'MBR.

Oh e ho notato che molte delle risposte suggeriscono una certa distribuzione di un minimo di Linux. Avrei dovuto probabilmente dichiarare che non sto cercando di installare un Linux minimale o bare bones. Questa domanda è puramente teorica. Tuttavia, apprezzo davvero tutte le risposte e le riferirò immediatamente, se mai vorrei installare un Linux veramente personalizzato.

50
cesar

Puoi tecnicamente installare solo un bootloader e il kernel da solo, ma non appena il kernel si avvia, si lamenterà di non essere in grado di avviare "init", quindi siederà lì e non potrai farci nulla.

A proposito, è una parte del bootloader che si trova nel MBR. Il kernel si trova da qualche parte nell'area normale di un disco. Il bootloader è configurato per sapere dove si trova, quindi può caricare il kernel ed eseguirlo.

54
Shawn J. Goff

Non penso che tu capisca esattamente cosa stai chiedendo, ma potresti voler dare un'occhiata al progetto Linux From Scratch .

20
Shadur

Se stai chiedendo se puoi semplicemente installare o aggiornare un kernel "su" un sistema esistente senza installare un mucchio di altri programmi?

Il kernel di Linux è un file binario di solito chiamato vmlinuz-x.x.x-x-name nella directory boot (che di solito è una piccola partizione separata all'inizio del disco rigido) dove le x sono un numero di versione. "name" è solo un nome scelto per il kernel che può essere impostato in fase di compilazione, puoi usarlo per identificare per quale tipo di macchina o architettura è il kernel o per qualsiasi altra ragione.

Viene caricato all'avvio da un bootloader, in genere GRUB che viene richiamato dal codice di avvio nell'MBR che viene richiamato dalla ROM del BIOS. Una volta caricato non viene "tenuto aperto" o protetto in modo speciale. Quindi puoi sostituire quel file con un altro kernel funzionante. Ma GRUB ha una funzione interessante che ti consente di selezionare più kernel da cui avviare. Quindi è abbastanza intelligente aggiungere il tuo kernel aggiuntivo a quell'elenco, ma mantieni l'originale kernel funzionante noto nel caso in cui le cose vadano male.

Credo che quasi tutte le distribuzioni creino un kernel "modulare" in cui i driver di dispositivo si trovano in file separati. Quindi la maggior parte dei kernel ha bisogno di un filesystem contenente i driver disponibili all'avvio e questo è ciò che serve a un "initrd" (iniziale RAM) o "initramfs". GRUB carica il kernel in una posizione in memoria, e initrd in una posizione diversa, e passa al kernel dicendogli dove si trova initrd, avviando Linux.

I driver possono anche essere "integrati" nel kernel e sono quindi caricati e disponibili automaticamente quando il bootloader carica l'immagine vmlinuz. I kernel che dovrebbero funzionare su diversi sistemi (come quelli della maggior parte delle distribuzioni) di solito minimizzano ciò che è incorporato nel kernel perché l'hardware disponibile verrà scansionato più avanti nel processo di avvio e verranno caricati solo i moduli che rappresentano l'hardware attuale.

Esistono strumenti per modificare e creare initrd. Debian ha degli strumenti piacevoli e immagino lo facciano anche altre distribuzioni.

Quindi, se scarichi un kernel più recente da kernel.org e lo compili per creare una nuova immagine binaria del kernel, devi creare o aggiornare un initrd con i driver che funzionano con quel kernel. Il vecchio initrd non funzionerà perché i driver devono corrispondere alla versione del kernel in esecuzione.

Il file initrd si chiama initrd.img-x.x.x.x-name in modo simile al kernel, e può essere sostituito dopo l'avvio proprio come il kernel, e le migliori pratiche indicherebbero che non si cancella un initrd funzionante noto fino a quando non si sa che è possibile avviare correttamente il nuovo kernel + initrd.

Spero che fornisca un certo contesto.

Se stai cercando un'installazione Linux "barebone" con poco o nessun programma aggiuntivo installato, la mia scelta preferita è sempre stata l'installazione dell'immagine Debian netinst. Praticamente hai solo gli strumenti di base necessari per eseguire una console di testo da riga di comando e nano come editor di testo.

13
LawrenceC

Singoli rootfs eseguibili

Il sistema minimo assoluto esegue un singolo /init programma come ho spiegato in Single Application Linux | Super User

Minimal Linux Live

https://github.com/ivandavidov/minimal

Per un sistema interattivo più interessante, questo è un piccolo script (principalmente educativo) che:

  • scarica il sorgente per kernel e busybox
  • li compila
  • genera con loro un ISO di avvio da 8 Mb

L'ISO ti lascia quindi in una Shell minima con busybox.

Con QEMU è possibile avviare facilmente il sistema.

L'ho modificato per consentirne l'esecuzione dalla directory dei sorgenti del kernel: https://github.com/cirosantilli/runlinux

Uso:

git clone https://github.com/ivandavidov/minimal
cd minimal/src
./build_minimal_linux_live.sh
# Wait.
# Install QEMU.
# minimal_linux_live.iso was generated
./qemu64.sh

e sarai lasciato in una finestra QEMU con il tuo nuovo sistema minimo. Eccezionale.

Dato che è piccolo, questa è una buona opzione per leggere la fonte e capire cosa sta succedendo.

Testato su Ubuntu 16.04.

Buildroot

https://buildroot.org/

Grande set di script Makefile che gestiscono:

  • Toolchain di compilazione incrociata GCC
  • compilazione del kernel
  • compilazione del bootloader
  • generazione di rootfs
  • ha tonnellate di pacchetti per scaricare/creare ricette nell'albero dei sorgenti, comprese cose complesse come GTK. C'è un sistema di dipendenza.

Esempio minimo:

git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2016.05
make qemu_x86_defconfig
# Can't use -jN, use `BR2_JLEVEL=2` instead.
BR2_JLEVEL=2 make
# Wait.
# cat board/qemu/x86_64/readme.txt
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -Net User
# You are now in a Shell with BusyBox utilities.

Ha anche ricette per costruire X11 da zero: Come installare X11 sul mio sistema Linux Buildroot?

Roba professionale.

Alpine Linux

https://github.com/gliderlabs/docker-Alpine

Distribuzione integrata con un gestore di pacchetti che offre file binari precompilati da un sito Web.

Vedi anche

È possibile installare un kernel Linux senza i soliti strumenti per lo spazio utente. Questo è comunemente fatto in sistemi embedded come i router. In genere, il kernel viene caricato da ROM o memoria Flash ed è stato personalizzato per il dispositivo in questione (di solito con i driver richiesti compilati nel kernel anziché essere caricati come moduli).

Deve esistere almeno un programma spazio utente, per diventare il processo 'init' (non necessariamente chiamato init, ma avviato dal kernel come processo 1 e genitore automatico di tutti i processi orfani) - a meno che il il kernel è stato modificato (piuttosto che semplicemente personalizzato) per non richiederlo.

Non è certamente necessario avere una Shell disponibile per avere un dispositivo basato su Linux funzionante, sebbene possa rendere lo sviluppo molto più semplice!

3
Toby Speight

Vorrei in secondo luogo suggerimento di Shadur che dovresti sporcarti le mani nel modo Linux From Scratch.
Inoltre, qualcosa di simile, prova Pocket Linux .

La Guida tascabile Linux mostra come costruire un piccolo sistema GNU/Linux basato su console usando solo codice sorgente e un paio di dischetti. È destinato agli utenti Linux che desiderano acquisire una conoscenza più approfondita di come il loro sistema funziona sotto la copertura di funzionalità e strumenti specifici della distribuzione.

3
Philomath

Molte distribuzioni forniscono installazioni "core". Questo è quello che vuoi. Vedi ubuntu-minimal, debian net-install, archlinux (il default è solo core).

Le altre risposte sono utili se vuoi imparare, ma potrebbe non essere il caso = p

2
user606723