Tajemnice vmlinuz: Co to jest i dlaczego tak się nazywa?
Czym jest plik vmlinuz?
Jeśli kiedykolwiek zaglądałeś do katalogu /boot swojego systemu Linux, z pewnością natknąłeś się na plik o tajemniczej nazwie vmlinuz (lub vmlinuz-6.5.0-generic itp.). Jest to jeden z najważniejszych plików w całym systemie – to skompresowany, bootowalny obraz jądra Linuksa.
W skrócie, to właśnie ten plik jest ładowany do pamięci przez bootloader (taki jak GRUB) podczas uruchamiania komputera. Po załadowaniu, mały fragment kodu wewnątrz vmlinuz dekompresuje resztę jądra do pamięci RAM, a następnie przekazuje mu kontrolę, rozpoczynając właściwy proces startu systemu operacyjnego.
Ciekawostka #1: Co oznacza nazwa vmlinuz?
Nazwa vmlinuz nie jest przypadkowa. To skrót, który można rozbić na części, a każda z nich ma historyczne znaczenie:
vm: Oznacza “Virtual Memory” (pamięć wirtualna). We wczesnych dniach Linuksa, jądra, które wspierały pamięć wirtualną (co dziś jest standardem), miały ten prefiks, aby odróżnić je od starszych wersji, które tego nie potrafiły.linu: To po prostu skrót od “Linux”.z: Oznacza, że obraz jądra jest skompresowany, najczęściej przy użyciu algorytmu zlib. To właśnie ta kompresja sprawia, że plik jest znacznie mniejszy niż jego surowy odpowiednik,vmlinux.
Ciekawostka #2: vmlinux vs vmlinuz
Często można spotkać się również z plikiem vmlinux (bez “z” na końcu). Jaka jest różnica?
vmlinux: To surowy, nieskompresowany, niebootowalny obraz jądra. Zawiera on wszystkie symbole debugowania i jest w formacie ELF. Jest ogromny w porównaniu dovmlinuzi używa się go głównie do debugowania i analizy jądra za pomocą narzędzi takich jakgdbczycrash.vmlinuz: To skompresowana i “oczyszczona” wersjavmlinux, przygotowana specjalnie do uruchamiania systemu.
Proces tworzenia vmlinuz z vmlinux polega na usunięciu zbędnych informacji, kompresji i dodaniu małego kodu startowego odpowiedzialnego za dekompresję.
Ciekawostka #3: A co z bzImage?
Podczas kompilacji jądra, często używa się polecenia make bzImage. Wiele osób myśli, że bz oznacza kompresję bzip2. Nic bardziej mylnego!
Historycznie, pierwszy skompresowany obraz jądra nazywał się zImage (od “zlib Image”). Miał on jednak ograniczenie – całe skompresowane jądro musiało zmieścić się w pierwszym 640 KB pamięci. Gdy jądro zaczęło rosnąć, stało się to problemem.
Wprowadzono więc format bzImage, gdzie bz oznacza “big zImage” (duży zImage), a nie bzip2. bzImage również używa kompresji zlib (lub nowszych, jak lzo, xz), ale dzięki innej organizacji pamięci, pozwala na ładowanie znacznie większych obrazów jądra. Dziś bzImage jest de facto standardem, a plik, który generuje, jest właśnie naszym vmlinuz.
Podsumowanie
Plik vmlinuz to serce naszego systemu podczas startu. Jego nazwa i format są wynikiem dekad ewolucji jądra Linuksa – od prostych początków, przez dodanie pamięci wirtualnej, aż po potrzebę ładowania coraz większych i bardziej złożonych kerneli. To mały plik z wielką historią!