Czy możliwe jest zainstalowanie samego jądra Linux?

45

Jestem ciekawy, czy możliwe jest zainstalowanie samego jądra Linuxa, czy też trzeba użyć jednego ze smaków. Gdyby to było możliwe, jak byś to zrobił? Nie potrzebuję szczegółowego samouczka. Chcę tylko wiedzieć, jak można to zrobić koncepcyjnie. Nie jestem dobry w sprawach niskopoziomowych i chcę wiedzieć, w jaki sposób wprowadzasz system operacyjny do komputera. Wyobrażam sobie, że ma to coś wspólnego z MBR.

No i zauważyłem, że wiele odpowiedzi sugeruje pewną dystrybucję minimalnego Linuksa. Powinienem chyba powiedzieć, że nie zamierzam instalować Linuksa z minimalną kością. To pytanie jest czysto teoretyczne. Mimo to naprawdę doceniam wszystkie odpowiedzi i odniosę się do nich natychmiast, jeśli kiedykolwiek będę chciał zainstalować naprawdę spersonalizowanego Linuksa.

cesar
źródło
3
Co rozumiesz przez „sam” i „smaki”? Linux nie jest systemem operacyjnym, to jądro, na co byłoby dobre jądro bez systemu operacyjnego? Czy zamiast tego próbujesz ustalić sekwencję modułu ładującego?
Caleb
3
Jeśli chcesz zrozumieć, w jaki sposób jądro / system operacyjny dostaje się do komputera, tutaj jest miejsce do rozpoczęcia. Upewnij się, że nie zadajesz pytań „nowicjuszowi”, będą cię gryźć, zamiast tego zadawaj je na SO .
Philomath
3
Przez sam rozumiem tylko jądro, bez interfejsu użytkownika i dołączone programy, takie jak OpenOffice. Przez „smaki” rozumiem różne dystrybucje Linuksa, takie jak ubuntu, redhat, debian i mandriva. Prawie nie mam pojęcia o czym mówię. Wyobrażałem sobie, że jądro Linuksa ma kilka podstawowych funkcji bash, takich jak DOS. Wydaje mi się, że moje pomysły na jądra i systemy operacyjne zostały poplątane.
cesar
4
Tak, jesteście NAPRAWDĘ wplątani :) Bash to po prostu program użytkownika, który działa jako proces zarządzany przez jądro. Samo jądro daje ci tylko platformę do uruchamiania innych rzeczy. Sugestia LFS (Linux From Scratch) w odpowiedzi Shadura jest trafna. Dowiesz się wiele o tym, czym są wszystkie różne elementy i co sprawia, że ​​dystrybucja jest dystrybucją i gdzie kończy się jądro, a lądowanie użytkowników zaczyna się od zbudowania systemu scratch.
Caleb
2
Właściwie DOS kernelteż nie miał żadnych podstawowych bashmożliwości. Standardowy interfejs użytkownika został dostarczony przez program powłoki COMMAND.COM. Najbliższym działaniem, w którym można uzyskać dostęp do samego jądra, jest cokolwiek użytecznego, to należy uruchomić system za pomocą parametru jądra init=/bin/bash(zakładając, że na dysku znajduje się minimalna liczba Linuksa). W odpowiedzi, jeśli masz tylko program ładujący i jądro, zatrzyma się bardzo szybko, gdy go nie znajdzie init.
StarNamer

Odpowiedzi:

51

Możesz technicznie zainstalować tylko bootloader i samo jądro, ale jak tylko jądro się uruchomi, będzie narzekać na niemożność uruchomienia „init”, wtedy po prostu będzie tam siedzieć i nie będziesz mógł nic z tym zrobić.

BTW, jest to część bootloadera, który znajduje się w MBR. Jądro znajduje się gdzieś na zwykłym obszarze dysku. Program ładujący jest skonfigurowany tak, aby wiedzieć, gdzie to jest, aby mógł załadować jądro i wykonać je.

Shawn J. Goff
źródło
Jak umieściłbyś to w MBR?
cesar
Każdy bootloader jest wyposażony w narzędzie do instalowania się w MBR. Istnieją również bardziej przyjazne narzędzia, takie jak Boot-Repair ( help.ubuntu.com/community/Boot-Repair ).
Shawn J. Goff,
Cóż, możesz utworzyć initramfs i osadzić go w obrazie jądra, a wtedy będziesz mieć w pełni działający system z samego pliku obrazu jądra :-)
Patrick
@ ShawnJ.Goff Dlaczego jądro narzeka, że ​​nie jest w stanie uruchomić init, jeśli zapewnimy initramfs?
Pratik Singhal
4
@ ps06756 Jeśli masz initramfs, nie jest to jądro „samo”, jak zadano pytanie. Jeśli initramfs ma init, jądro nie będzie narzekać.
Shawn J. Goff
18

