Przeczytałem wiele samouczków o tym, jak zbudować niestandardowe jądra i uruchomić system Ubuntu przy użyciu tych jąder, i z powodzeniem postępowałem zgodnie z instrukcjami i uruchomiłem niestandardowe jądra, ale nie rozumiem, co robi każde z poleceń w przewodnikach i co się właściwie dzieje każde polecenie.
Procedura opisana na stronie Ubuntu ma dużo pracy z fakeroot
, dpkg
, make-kpkg
niektórzy initramfs i inne straszne rzeczy, że działa, ale po prostu nie pomaga mi zrozumieć, co się dzieje.
- Jakie są dane wyjściowe
make
w katalogu jądra systemu Linux? - Czy tworzy „skompresowany obraz jądra”?
- Jak nazywa się plik „skompresowanego obrazu jądra” i gdzie się on znajduje?
- Co ma
make modules
zrobić? - Czy
make modules
należy to zrobić przed czy pomake
? - Nie
make
buduje moich modułów automatycznie? - Jak wygląda proces (po angielsku, nie tylko lista poleceń) dodawania nowo zbudowanych jąder do listy jądra rozruchowego?
- Co ma
make install
zrobić? - Czy
make install
doda to do mojej listy jąder rozruchowych, aby nie musiałem nic więcej robić? - Czy istnieje odpowiednik
make modules_install
?
ubuntu
linux-kernel
make
AnkurVj
źródło
źródło
Odpowiedzi:
Z góry...
make
kompiluje i łączy obraz jądra. To jest pojedynczy plik o nazwievmlinuz
.make modules
kompiluje pojedyncze pliki dla każdego pytania, na które odpowiedziałeśM
podczas konfiguracji jądra. Kod obiektowy jest powiązany ze świeżo zbudowanym jądrem. (W przypadku pytań, na które odpowiedzianoY
, są one już częściąvmlinuz
, a w przypadku pytań,N
które zostały pominięte).make install
instaluje wbudowane jądro do/vmlinuz
.make modules_install
instaluje moduły jądra w/lib/modules
lub/lib/modules/<version>
.Jeśli chodzi o dodanie go do listy dostępnych jąder, zajmuje się tym moduł ładujący. Jest różny dla każdego programu ładującego, ale
grub
najczęściej występuje na x86 i amd64, więc opiszę to. To jest właściwie dość proste. Grub wygląda w/
,/boot
i/lib/modules
dla każdej rzeczy, która wygląda jak to może być jądro pracę i dodaje go. I tak, to jest uproszczony opis.Te dodatkowe „okropne rzeczy” w dokumentacji Ubuntu to dodatkowe rzeczy do stworzenia
deb
pakietu. Kiedy robisz to więcej niż dla siebie, znacznie lepiej jest go spakować. Zmienisz się w czasie.Budowanie jądra i modułów jest oddzielone, ponieważ ludzie, którzy tego potrzebują (tj. Programiści jądra), często wprowadzają zmiany tylko w module. Mogą zastosować swoje zmiany, przebudować i zainstalować tylko moduły. Oszczędza to dużo czasu, gdy trzeba to robić 20 razy dziennie. Nigdy nie będzie aktualizowany o jedno
make everything
polecenie. Zamiast tego działajmake && make modules && make install && make modules_install
tak, jak mówi dokumentacja . Proces kompilacji faworyzuje programistów jądra, a nie ciebie. I tak powinno być.W rzeczywistości nie ma prawie żadnego powodu, aby ktokolwiek poza programistami jądra lub pakietami dystrybucyjnymi skompilował jądro. W prawie każdych okolicznościach funkcja jądra, którą chcesz, została już dla Ciebie zbudowana i jest dostępna w jednym z wstępnie zapakowanych jąder. Są wyjątki, ale w dzisiejszych czasach są niezwykle rzadkie.
Nie dlatego, że zniechęcam cię do budowania własnego jądra, tak naprawdę zachęcam do zrobienia tego. Myślę, że budowanie jądra od zera jest nieocenioną praktyką do nauki o tym, jak to wszystko tam działa. Po części dlatego, że być może pewnego dnia będzie stanowić wyjątek, który musi. Ale uczy też wiele o jądrze i procesie rozruchu w ogóle. Będziesz lepszą osobą, która to zrobiła.
źródło
/vmlinuz
katalog znajduje się w folderze głównym? kiedy wykonam make install, czy ten katalog zostanie utworzony i tam zostanie umieszczone nowe jądro? Czymake modules_install
zastąpię obecnie zainstalowane moduły? Załóżmy, że umieszczam mój vmlinux w katalogu / boot, czy muszę zrobić coś innego (np. Edytować pliki konfiguracyjne gruba i zrobić aktualizację gruba czy coś po tym?)make bzimage
to robi./vmlinuz
jest plikiem binarnym, a nie katalogiem. Tworzę tylko spakowane jądra od około 5 lat, więc nie pamiętam dokładnie zachowaniamodules_install
bezpośrednio zainstalowanego jądra. Grub znajdzie twoje jądro/boot
bez pomocy. Tak, zawsze powinieneś uruchomićgrub-update
po zainstalowaniu nowego jądra.make bzimage
zamiastmake
? Czy muszę zrobićmake clean
imake bzimage
znowu? Przez/vmlinuz
to znaczy plik zostanie utworzony w katalogu głównym lub w folderze źródłowym jądra Linux?/
to ścieżka bezwzględna, więc tak, to plik w katalogu głównym.Y
które odpowiedziano, są wkompilowane (tj. Są częścią vmlinuz). Moduły, naM
które odpowiedziano, są kompilowane jako moduły ładowalne. Moduły, naN
które odpowiedziano, nie są kompilowane.make modules_install
dotyczy tylko tych, którzy odpowiedzieliM
.