Omówmy pokrótce katalog kompilacji jądra. Wszystkie wspomniane
za chwilę katalogi będą relatywnymi względem /usr/src/sys
,
do którego można także dojść przez /sys
. Można tam znaleźć
wiele różnych podkatalogów, jednak dla nas najważniejszym będzie
arch/conf
. W nim właśnie dokonamy
edycji pliku konfiguracyjnego jądra oraz je skompilujemy, będą to kolejne etapy
w całym procesie budowy. arch
oznacza architekturę,
do wyboru: i386
, alpha
,
amd64
, ia64
,
powerpc
, sparc64
, lub
pc98
(alternatywna gałąź sprzętu PC, popularna w Japonii).
Wszystko, co znajduje się w katalogu danej architektury dotyczy ściśle
tylko jej. Reszta źródeł jest dla wszystkich architektur taka sama.
Zwróćmy uwagę na logiczną strukturę katalogów z każdym wspieranym urządzeniem,
systemem plików, opcjami dodatkowymi - wszystko posiada swój
własny podkatalog.
Przykłady w niniejszym rozdziale zakładają, że wykorzystujemy architekturę i386. Jeśli tak nie jest, będziemy musieli dokonać odpowiednich zmian w nazwach ścieżek dostępu dla architektury naszego systemu.
Jeśli nie mamy katalogu /usr/src/sys
,
oznacza to, że nie dysponujemy zainstalowanymi źródłami jądra. Najprostszym sposobem
na zainstalowanie jest uruchomienie jako root
sysinstall
'a, wybranie ,
następnie , później ,
a na końcu . Jeśli jednak jesteśmy osobami mającymi
awersję do konfiguratorów możemy zainstalować źródła jądra ręcznie. W poniższym
przykładzie instalacja z „oficjalnej” płyty CD FreeBSD:
#
mount /cdrom
#
mkdir -p /usr/src/sys
#
ln -s /usr/src/sys /sys
#
cat /cdrom/src/ssys.[a-d]* | tar -xzvf -
Następnie wchodzimy do katalogu arch/conf
i kopiujemy domyślny plik konfiguracyjny o nazwie GENERIC
tworząc
plik z nazwą jaką chcemy nadać swojemu jądru. Na przykład:
#
cd /usr/src/sys/i386/conf
#
cp GENERIC MYKERNEL
Tradycyjnie nazwa jądra pisana jest wielkimi literami. Dodatkowo dobrym pomysłem
jest, by nazywać jądra tak jak komputery, co pomaga rozróżnić jądra, gdy mamy wiele
komputerów z różnym sprzętem. Dla potrzeb tego przykładu nazwiemy jądro
MYKERNEL
.
Nie jest najlepszym pomysłem trzymanie pliku konfiguracyjnego jądra bezpośrednio
w katalogu /usr/src
. Jeśli podczas kompilacji mamy kłopot,
czasem może się okazać kuszącym pomysłem po prostu wykasować cały katalog
/usr/src
i rozpocząć od początku. Wtedy zwykle, kilka sekund
po usunięciu katalogu, przypomina nam się, że usunęliśmy także plik konfiguracyjny
jądra. Podobnie, nie powinniśmy edytować bezpośrednio GENERIC
,
gdyż może zostać nadpisany przy kolejnej aktualizacji
naszego drzewa źródeł i zmiany, które wprowadziliśmy zostaną utracone.
Możemy chcieć trzymać plik konfiguracyjny jądra gdziekolwiek, a następnie utworzyć
symboliczne dowiązanie do pliku w katalogu
i386
.
Przykładowo:
#
cd /usr/src/sys/i386/conf
#
mkdir /root/kernels
#
cp GENERIC /root/kernels/MYKERNEL
#
ln -s /root/kernels/MYKERNEL
Przyszedł czas na edycję pliku konfiguracyjnego jądra. W przykładzie nazywa
się on MYKERNEL
. Jeśli dopiero zainstalowaliśmy system,
jedynym z dostępnych edytorów może być vi. Mimo, że jest
dobrze udokumentowany, opisany w wielu książkach, dla początkujących wydaje się on nieco
zbyt skomplikowany. FreeBSD zaopatrzony jest również w drugi edytor, znacznie prostszy
w obsłudze, o nazwie ee. Jeśli dopiero zaczynamy,
ee powinien być naszym wyborem. Nie krępujmy się i zmieńmy
wartości na górze pliku, szczególnie te, odróżniające nasz własny plik
od GENERIC
.
Jeśli już kompilowaliśmy jądro w SunOS™ lub innych systemach BSD, duża część pliku konfiguracyjnego powinna być nam znajoma. Jeśli natomiast jesteśmy lepiej zaznajomieni z systemami typu DOS, plik konfiguracyjny może wydać się nam nieco obcy. W tym przypadku przeczytajmy uważnie każdą opcję oraz komentarz w pliku konfiguracyjnym.
Jeśli synchronizujemy nasze drzewo źródłowe z najnowszymi
źródłami projektu FreeBSD, należy zawsze, nim rozpoczniemy jakiekolwiek
działania aktualizujące, zapoznać się z zawartością pliku
/usr/src/UPDATING
. W pliku tym zapisane są wszelkie niezbędne
zagadnienia związane z aktualizacją FreeBSD. Plik /usr/src/UPDATING
zawsze pasuje do źródła naszej wersji FreeBSD, jest przez to bardziej odpowiednim źródłem
informacji niż Podręcznik.
Musimy teraz skompilować kod źródłowy jądra. Istnieją dwie procedury, za pomocą których można tego dokonać. Wybór zależeć będzie od tego w jakim celu kompilujemy jądro oraz od wykorzystywanej wersji FreeBSD.
Jeśli zainstalowaliśmy tylko źródła jądra, wykorzystamy procedurę 1.
Jeśli budujemy nowe jądro, bez aktualizowania źródeł (na przykład, by dodać dodatkowe
opcje, np. IPFIREWALL
), możemy użyć dowolnej z procedur.
Jeśli przebudowujemy jądro jako część procesu make buildworld
,
powinniśmy użyć procedury 2.
Jeśli nie aktualizowaliśmy naszych źródeł
w żaden sposób od ostatniego, zakończonego powodzeniem cyklu
buildworld
-installworld
(nie uruchamialiśmy CVSup,
CTM, ani nie korzystaliśmy
z anoncvs), wówczas bezpiecznym jest skorzystać z sekwencji
config
, make depend
,
make
i make install
.
By wygenerować kod źródłowy jądra, należy uruchomić config(8).
#
/usr/sbin/config MYKERNEL
Następnie, przenieśmy się do katalogu w którym dokonuje się budowy. Po ponownym uruchomieniu config(8) wyświetlona zostanie nazwa katalogu.
#
cd ../compile/MYKERNEL
Skompilujmy jądro.
#
make depend
#
make
Zainstalujmy nowe jądro.
#
make install
Wejdźmy do katalogu /usr/src
.
#
cd /usr/src
Skompilujmy jądro.
#
make buildkernel KERNCONF=MYKERNEL
Zainstalujmy nowe jądro.
#
make installkernel KERNCONF=MYKERNEL
Ta metoda kompilacji jądra wymaga wszystkich plików źródłowych. Jeśli zainstalowaliśmy jedynie źródła jądra, powinniśmy skorzystać z opisanej powyżej metody tradycyjnej.
Domyślnie, podczas kompilacji indywidualnego jądra,
wszystkie moduły jądra zostaną również zrekompilowane.
Jeśli chcemy zaktualizować jądro szybciej bądź zbudować tylko własne moduły,
powinniśmy przed rozpoczęciem kompilacji jądra zmodyfikować plik
/etc/make.conf
:
MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs
Zmienna ta definiuje listę modułów do kompilacji zamiast wszystkich. Inne zmienne przydatne w procesie kompilacji jądra opisane zostały w podręczniku systemowym make.conf(5).
Nowe jądro zostanie skopiowane do katalogu /boot/kernel
jako /boot/kernel/kernel
, a dotychczasowe zostanie przeniesione do /boot/kernel.old/kernel
.
Teraz należy ponownie uruchomić komputer. W razie jakby coś poszło źle, na końcu tego
rozdziału przedstawionych zostało kilka awaryjnych
rozwiązań. Przeczytajmy również rozdziały opisujące co zrobić w razie, gdy system nie chce się ponownie uruchomić.
Inne pliki związane z procesem uruchamiania, np. takie jak
loader(8) czy pliki konfiguracyjne są przechowywane w katalogu
/boot
. Własne moduły jak i moduły innych producentów,
można umieszczać w katalogu /boot/kernel
, jednakże
użytkownicy powinni być świadomi, iż synchronizacja modułów ze skompilowanym jądrem
jest bardzo ważna. Moduły nie przygotowane do pracy z danym jądrem mogą doprowadzić do
niestabilności czy błędów.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.