Nie sądzę, że rozumiesz dokładnie, o co pytasz, ale możesz rzucić okiem na projekt Linux From Scratch .

Shadur
źródło
LFS byłoby dobrym pomysłem, aby dowiedzieć się, jak zbudować minimalny system. Lub możesz spojrzeć na MINIX (i przeczytać książkę ). Lub, dla innego wprowadzenia (mniej pracy, ale mniej informacyjnie), spójrz na pakiety oznaczone jako „niezbędne” ( aptitude search '?essential') na Debianie lub Ubuntu i zrozum, co każdy z nich robi (jest to nieco więcej niż absolutne minimum).
Gilles „SO - przestań być zły”
12

Jeśli pytasz, czy możesz po prostu zainstalować lub zaktualizować jądro „przez” istniejący system bez instalowania wielu innych programów?

Jądro Linux to plik binarny zwykle nazywany vmlinuz-x.x.x-x-namew bootkatalogu (który zwykle jest oddzielną małą partycją na początku dysku twardego), gdzie x to numer wersji. „nazwa” to po prostu wybrana nazwa jądra, którą można ustawić w czasie kompilacji, można jej użyć do określenia, jakiego rodzaju maszyny lub architektury jest jądro z jakiegokolwiek innego powodu.

Jest ładowany w czasie rozruchu przez program ładujący, GRUBktóry zwykle jest wywoływany przez kod rozruchowy w MBR, który jest wywoływany przez BIOS ROM. Po załadowaniu nie jest „trzymany otwarty” ani specjalnie chroniony. Możesz więc zastąpić ten plik innym działającym jądrem. Ale GRUBma fajną funkcję, która pozwala wybrać wiele jąder do rozruchu. Więc całkiem sprytnie jest dodać swoje dodatkowe jądro do tej listy, ale zachowaj oryginalne znane działające jądro na wypadek, gdyby coś poszło nie tak.

Uważam, że prawie wszystkie dystrybucje tworzą „modułowe” jądro, w którym sterowniki urządzeń znajdują się w osobnych plikach. Dlatego większość jąder potrzebuje systemu plików zawierającego sterowniki dostępne dla niego podczas rozruchu i do tego właśnie służy „initrd” (początkowy dysk RAM) lub „initramfs”. GRUBzaładuje jądro w miejscu w pamięci, a initrd w innym miejscu i przeskoczy do jądra, informując go, gdzie jest initrd, uruchamiając Linuksa.

Sterowniki mogą być również „wbudowane” w jądro i dlatego są automatycznie ładowane i dostępne, gdy bootloader ładuje vmlinuzobraz. Jądra przeznaczone do pracy w różnych systemach (takich jak większość dystrybucji) zwykle minimalizują to, co jest wbudowane w jądro, ponieważ dostępny sprzęt zostanie przeskanowany w późniejszym etapie procesu rozruchu i załadowane zostaną tylko moduły reprezentujące obecny sprzęt.

Istnieją narzędzia do modyfikowania i tworzenia initrds. Debian ma fajne narzędzia i myślę, że inne dystrybucje też.

Jeśli więc pobierzesz nowsze jądro z kernel.org i skompilujesz je, aby utworzyć nowy obraz binarny jądra, musisz utworzyć lub zaktualizować initrd ze sterownikami, które działają z tym jądrem. Stary initrd nie będzie działał, ponieważ sterowniki muszą pasować do uruchomionej wersji jądra.

Plik initrd ma nazwę initrd.img-x.x.x.x-namepodobną do jądra i może być zastąpiony po rozruchu, podobnie jak jądro, a najlepsza praktyka wskazywałaby, że nie usuwasz znanego działającego initrd, dopóki nie dowiesz się, że możesz pomyślnie załadować się do nowego jądra + initrd.

Mam nadzieję, że zapewnia to pewien kontekst.

