Jądro (kernel) Linux przyjmuje pewne "opcje wiersza
poleceń"", lub "parametry rozruchowe" podczas
uruchamiania. Ogólnie jest to używane do przekazywania
jądru informacji o parametrach sprzętu, których
samodzielnie nie potrafi ono określić lub by zapobiec
wartościom, które jądro by normalnie
wykryło.
Kiedy jądro jest uruchamiane bezpośrednio przez
BIOS, nie ma możliwości przekazywania żadnych
parametrów. Tak więc, aby móc mieć tę
możliwość, trzeba używać programu
rozruchowego zdolnego do przekazywania parametrów, takiego jak
GRUB.
Wiersz poleceń jądra jest przetwarzany w
listę łańcuchów (argumentów rozruchowych)
rozdzielonych spacjami. Większość argumentów
rozruchowych przyjmuje postać:
nazwa[=wartość_1][,wartość_2]...[,wartość_10]
gdzie "nazwa" jest unikalnym słowem kluczowym,
które jest używane do określania, która
część jądra ma otrzymać związane z
nim wartości. Poszczególne argumenty rozruchowe są
zwyczajnie oddzielone spacjami, w formacie wyżej podanym.
Proszę zauważyć, że limit 10 wartości
jest rzeczywisty, jako że obecnie kod obsługuje jedynie 10
oddzielonych przecinkami parametrów dla słowa kluczowego
(można jednak użyć tego samego słowa kluczowego
drugi raz, aby pomieścić dodatkowe parametry).
Most of the sorting is coded in the kernel source file
init/main.c. First, the kernel checks to see if the argument is any
of the special arguments 'root=', 'nfsroot=', 'nfsaddrs=', 'ro', 'rw',
'debug', or 'init'. The meaning of these special arguments is described
below.
Potem przechodzi przez listę funkcji
konfigurujących, aby zobaczyć czy podany tekst argumentu (taki
jak "foo") nie jest związany z funkcją
konfigurującą ("foo_setup()") dla konkretnego
urządzenia, lub części jądra. Jeśli
przekazało się jądru linię foo=3,4,5,6 to
przeszuka ono tablice bootsetupowe aby sprawdzić, czy "foo"
było zarejestrowane. Jeśli było, wywołuje
funkcję konfigurującą związaną z
"foo" (foo_setup()) i przekazuje jej argumenty 3, 4, 5 i 6 podane
w linii poleceń jądra.
Wszystko, co jest w postaci "foo=bar", co nie jest
akceptowane jako funkcja konfigurująca, jak opisano powyżej,
zostaje zinterpretowane jako zmienna środowiskowa, która ma
być ustawiona. (Bezużytecznym?) przykładem może
być użycie "TERM=vt100" jako argumentu
rozruchowego.
Wszelkie pozostałe argumenty, które nie były
wybrane przez jądro i nie były zinterpretowane jako zmienne
środowiskowe, zostają potem przekazane procesowi PID 1,
którym zwykle jest program init(1). Najpopularniejszym
argumentem, który jest przekazywany procesowi init jest
słowo "single", które mówi mu, by
uruchomił komputer w trybie pojedynczego użytkownika,
żeby nie odpalał wszystkich normalnych demonów.
Proszę sprawdzić na stronie podręcznika init(1),
jakie argumenty przyjmuje.
- 'init=...'
- Ustawia to pierwotne polecenie do wykonania przez jądro.
Jeśli nie jest ono ustawione lub nie może zostać
znalezione, to jądra wypróbowuje /sbin/init,
następnie /etc/init, później /bin/init
i w końcu /bin/sh a ostatecznie panikuje, jeśli
wszystkie te próby zawiodą.
- 'nfsaddrs=...'
- Ustawia adres rozruchowy NFS na podany łańcuch. Adres
rozruchowy jest używany w przypadku rozruchu sieciowego.
- 'nfsroot=...'
- Ustawia nazwę katalogu głównego NFS na podany
łańcuch. Jeśli łańcuch ten nie
rozpoczyna się od "/", "," lub cyfry, to jest
on poprzedzany przez "/tftpboot/". Ta nazwa katalogu
głównego jest używana w przypadku rozruchu
sieciowego.
- 'root=...'
- Ten argument mówi jądru, którego urządzenia
użyć do jako głównego systemu plików
podczas rozruchu. Domyślna wartość tego ustawienia
jest skonfigurowana podczas kompilacji i zwykle jest
wartością urządzenia głównego systemu,
na którym zbudowano jądro. Aby nadpisać tę
wartość i wybrać na urządzenie
główne np. drugi napęd dyskietek, należy
użyć "root=/dev/fd1".
- The root device can be specified symbolically or numerically. A symbolic
specification has the form /dev/XXYN, where XX designates the
device type (e.g., 'hd' for ST-506 compatible hard disk, with Y in
'a'–'d'; 'sd' for SCSI compatible disk, with Y in 'a'–'e'),
Y the driver letter or number, and N the number (in decimal) of the
partition on this device.
- Proszę zauważyć, że nie ma to nic do czynienia
z przeznaczeniem tych urządzeń w bieżącym
systemie. Część "/dev/" jest tylko
konwencją.
- Powyższe urządzenia można przekazywać
także w niewygodnej i mniej przenośnej reprezentacji
numerycznej, która jest kombinacją numerów
głównych/pobocznych (major/minor) urządzeń.
(np. /dev/sda3 ma numer główny 8 i poboczny 3,
więc można użyć "root=0x803" jako
alternatywy).
- 'rootdelay='
- Parametr ustawia przerwę (w sekundach) przed próbą
zamontowania głównego systemu plików.
- 'rootflags=...'
- Parametr ustawia łańcuch opcji montowania dla
głównego systemu plików (więcej informacji
również w fstab(5)).
- 'rootfstype=...'
- Opcja 'rootfstype' nakazuje jądru zamontowanie
głównego systemu plików tak, jak gdyby był on
podanego typu. Może być to przydatne (przykładowo) do
zamontowania systemu plików ext3 jako ext2 i usunięcia
dziennika w głównym systemie plików, cofając
tak naprawdę jego format z ext3 do ext2 bez potrzeby rozruchu
komputera z innego nośnika.
- 'ro' i 'rw'
- Opcja 'ro' mówi jądru, by zamontowało
główny system plików jako przeznaczony tylko do
odczytu, aby fsck mógł pracować na nieruchomym
systemie plików. Żaden proces nie może
zapisywać plików na systemie plików, dopóki
nie zostanie remontowany jako przeznaczony do odczytu i zapisu, np.
poprzez "mount -w -n -o remount /" (patrz też
mount(8)).
- Opcja 'rw' mówi jądru, by zamontować
główny system plików jako przeznaczony do
odczytu/zapisu. Tak jest domyślnie.
- 'resume=...'
- Przekazuje do jądra położenie zahibernowanych danych,
z których chce się wznowić pracę systemu po
hibernacji. Zwykle jest to partycja lub plik wymiany.
Przykład:
-
resume=/dev/hda2
- 'reserve=...'
- Ta komenda jest używana do chronienia regionów portów
wejścia/wyjścia przed sondowaniem. Postać
polecenia:
-
reserve=iobase,extent[,iobase,extent]...
- W niektórych komputerach może być niezbędne
chronienie sterowników urządzeń od szukania
urządzeń (autosondowanie) w określonych regionach.
Może to wynikać z błędnej reakcji
sprzętu, możliwej błędnej identyfikacji lub po
prostu z tego, że nie chce się tego sprzętu
inicjalizować.
- Argument reserve podaje region portu wejścia/wyjścia,
który nie ma być sondowany. Sterownik urządzenia nie
będzie sondować zarezerwowanego regionu, chyba że
inny argument rozruchowy wyjątkowo mu to nakaże.
- Na przykład, wiersz rozruchowy
-
reserve=0x300,32 blah=0x300
- powstrzymuje wszystkie sterowniki urządzeń, poza
sterownikiem "blah" od sondowania 0x300-0x31f.
- 'panic=N'
- Domyślnie, jądro nie uruchomi się ponownie po panice,
ale za pomocą tej opcji można spowodować, że
jądro wykona ponowne uruchomienie systemu po N sekundach
(jeśli N jest większe niż zero). Czas ten
można również ustawić za pomocą
-
echo N > /proc/sys/kernel/panic.
- 'reboot=[warm|cold][,[bios|hard]]'
- Od Linuksa 2.0.22 ponowne uruchomienie jest domyślnie
"zimne" (cold). Można również wybrać
stare ustawienie za pomocą 'reboot=warm'. "Zimny" restart
może wymagać zresetowania określonego sprzętu,
może również zniszczyć jeszcze nie zapisane
dane w buforach dysku. "Ciepły" restart może
być szybszy. Domyślnie, ponowne uruchomienie jest
"twarde" (hard), poprzez żądanie pulsowania bitu 0
na linii resetu kontrolera klawiatury, lecz istnieje przynajmniej jeden
typ płyt głównych, z którym to nie
działa. Opcja 'reboot=bios' może w zamian przeskoczyć
przez BIOS.
- 'nosmp' i 'maxcpus=N'
- Tylko gdy zdefiniowano __SMP__. Opcja wiersza polecenia 'nosmp' lub
'maxcpus=0' wyłączy całkowicie aktywację SMP,
natomiast opcja 'maxcpus=N' ograniczy maksymalną liczbę
aktywowanych procesorów w trybie SMP do N.
Argumenty rozruchowe do użycia przez deweloperów
jądra
- 'debug'
- Komunikaty jądra są przekazywane do demona (np.
klogd(8) lub podobnego), tak że mogą zostać
zapisane na dysku. Wiadomości o priorytetach powyżej
console_loglevel są także wypisywane na konsoli
(informacje na temat poziomów priorytetów zawiera
syslog(2)). Domyślnie console_loglevel jest ustawiona
na logowanie wszystkiego co ważniejsze niż
KERN_DEBUG. Ten argument rozruchowy dodatkowo nakazuje wypisywanie
wiadomości o priorytecie KERB_DEBUG.. Poziom logowania
konsoli można również ustawić podczas pracy
systemu dzięki plikowi /proc/sys/kernel/printk (opisanemu w
syslog(2)), operacji syslog(2)
SYSLOG_ACTION_CONSOLE_LEVEL lub dmesg(8).
- 'profile=N'
- Możliwe jest włączenie funkcji profilowania
jądra, aby dowiedzieć się na co jądro
zużywa cykle procesora. Profilowanie jest włączane,
za pomocą ustawienia zmiennej prof_shift na
wartość niezerową. Można to zrobić
podając CONFIG_PROFILE w chwili kompilacji lub
używając opcji 'profile='. Wartość
prof_shift będzie wynosić N, jeśli zostanie
podana lub CONFIG_PROFILE_SHIFT, gdy poda się ją, lub
2 - wartość domyślną.
Ważność tej zmiennej jest taka, że daje ona
rozdrobnienie profilowania: za każdym cyknięciem zegara,
jeśli system wykonywał kod jądra, licznik jest
zwiększany:
-
profile[address >> prof_shift]++;
- Surowe informacje profilowania można odczytać z
/proc/profile. Prawdopodobnie będzie trzeba
użyć narzędzia takiego jak readprofile.c, aby je
uporządkować. Zapis do /proc/profile wyczyści
liczniki.
Argumenty rozruchowe do użytku z ramdyskiem
(Only if the kernel was compiled with CONFIG_BLK_DEV_RAM.)
In general it is a bad idea to use a ramdisk under Linux—the system
will use available memory more efficiently itself. But while booting, it is
often useful to load the floppy contents into a ramdisk. One might also have
a system in which first some modules (for filesystem or hardware) must be
loaded before the main disk can be accessed.
- W Linuksie 1.3.48, obsługa ramdysku uległa całkowitej
zmianie. Wcześniej, pamięć była alokowana
statycznie i istniał parametr 'ramdisk=N', który
określał jego rozmiar. Mogło to również
służyć do ustawienia obrazu jądra w czasie
kompilacji. Obecnie, ramdysk używa buforów i
powiększa się w sposób dynamiczny. Wiele informacji o
bieżącej konfiguracji ramdysku zawiera plik
źródeł jądra
Documentation/blockdev/ramdisk.txt (w starszych jądrach
Documentation/ramdisk.txt).
- Są cztery parametry: dwa logiczne i dwa całkowite.
- 'load_ramdisk=N'
- Jeśli N=1 - ładuje ramdysk, przy N=0 nie ładuje
ramdysku (tak jest domyślnie).
- 'prompt_ramdisk=N'
- Jeśli N=1 - prosi o włożenie dyskietki (tak jest
domyślnie), jeśli N=0 - nie prosi (dlatego parametr ten
nigdy nie jest potrzebny).
- 'ramdisk_size=N' lub (przestarzałe) 'ramdisk=N'
- Ustawia maksymalny rozmiar ramdysków na N kB. Domyślny
wynosi 4096 (4 MB).
- 'ramdisk_start=N'
- Ustawia startowy numer bloku (przesunięcie na dyskietce, gdzie
ramdysk się rozpoczyna) na N. Jest to potrzebne w przypadku, gdy
ramdysk znajduje się za obrazem jądra.
- 'noinitrd'
- Tylko gdy jądro zostało skompilowane z
CONFIG_BLK_DEV_RAM i CONFIG_BLK_DEV_INITRD. Obecnie,
można skompilować jądro tak, aby
używało initrd. Gdy ta funkcja jest włączona,
proces rozruchowy załaduje jądro i początkowy
ramdysk; następnie jądro konwertuje initrd do
"normalnego" ramdysku, który jest montowany w trybie do
odczytu i zapisu, jako urządzenie główne;
następnie wykonywane jest /linuxrc; później
montowany jest "rzeczywisty" główny system
plików, a system plików initrd jest przenoszony do
/initrd; na końcu wykonywana jest zwykła sekwencja
rozruchowa (np. wywołanie /sbin/init).
- For a detailed description of the initrd feature, see the kernel source
file Documentation/admin-guide/initrd.rst (or
Documentation/initrd.txt before Linux 4.10).
- Opcja 'noinitrd' mówi jądru, że choć
zostało skompilowane w celu działania z initrd, to nie
powinno przechodzić przez powyższe kroki, lecz
pozostawić dane initrd w /dev/initrd. To urządzenie
może być użyte jedynie jednokrotnie: dane są
zwalniane w chwili, gdy ostatni proces, który je
używał zamknie /dev/initrd.
Ogólne pojęcia w tej sekcji:
iobase -- pierwszy port I/O, który zajmuje host
SCSI. Są one podawane w notacji heksadecymalnej i zazwyczaj
leżą w zakresie od 0x200 do 0x3ff.
irq -- przerwanie sprzętowe, które
wykorzystuje karta. Prawidłowe wartości zależą
od rozpatrywanej karty, lecz zwykle są to 5, 7, 9, 10, 11, 12 i 15.
Inne wartości są zwykle używane w peryferiach takich
jak dyski twarde IDE, stacje dysków, porty szeregowe, itp.
scsi-id -- identyfikator, którego adapter
używa do identyfikowania siebie na szynie SCSI. Tylko niektóre
adaptery umożliwiają zmianę tej wartości, jako
że większość ma ją trwale ustaloną
wewnątrz. Częstą wartością
domyślną jest 7, lecz zestawy Seagate i Future Domain TMC-950
używają 6.
parity -- określa, czy adapter SCSI oczekuje od
załączonych urządzeń dostarczania
wartości parzystości przy wymianach informacji. Podanie
jedynki oznacza, że sprawdzanie parzystości jest
włączone, a zero ją wyłącza. Znowu jednak
nie wszystkie adaptery przyjmują wybranie zachowania
parzystości podczas rozruchu.
- 'max_scsi_luns=...'
- A SCSI device can have a number of 'subdevices' contained within itself.
The most common example is one of the new SCSI CD-ROMs that handle more
than one disk at a time. Each CD is addressed as a 'Logical Unit Number'
(LUN) of that particular device. But most devices, such as hard disks,
tape drives, and such are only one device, and will be assigned to LUN
zero.
- Niektóre słabo dopracowane urządzenia SCSI nie
mogą obsłużyć sondowania LUN nierównego
zeru. Dlatego, jeśli flaga kompilacji CONFIG_SCSI_MULTI_LUN nie
była ustawiona, nowe jądra sondują domyślnie
tylko LUN zero.
- Aby podać ilość sondowanych LUN-ów podczas
rozruchu, wpisuje się 'max_scsi_luns=n' jako argument rozruchowy,
gdzie n jest liczbą między 1 a 8. Aby zapobiec problemom
opisanym wyżej, używa się n=1 aby zapobiec
denerwowaniu nieprawidłowych urządzeń.
- Konfiguracja
napędu kasetowego SCSI
- Niektóre parametry konfiguracji sterownika kasetowego SCSI
mogą być osiągnięte przez użycie
następującego:
-
st=buf_size[,write_threshold[,max_bufs]]
- Pierwsze dwie liczby są podane w jednostkach kilobajtowych.
Domyślna wartość buf_size to 32k B, a
maksymalna wartość to 16384 kB. Wartość
write_threshold jest wartością przy której
bufor jest przekazywany na kasetę z domyślną
wartością 30 kB. Maksymalna liczba buforów
zmienia się z liczbą wykrytych napędów, a
domyślną wartością jest 2. Przykładowym
użyciem może być:
-
st=32,30,2
- Szczegóły można znaleźć w pliku
Dcumentation/scsi/st.txt (lub drivers/scsi/README.st w
starszych jądrach) w źródłach jądra
Linux.
- Parametry
sterownika dysków/CD-ROM-ów IDE
- The IDE driver accepts a number of parameters, which range from disk
geometry specifications, to support for broken controller chips.
Drive-specific options are specified by using 'hdX=' with X in
'a'–'h'.
- Opcje niespecyficzne napędom są przekazywane z przedrostkiem
"hd=". Proszę zauważyć, że
używanie przedrostka specyficznego dyskowi dla niespecyficznej
opcji także zadziała, a opcja zostanie zaaplikowana tak jak
oczekiwano.
- Proszę zauważyć także, że
"hd=" może być użyty w odniesieniu do
następnego niepodanego napędu w sekwencji (a, ..., h). W
następujących omówieniach, opcja "hd="
będzie cytowana dla zwięzłości. Proszę
zapoznać się z plikiem Documentation/ide/ide.txt (lub
Documentation/ide.txt w starszych jądrach albo
drivers/block/README.ide w archaicznych jądrach) w
źródłach jądra Linux, aby dowiedzieć
się więcej.
- Opcje
'hd=cyls,heads,sects[,wpcom[,irq]]'
- Tych opcji używa się do przekazywania fizycznej geometrii
dysku. Jedynie pierwsze trzy wartości są wymagane.
Wartości cylinder/head/sectors będą tymi
używanym przez fdisk. Wartość wpcom (write
precompensation) jest ignorowana dla dysków IDE. Podana
wartość IRQ będzie używana dla interfejsu, na
którym rezyduje napęd i nie jest tak naprawdę
parametrem specyficznym napędowi.
- Opcja
'hd=serialize'
- Chip CMD-640 interfejsu dual IDE jest wadliwy; zaprojektowano go tak,
że gdy napędy z drugiego interfejsu są używane
równocześnie z napędami pierwszego, dane
ulegają zniszczeniu. Używanie tej opcji mówi
sterownikowi by upewnił się, że oba interfejsy nigdy
nie są używane naraz.
- Opcja
'hd=noprobe'
- Nie sonduje danego dysku. Np.
-
hdb=noprobe hdb=1166,7,17
- wyłączy sondowanie, lecz wciąż poda
geometrię dysku, więc będzie zarejestrowany jako
prawidłowe urządzenie blokowe, a więc będzie
się nadawać do użytku.
- Opcja
'hd=nowerr'
- Niektóre napędy czasami mają trwale
załączony bit WRERR_STAT. To usprawnia
działanie tych wadliwych urządzeń.
- Opcja
'hd=cdrom'
- Mówi to sterownikowi IDE, że w miejscu normalnego dysku IDE
mamy CD-ROM typu ATAPI. W większości wypadków, CD-ROM
jest wykrywany automatycznie, lecz jeśli tak nie jest, to to
powinno pomóc.
- Opcje standardowego
sterownika dysków ST-506 ('hd=')
- Standardowy sterownik dysków może przyjmować
argumenty geometrii dla dysków podobnie do sterownika IDE.
Proszę zauważyć jednak, że oczekuje on jedynie
trzech wartości (C/H/S) -- więcej lub mniej spowoduje ciche
zignorowanie podanego polecenia. Podobnie też, przyjmuje jedynie
"hd=" jako argument, np. "hda=" jest tu
nieprawidłowe. Format jest następujący:
-
hd=cylindry,głowice,sektory
- Jeśli są tam zainstalowane dwa dyski, powyższe jest
powtarzane z parametrami geometrii dla drugiego dysku.
Różne sterowniki używają
różnych parametrów, ale wszystkie przynajmniej
dzielą IRQ, wartość bazowego portu I/O i nazwę.
W najogólniejszej formie wygląda to tak:
ether=irq,iobase[,param_1[,param_2,...param_8]],nazwa
Pierwszy nienumeryczny argument jest pobierany jako nazwa.
Wartości param_n (jeśli mają zastosowanie) zwykle
mają różne znaczenia dla różnych
kart/sterowników. Typowe wartości param_n są
używane do podawania rzeczy takich jak adres pamięci
dzielonej, wyboru interfejsu, kanału DMA i podobnych.
Najpopularniejszym wykorzystaniem tego parametru jest wymuszenie
sondowania drugiej karty ethernetowej, jako że domyślnie
sondowana jest tylko jedna. Można tego dokonać prostym:
ether=0,0,eth1
Proszę zauważyć, że wartości
zera dla IRQ i bazy I/O w powyższym przykładzie
mówią sterownikowi, by je wysondował automatycznie.
Ethernet-Howto zawiera rozległą dokumentację
o używaniu wielorakich kart i o specyficznych implementacjach
karta/sterownik wartości param_n. Zainteresowani powinni
odnieść się do odpowiedniej sekcji w tamtym
dokumencie.
Istnieje wiele opcji sterownika stacji dyskietek i wszystkie
są wymienione w Documentation/blockdev/floppy.txt (lub
Documentation/floppy.txt w starszych jądrach albo
drivers/block/README.fd w archaicznych jądrach) w
źródle jądra Linux. Tam można
znaleźć szczegółowe informacje.
Sterownik dźwięku może także
akceptować argumenty rozruchowe do przesłonięcia
wartości wkompilowanych. Nie jest to zalecane i jest raczej
złożone. Jest to opisane w pliku w
źródłach jądra Linux
Documentation/sound/oss/README.OSS (drivers/sound/Readme.linux
w przypadku starszych wersji jądra). Przyjmuje parametr rozruchowy
postaci:
sound=urządzenie1[,urządzenie2[,urządzenie3...[,urządzenie10]]]
gdzie każda wartość urządzenieN jest
formatu 0xTaaaId, a bajty są użyte
następująco:
T - rodzaj urządzenia: 1=FM, 2=SB, 3=PAS, 4=GUS, 5=MPU401,
6=SB16, 7=SB16-MPU401
aaa - heksadecymalnie zapisany adres I/O.
I - heksadecymalnie zapisana linia przerwań (np. 10=a,
11=b, ...)
d - kanał DMA.
Jak widać, jest to całkiem bałaganiarskie i
lepiej wkompilować swoje własne wartości do sterownika.
Używanie argumentu "sound=0" wyłączy
sterownik dźwięku.
- 'lp='
-
Składnia:
-
lp=0
lp=auto
lp=reset
lp=port[,port...]
- Można przekazać sterownikowi drukarki, który port ma
użyć, a którego nie. To ostatnie przydaje się,
jeśli nie chce się aby sterownik drukarki
zajął wszystkie dostępne porty
równoległe, dzięki czemu inne sterowniki (np. PLIP,
PPA) mogą ich użyć w zamian.
- Format argumentu to wiele nazw portów. Np. lp=none,parport=0
użyje pierwszego portu równoległego do lp1 i
wyłączy lp0. Aby wyłączyć cały
sterownik drukarki, można użyć lp=0.