W tym momencie powinieneś posiadać jądro oraz skompresowany główny system plików. Jeśli tworzysz dyskietkę startową/główną, sprawdź, czy oba pliki zmieszczą się na dyskietce. Jeśli tworzysz osobno dystkietkę startową i główną, sprawdź, czy główny system plików zmieści się na jednej dyskietce.
Powinieneś zdecydować, czy używać LILO do wystartowania jądra. Alternatywnym
rozwiązaniem jest skopiowanie jądra bezpośrednio na dyskietkę i
wystartowanie bez LILO. Zaletą korzystania z LILO jest to, że
umożliwia on przekazanie pewnych parametrów do jądra które mogą być
konieczne do inicjalizacji sprzętu. Sprawdź plik
/etc/lilo.conf. Jeśli istnieje on i zawiera linię
``append=...'', prawdopodobnie musisz przekazać jakieś parametry. Wadą
korzystania z LILO jest to, że tworzenie dyskietki jest bardziej
skomplikowane, i zajmuje trochę więcej miejsca. Musisz utworzyć odrębny
system plików, który nazwiemy systemem plików jądra, do którego
skopiujesz jądro i kilka innych plików wymaganych przez LILO.
Jeśli zamierzasz korzystać z LILO, czytaj dalej. Jeśli chcesz skopiować jądro bezpośrednio na dyskietkę, przejdź do działu Przenoszenie jądra bez LILO.
Pierwszą rzeczą, która musisz zrobić, jest stworzenie małego pliku konfiguracyjnego dla LILO. Powinien on wyglądać mniej więcej tak:
boot =/dev/fd0
install =/boot/boot.b
map =/boot/map
read-write
backup =/dev/null
compact
image = KERNEL
label = Bootdisk
root =/dev/fd0
Znaczenia tych parametrów szukaj w dokumentacji LILO. Prawdopodobnie
będziesz chciał również dodać do pliku linię append=... taką samą, jak
w pliku /etc/lilo.conf na dysku twardym.
Zapisz ten plik jako bdlilo.conf.
Następnie musisz stworzyć mały system plików, który nazwiemy systemem plików jądra, aby odróżnić go od głównego systemu plików.
Najpierw sprawdź, jak duży powinien być ten system plików. Weź rozmiar
twojego jądra w blokach (rozmiar pokazywany przez komendę ``ls -l
KERNEL'' podzielony przez 1024 i zaokrąglony w górę) i dodaj 50.
Około pięćdziesiąt bloków to obszar potrzebny na i-węzły oraz pozostałe
pliki. Jeśli chcesz, możesz dokładnie obliczyć ten obszar, lub po prostu
użyć liczby 50. Jeśli tworzysz osobno dyskietkę startową i główną, to możesz
spokojnie przeznaczyć nawet więcej miejsca, jako że pierwsza dyskietka jest
w całości przeznaczona na jądro. Nazwijmy tę liczbę BLOKI_JĄDRA.
Włóż dyskietkę do stacji dysków (przyjmiemy że jest nią /dev/fd0) i utwórz na niej system plików ext2:
mke2fs -i 8192 -m 0 /dev/fd0 BLOKI_JĄDRA
Opcja ``-i 8192'' oznacza, że chcemy jeden inode co 8192 bajty.
Następnie zamontuj system plików, usuń katalog lost+found oraz utwórz
katalogi dev i boot dla LILO:
mount /dev/fd0 /mnt
rm -rf /mnt/lost+found
mkdir /mnt/{boot,dev}
Następnie utwórz urządzenia /dev/null i /dev/fd0.
Zamiast szukania ich numerów, możesz po prostu skopiować je z twardego dysku
używając opcji -R:
cp -R /dev/{null,fd0} /mnt/dev
LILO wymaga kopii swojego programu startującego, boot.b, który
możesz przegrać z twardego dysku. Zwykle znajduje się on w katalogu
/boot:
cp /boot/boot.b /mnt/boot
Na koniec skopiuj plik konfiguracyjny LILO który utworzyłeś poprzednio oraz swoje jądro. Oba pliki mogą zostać umieszczone w głównym katalogu:
cp bdlilo.conf KERNEL /mnt
W tej chwili w systemie plików jądra znajduje się wszystko co potrzebne dla
LILO, więc jesteś teraz gotowy do uruchomienia go. Opcja -r oznacza
instalowanie programu startującego w katalogu innym niż główny:
lilo -v -C bdlilo.conf -r /mnt
LILO powinien zakończyć działanie bez żadnych błędów, następnie system plików powinien wyglądać podobnie jak poniżej:
total 361 1 -rw-r--r-- 1 root root 176 Jan 10 07:22 bdlilo.conf 1 drwxr-xr-x 2 root root 1024 Jan 10 07:23 boot/ 1 drwxr-xr-x 2 root root 1024 Jan 10 07:22 dev/ 358 -rw-r--r-- 1 root root 362707 Jan 10 07:23 vmlinuz boot: total 8 4 -rw-r--r-- 1 root root 3708 Jan 10 07:22 boot.b 4 -rw------- 1 root root 3584 Jan 10 07:23 map dev: total 0 0 brw-r----- 1 root root 2, 0 Jan 10 07:22 fd0 0 crw-r--r-- 1 root root 1, 3 Jan 10 07:22 null
Nie przejmuj się, jeśli rozmiary plików sę nieco inne.
Następnie pozostaw dysk w napędzie i przenieś się do działu Konfiguracja słowa ramdysku.
Jeśli nie korzystasz z LILO, to skopiuj jądro na dyskietkę startową
używając komendy dd:
% dd if=KERNEL of=/dev/fd0 bs=1k
353+1 records in
353+1 records out
W tym przykładzie dd zapisał 353 kompletne rekordy oraz 1 niekompletny,
tak więc jądro zajmuje teraz pierwsze 353 bloki na dyskietce. Nazwij tę
liczbę BLOKI_JĄDRA i zapamiętaj ją, ponieważ będzie ona
potrzebna w następnym dziale.
Na koniec ustaw dyskietkę jako główne urządzenie i skonfigguruj je tak, aby było dostępne do zapisu i odczytu:
rdev /dev/fd0 /dev/fd0
rdev -R /dev/fd0 0
Pamiętaj, aby użyć opcji -R pisanej wielką literą w drugiej komendzie
rdev.
Wewnątrz obrazu jądra znajduje się słowo ramdysku, które
mówi, gdzie znajduje się główny system plików, oraz zawiera pewne inne opcje.
Słowo to można zmieniać za pomocą polecenia rdev, a interpretowane jest w
następujący sposób:
bity 0-10: Przemieszczenie ramdysku, w blokach 1024-bajtowych
bity 11-13: nieużywane
bit 14: Flaga oznaczająca, że ramdysk na zostać załadowany
bit 15: Flaga oznaczająca, aby pytać przez ładowaniem
głównego systemu plików
Jeśli bit 15 jest ustawiony, to podczas startu zostaniesz poproszony o włożenie do napędu nowej dyskietki. Jest to konieczne w przypadku korzystania z dwóch dyskietek.
Istnieją dwa przypadki, w zależności od tego, czy budujesz pojedynczą dyskietkę startową/główną, czy dwie osobne dyskietki, startową i główną.
BLOKI_JĄDRA). Bit 14 zostanie ustawiony na 1, a
bit 15 będzie wynosił zero.
Po skrupulatnych obliczniach wartości słowa ramdysku, ustaw ją poleceniem
rdev -r. Upewnij się, że podałeś wartość dziesiętną. Jeśli
korzystasz z LILO, to argumentem dla rdev powinna być ścieżka do
jądra, np. /mnt/vmlinuz. Jeśli kopiowałeś jądro za pomocą polecenia
dd, to użyj zamiast tego nazwę urządzenia stacji dysków (np.
/dev/fd0).
rdev -r JĄDRO_LUB_STACJA_DYSKÓW WARTOŚĆ
Jeśli korzystasz z LILO, odmontuj teraz dyskietkę.
Ostatnim krokiem jest przeniesienie głównego systemu plików.
dd z opcją
seek, która określa ile bloków należy przeskoczyć:
dd if=rootfs.gz of=/dev/fd0 bs=1k seek=BLOKI_JĄDRA
dd if=rootfs.gz of=/dev/fd0 bs=1k
Moje gratulacje, dyskietki są już gotowe! Zawsze powninieneś przetestować swoje dyskietki startowe zanim odłożysz je na bok do czasu awarii! Jeśli coś się nie uda, czytaj dalej.