Jeśli szukasz instalacji Linuksa „od podstaw”, w której nie ma zainstalowanych żadnych dodatkowych programów, moim ulubionym wyborem zawsze była instalacja netinstobrazu Debiana . W zasadzie masz tylko najbardziej podstawowe narzędzia potrzebne do uruchomienia konsoli tekstowej wiersza poleceń i nanojako edytora tekstu.

LawrenceC
źródło
5

Pojedyncze pliki wykonywalne rootf

System absolutnie minimalny uruchamia jeden /initprogram, jak wyjaśniłem w Single Application Linux | Super użytkownik

Minimalny Linux Live

https://github.com/ivandavidov/minimal

Dla bardziej interesującego systemu interaktywnego jest to (głównie edukacyjny) mały skrypt, który:

  • pobiera źródło jądra i busybox
  • kompiluje je
  • generuje z nimi rozruchowy ISO 8Mb

ISO pozostawia Cię w minimalnej powłoce z busybox.

Dzięki QEMU możesz łatwo uruchomić system.

Zmodyfikowałem go, aby umożliwić uruchamianie go z katalogu źródłowego jądra: https://github.com/cirosantilli/runlinux

Stosowanie:

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

i pozostaniesz w oknie QEMU z nowym minimalnym systemem. Niesamowite.

Ponieważ jest mały, jest to dobra opcja, aby przeczytać źródło i zrozumieć, co się dzieje.

Testowane na Ubuntu 16.04.

Konstruktor

https://buildroot.org/

Duży zestaw skryptów Makefile, które zarządzają:

  • Zestaw narzędzi do kompilacji krzyżowej GCC
  • kompilacja jądra
  • kompilacja bootloadera
  • generowanie rootfów
  • ma mnóstwo przepisów na pobieranie / budowanie pakietów w drzewie źródłowym, w tym złożone rzeczy, takie jak GTK. Istnieje system zależności.

Minimalny przykład:

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.

Ma nawet przepisy na budowę X11 od podstaw: Jak zainstalować X11 na własnym systemie Linux Buildroot?

Profesjonalne rzeczy.

Alpine Linux

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

Wbudowana dystrybucja z menedżerem pakietów, który oferuje wstępnie skompilowane pliki binarne ze strony internetowej.

Zobacz też

Ciro Santilli
źródło
3

Chciałbym powtórzyć sugestię Shadura, że powinieneś zabrudzić sobie ręce Linuxa od podstaw.
Ponadto, coś podobnego, wypróbuj Pocket Linux .

Przewodnik Pocket Linux pokazuje, jak zbudować mały system GNU / Linux oparty na konsoli, używając tylko kodu źródłowego i kilku dyskietek. Jest przeznaczony dla użytkowników Linuksa, którzy chcieliby lepiej zrozumieć, w jaki sposób ich system działa pod osłoną funkcji i narzędzi specyficznych dla dystrybucji.

Philomath
źródło
2
Chociaż zauważ, że nikt przy zdrowych zmysłach nie poleca / ani / LFS ani PocketLinux do jakiegokolwiek ważnego zadania produkcyjnego - są dobre do nauki działania rzeczy, ale jest powód, dla którego większość dystrybucji ma pełny zestaw narzędzi i nakładek dla większości rzeczy.
Shadur
3

Możliwe jest zainstalowanie jądra Linux bez zwykłych narzędzi przestrzeni użytkownika. Zwykle odbywa się to w systemach wbudowanych, takich jak routery. Zwykle jądro jest ładowane z pamięci ROM lub Flash i zostało dostosowane do danego urządzenia (zwykle z wymaganymi sterownikami wkompilowanymi w jądro, a nie ładowanymi jako moduły).

Musi istnieć co najmniej jeden program przestrzeni użytkownika, aby stać się procesem „init” (niekoniecznie wywoływanym init, ale uruchamianym przez jądro jako proces 1 i automatycznym elementem nadrzędnym dowolnych osieroconych procesów) - chyba że jądro zostało zmodyfikowane (raczej niż po prostu dostosowane), aby tego nie wymagać.

Z pewnością nie jest konieczne posiadanie powłoki, aby mieć działające urządzenie oparte na systemie Linux, chociaż może to znacznie ułatwić programowanie!

Toby Speight
źródło
2

Wiele dystrybucji zapewnia instalacje „podstawowe”. To jest to, czego chcesz. Zobacz ubuntu-minimal, debian net-install, archlinux (domyślnie jest to tylko rdzeń).

Inne odpowiedzi są przydatne, jeśli chcesz się uczyć, ale może tak nie być = p

użytkownik606723
źródło