Come può un kernel Linux essere così piccolo?


56

Un normale kernel 3 * stabile ora è di circa 70 MB. Ma ci sono piccole distribuzioni Linux di 30-10 mb con software e altre cose che finiscono immediatamente.

Come può il kernel Linux essere così piccolo in queste distro? È possibile ridurre drasticamente le dimensioni solo dei moduli e dei driver non necessari? Cos'altro viene fatto per ridurre le dimensioni del kernel?


3
Un'altra opzione è utilizzare le ottimizzazioni delle dimensioni durante la compilazione, ma non sono sicuro di quanto possa avere un grande impatto.
AndrejaKo

5
"Linus chiama Linux 'gonfio ed enorme'" theregister.co.uk/2009/09/22/linus_torvalds_linux_bloated_huge
Aki

1
@AndrejaKo - Molto. (Se scegli una taglia piccola.)
Apache il

19
70 MB è la dimensione della fonte. Un kernel standard compilato e compresso è di circa 2 MB, moduli come 10 MB.
ott--

1
sì, in effetti, i suoi 3,6 mb mentre initramfs è 21 MB nella mia distribuzione.
smoking perplesso il

Risposte:


37

Sì. Se li rimuovi (compila / crea moduli solo le cose di cui hai bisogno), comprimi il kernel (ottimizza per dimensioni) ... risulterà in un kernel così piccolo. Puoi crearne uno ancora più piccolo, per un sistema mirato. Come se conoscessi il mio PC, conosco le mie cose. Quindi compilerò solo ciò di cui ho bisogno. Come i miei driver SATA, driver per USB, ecc. Nient'altro. Nessuna webcam, nessuna vecchia unità IDE, niente.

Inoltre: I più grandi che incontri sono il kernel INTERO (che non è mai necessario usare). Anche quelli desktop contengono (la maggior parte delle volte, come moduli) MOLTE cose inutili. Ma i neofiti si aspettano che ogni tipo di hardware che plug-in funzionerà.

(Nota che i moduli non verranno caricati finché non saranno necessari. Ci sono 3 stati:
[ ]- Non verrà compilato, non farà parte del tuo kernel.
[M]- Sarà compilato come modulo.
(Puoi modprobe o il tuo sistema lo caricherà automaticamente quando è necessario.
Dipende dal sistema, dalla zona dell'utente.)
[X]- Sarà compilato nel kernel E sarà presente - sempre.

Distro con kernel piccolo:


Solo una piccola aggiunta - [X] significa che verrà compilato nel kernel, quindi il motivo per cui è sempre caricato.
Lawrence,

"I neofiti si aspettano" parlando come un informatico professionista e veterano di Linux di 20 anni ... Mi aspetto che anche le cose funzionino.
Cliff Armstrong,

20

Le prime distribuzioni Linux come Tom's Root-Boot , MuLinux , Diet-router , (ormai defunto) LOAF e molti altri ora partirono, montarono un sistema Linux funzionante su uno o due dischetti da 1,44 MB.

Il kernel di Linux è cresciuto ma non dimenticare che è modulare, i moduli del kernel sono caricati secondo necessità. Quindi è ancora possibile produrre una distribuzione Linux con un ingombro molto ridotto.

Vedi: Guida all'ottimizzazione delle dimensioni del kernel - eLinux.org

Se leggi Linux_tiny.pdf vedrai questo

  • kernel storico 0.99pl15: Slackware 1.1.2, 1994 301K
  • Fedora Core 2 1.2M
  • SuSE 9.1 1.5M
  • 2.6.5-tiny1 test config: IDE, ext2, TCP, NIC 363K

11

La configurazione del kernel predefinita è configurata per supportare quanti più hardware possibile. Un kernel senza stripping con configurazione predefinita ha comportato una dimensione di 1897996 kB (inclusi kernel + moduli). Quando si eliminano molti driver e opzioni non necessari (perché dovrei avere bisogno di un modulo HP se possiedo un notebook Clevo), si ottenne una dimensione di 892892 kB che è una riduzione della dimensione del 53% rispetto al kernel di serie.

Quando si installano i moduli del kernel, aggiungere l' INSTALL_MOD_STRIP=1opzione. Ciò eliminerà tutti i simboli di debug e ridurrà le dimensioni del 92% per me (da 892892 kB a 69356 kB). Nota che ciò influirà solo sui moduli da installare e non sul kernel (vmlinuz) stesso:

make INSTALL_MOD_STRIP=1 modules_install

Dalla documentazione / kbuild / kbuild.txt :

INSTALL_MOD_STRIP
--------------------------------------------------
INSTALL_MOD_STRIP, if defined, will cause modules to be
stripped after they are installed.  If INSTALL_MOD_STRIP is '1', then
the default option --strip-debug will be used.  Otherwise,
INSTALL_MOD_STRIP value will be used as the options to the strip command.

3
wow, 1897996 kB sono quasi 2 GB!
netvope,

3

La maggior parte delle distribuzioni principali configura i propri kernel con il massimo supporto hardware in modo che funzioni immediatamente con la maggior parte dei computer e qualsiasi cosa tu colleghi in seguito. Usano anche un sistema initrd che non è necessario nella maggior parte dei casi. Ci sono anche opzioni nella configurazione del kernel che rendono il processo di compilazione ottimizzato per dimensioni, e può essere selezionato anche un metodo di compressione migliore (anche se più lento). Infine, se stai osservando la dimensione del codice sorgente del kernel, tieni presente che include anche il supporto per diverse architetture oltre x86 / amd64, protocolli di rete, file system e altre funzionalità che probabilmente non utilizzerai mai e che possono essere disabilitato.


1

È abbastanza semplice, un sistema minimale necessita solo di bootloader + kernel sebbene sia quasi inutile. La maggior parte dei comandi usati tutti i giorni, sono binari opzionali per il sistema, come sh, ls, ecc. Se sei interessato agli interni, Linux From Scratch! è un buon punto di partenza.


Si noti che Busybox si occupa della maggior parte delle cose "quotidiane".
nuovo123456,

No, busybox li ha appena combinati insieme. È popolare nel sistema piccolo e incorporato, ma non nel caso del sistema desktop.
Pinxue,
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.