È possibile installare il kernel Linux da solo?


45

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.


3
Cosa intendi con "solo" e "sapori"? Linux non è un sistema operativo, è un kernel, a cosa sarebbe utile un kernel senza un sistema operativo? Stai invece cercando di capire la sequenza del boot loader?
Caleb,

3
Se vuoi capire come un kernel / OS entra nel computer, ecco il punto di partenza. Assicurati solo di non porre domande "da principiante" lì, ti morderanno, invece chiedile su SO .
Philomath,

3
Da solo, intendo solo il kernel, meno l'interfaccia utente e inclusi programmi come OpenOffice. Per "sapori" intendo le diverse distribuzioni di Linux, come Ubuntu, Redhat, Debian e Mandriva. Non ho quasi idea di cosa stia parlando. Stavo immaginando che il kernel Linux avesse alcune funzionalità bash di base come DOS. Penso che potrei avere le mie idee su kernel e sistemi operativi aggrovigliati.
Cesare,

4
Sì, li sei davvero aggrovigliati :) Bash è solo un programma utente-terra che viene eseguito come un processo gestito dal kernel. Un kernel da solo non ti dà nient'altro che una piattaforma su cui eseguire altre cose. Il suggerimento di LFS (Linux From Scratch) nella risposta di Shadur è giusto sul bersaglio. Impareresti molto su cosa sono tutti i diversi pezzi e cosa rende una distro una distro e dove finisce il kernel e la terra dell'utente inizia costruendo un sistema scratch.
Caleb,

2
In realtà, kernelneanche il DOS aveva alcuna bashcapacità di base . L'interfaccia utente standard è stata fornita dal programma shell COMMAND.COM. Il più vicino che potresti ottenere a un kernel nudo facendo qualcosa di utile sarebbe l'avvio usando il parametro kernel init=/bin/bash(supponendo che un minimo di Linux sia su disco). Come risposto, se hai solo il bootloader e il kernel, si fermerà molto rapidamente quando non lo trova init.
StarNamer,

Risposte:


51

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.


Come lo inseriresti nell'MBR?
Cesare,

Ogni bootloader viene fornito con uno strumento per installarsi nell'MBR. Ci sono anche strumenti più amichevoli come Boot-Repair ( help.ubuntu.com/community/Boot-Repair ).
Shawn J. Goff,

Bene, potresti creare un initramfs e incorporarlo nell'immagine del kernel, e quindi avresti un sistema completamente funzionante da un solo file di immagine del kernel :-)
Patrick,

@ ShawnJ.Goff Perché il kernel si lamenterebbe di non essere in grado di avviare init, se forniamo initramfs?
Pratik Singhal,

4
@ ps06756 Se si dispone di initramfs, questo non è il kernel "solo" come la domanda posta. Se initramfs ha un init, il kernel non si lamenterà.
Shawn J. Goff,

18

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


LFS sarebbe una buona idea per capire come costruire un sistema minimo. Oppure puoi guardare MINIX (e leggere il libro ). Oppure, per un'introduzione diversa (meno lavoro, ma meno informativo), guarda i pacchetti taggati “essenziale” ( aptitude search '?essential') su Debian o Ubuntu e capisci cosa ciascuno fa (c'è un po 'più del minimo indispensabile ).
Gilles 'SO- smetti di essere malvagio' il

12

Se ti 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 solitamente chiamato vmlinuz-x.x.x-x-namenella bootdirectory (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, GRUBche in genere viene invocato 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 GRUBha una bella funzionalità 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 al momento dell'avvio ed è a questo che serve un "initrd" (disco RAM iniziale) o "initramfs". GRUBcaricherà il kernel in una posizione nella memoria e initrd in una posizione diversa, e salterà 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' vmlinuzimmagine. 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 carini 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 è chiamato in initrd.img-x.x.x.x-namemodo 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 con essa, la mia scelta preferita è sempre stata l'installazione netinstdell'immagine Debian . Praticamente hai solo gli strumenti di base necessari per eseguire una console di testo da riga di comando e nanocome editor di testo.


5

Rootfs eseguibili singoli

Il sistema minimo assoluto esegue un singolo /initprogramma, come ho spiegato in Single Application Linux | Super utente

Minimo 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 un ISO da 8 Mb avviabile con loro

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 verrai lasciato in una finestra QEMU con il tuo nuovo sistema minimale. 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.

Guarda anche


3

Vorrei secondare il 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 ottenere una comprensione più approfondita di come il loro sistema funziona sotto la copertura di funzionalità e strumenti specifici della distribuzione.


2
Sebbene si noti che nessuno nella loro mente corretta raccomanda / o / LFS o PocketLinux per qualsiasi tipo di importante attività di produzione - sono buoni per imparare come funzionano le cose, ma c'è un motivo per cui la maggior parte delle distribuzioni viene fornita con un set completo di strumenti e frontend per la maggior parte delle cose.
Shadur,

3

È 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 dalla memoria ROM o 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 kernel non sia stato modificato (piuttosto che semplicemente personalizzato) per non richiederlo.

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


2

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.