Jak jądro Linuksa może być tak małe?

56

Zwykłe stabilne jądro 3 * ma teraz około 70 MB. Ale istnieje niewiele dystrybucji Linuksa o wielkości 30-10 mb z oprogramowaniem i innymi rzeczami uruchamianymi po wyjęciu z pudełka.

Jak jądro Linuksa może być tak małe w tych dystrybucjach? Czy usunięcie tylko niepotrzebnych modułów i sterowników może znacznie zmniejszyć rozmiar? Co jeszcze zrobiono, aby zmniejszyć rozmiar jądra?

zdziwiony smoking
źródło
3
Inną opcją jest użycie optymalizacji rozmiaru podczas kompilacji, ale nie jestem pewien, jak duży wpływ może to wywrzeć.
AndrejaKo
5
„Linus nazywa Linuksa„ nadęty i ogromny ”” theregister.co.uk/2009/09/22/linus_torvalds_linux_bloated_huge
Aki
1
@AndrejaKo - Dużo. (Jeśli wybierzesz mały rozmiar.)
Apache
19
70 MB to rozmiar źródła. Standardowe skompilowane i skompresowane jądro ma około 2 MB, moduły takie jak 10 MB.
ott--
1
tak, w rzeczywistości jego 3,6 MB, podczas gdy initramfs ma 21 MB w mojej dystrybucji.
zdziwiony smoking

Odpowiedzi:

37

Tak. Jeśli je rozebrzesz (skompiluj / zrób moduły tylko to, czego potrzebujesz), skompresuj jądro (zoptymalizuj pod kątem rozmiaru) ... spowoduje to tak małe jądro. Możesz zrobić jeszcze mniejsze, dla systemu docelowego. Tak jak znam swój komputer, znam swoje rzeczy. Więc po prostu skompiluję to, czego potrzebuję. Podobnie jak moje własne sterowniki SATA, sterownik USB itp. Nic więcej. Bez kamery internetowej, bez starych napędów IDE, nic.

Ponadto: większe, z którymi się spotykasz, to CAŁE jądro (którego nigdy nie trzeba używać). Nawet te stacjonarne zawierają (przeważnie jako moduły) Mnóstwo niepotrzebnych rzeczy. Ale początkujący oczekują, że każdy sprzęt, który podłączą, będzie po prostu działał.

(Pamiętaj, że moduły nie zostaną załadowane, dopóki nie będą potrzebne. Istnieją 3 stany:
[ ]- Nie zostanie skompilowany, nie będzie częścią twojego jądra.
[M]- Zostanie skompilowany jako moduł.
(Możesz go sondować , lub twój system automatycznie załaduje go, gdy będzie potrzebny.
Zależy od systemu, przestrzeni użytkownika.)
[X]- Zostanie skompilowany do jądra ORAZ będzie obecny - zawsze.

Distros z małym jądrem:

Apacz
źródło
Tylko mały dodatek - [X] oznacza, że ​​zostanie on wkompilowany w jądro, stąd powód, dla którego zawsze jest ładowany.
Lawrence
„nowicjusze oczekują” przemawiając jako profesjonalny informatyk i weteran Linuksa od 20 lat… Spodziewam się, że rzeczy też będą działać.
Cliff Armstrong
20

Wczesne dystrybucje Linuksa, takie jak Root-Boot Toma , MuLinux , Diet-router , (obecnie nieistniejący) LOAF i wiele innych, które odeszły, wszystkie pasowały do ​​działającego systemu Linux na jednej lub dwóch dyskietkach 1,44 MB.

Jądro Linux urosło, ale nie zapominaj, że jest modułowe, moduły jądra są ładowane w razie potrzeby. Dlatego nadal jest możliwe stworzenie dystrybucji Linuksa o bardzo małej powierzchni.

Patrz: Przewodnik dostrajania rozmiaru jądra - eLinux.org

Jeśli czytasz Linux_tiny.pdf , zobaczysz to

  • historyczne jądro 0.99pl15: Slackware 1.1.2, 1994 301K
  • Fedora Core 2 1.2M
  • SuSE 9.1 1,5 mln
  • Konfiguracja testowa 2.6.5-tiny1: IDE, ext2, TCP, NIC 363K
RedGrittyBrick
źródło
11

Domyślna konfiguracja jądra jest skonfigurowana do obsługi jak największej liczby urządzeń. Nieodebrane jądro z domyślną konfiguracją spowodowało rozmiar 1897996 kB (w tym jądro + moduły). Usunięcie wielu niepotrzebnych sterowników i opcji (dlaczego miałbym potrzebować modułu HP, jeśli posiadam notebook Clevo), spowodowało to rozmiar 892892 kB, co oznacza zmniejszenie rozmiaru o 53% w porównaniu do standardowego jądra.

Podczas instalowania modułów jądra dołącz INSTALL_MOD_STRIP=1opcję. Spowoduje to usunięcie wszystkich symboli debugowania i zmniejszy rozmiar dla mnie o 92% (z 892892 kB do 69356 kB). Uwaga: wpłynie to tylko na moduły do ​​zainstalowania, a nie na samo jądro (vmlinuz):

make INSTALL_MOD_STRIP=1 modules_install

Z dokumentacji / 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.
Lekensteyn
źródło
3
wow, 1897996 kB to prawie 2 GB!
netvope
3

Większość głównych dystrybucji konfiguruje swoje jądra z maksymalną obsługą sprzętu, dzięki czemu będzie działało od razu z większością komputerów i wszystkim, co podłączysz później. Używają również systemu initrd, który w większości przypadków nie jest potrzebny. Istnieją również opcje konfiguracji jądra, które sprawiają, że proces kompilacji jest optymalizowany pod kątem rozmiaru, a także można wybrać lepszą (choć wolniejszą) metodę kompresji. Na koniec, jeśli patrzysz na rozmiar kodu źródłowego jądra, pamiętaj, że zawiera on także obsługę kilku architektur poza x86 / amd64, protokołów sieciowych, systemów plików i innych funkcji, których prawdopodobnie nigdy nie użyjesz i które mogą być wyłączonym.

Jonathan Amend
źródło
1

Jest to dość proste, minimalny system potrzebuje tylko bootloadera + jądra, chociaż jest prawie bezużyteczny. Większość poleceń używanych codziennie to opcjonalne pliki binarne dla systemu, takie jak sh, ls itp. Jeśli jesteś zainteresowany wewnętrznymi elementami , Linux From Scratch! jest dobrym punktem wyjścia.

pinxue
źródło
Pamiętaj, że Busybox zajmuje się większością „codziennych” rzeczy.
new123456,
Nie, busybox po prostu je połączył. Jest popularny w małym i wbudowanym systemie, ale nie w przypadku systemu stacjonarnego.
pinxue