NAZWA
bootparam - wprowadzenie do parametrów rozruchowych jądra Linux
OPIS
The Linux kernel accepts certain ’command-line options’ or ’boot time parameters’ at the moment it is started. In general, this is used to supply the kernel with information about hardware parameters that the kernel would not be able to determine on its own, or to avoid/override the values that the kernel would otherwise detect.
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.
Lista
argumentów
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).
Większość sortowania jest zakodowana w pliku źródłowym jądra init/main.c. Najpierw jądro sprawdza czy argument jest jednym ze specjalnych argumentów "root=", "ro", "rw", lub "debug". Znaczenie tych specjalnych argumentów jest opisane dalej w tym dokumencie.
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.
Ogólne
argumenty nieprzeznaczone do konkretnego urządzenia
’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".
Główne urządzenie można określić symbolicznie lub numerycznie. Forma symboliczna ma postać /dev/XXYN, gdzie XX określa typ urządzenia (np. ’hd’ do twardych dysków zgodnych z ST-506, z Y z zakresu ’a’-’d’; ’sd’ do dysków zgodnych z SCSI, z Y z zakresu ’a’-’e’), Y jest literą lub numerem napędu, a N numerem (dziesiętnie) partycji na tym urządzeniu.
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
Tylko jeśli jądro zostało skompilowane z
CONFIG_BLK_DEV_RAM. Generalnie, złym
pomysłem jest używanie ramdysku w Linuksie -
system sam będzie korzystał z dostępnej
pamięci bardziej wydajnie. Jednak w trakcie rozruchu
często przydatne okazuje się załadowanie
zawartości dyskietki na ramdysk. Może się
również okazać, że pewne moduły
(np. do systemu plików lub sprzętu) muszą
zostać załadowane przed uzyskaniem dostępu do
głównego dysku.
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’
Set the maximal size of the ramdisk(s) to N kB. The default is 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.
Argumenty
rozruchowe do urządzeń SCSI
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=...’
Urządzenie SCSI może mieć wiele "podurządzeń" zawartych w nim samym. Najpopularniejszym przykładem jest jeden z nowych CD-ROM-ów SCSI, który obsługuje naraz więcej niż jeden dysk. Każdy CD jest adresowany jako "Logical Unit Number" (LUN) (ang. logiczny numer jednostki) tego urządzenia. Jednak większość urządzeń takich jak twarde dyski, napędy kasetowe i inne jest pojedynczymi urządzeniami z LUN równym 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]]
The first two numbers are specified in units of kB. The default buf_size is 32k B, and the maximum size that can be specified is a ridiculous 16384 kB. The write_threshold is the value at which the buffer is committed to tape, with a default value of 30 kB. The maximum number of buffers varies with the number of drives detected, and has a default of two. An example usage would be:
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.
Dyski twarde
Parametry sterownika dysków/CD-ROM-ów
IDE
Sterownik IDE przyjmuje wiele parametrów, od specyfikacji geometrii dysku do wsparcia dla wadliwych chipów kontrolera. Specyficzne opcje dysku mogą być podawane poprzez użycie "hdX=" z X pomiędzy "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.
Urządzenie
ethernetowe
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.
Sterownik
stacji dyskietek
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
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 - interrupt line in hex (i.e., 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.
Sterownik drukarki wierszowej
’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.
ZOBACZ TAKŻE
For up-to-date information, see the kernel source file Documentation/admin-guide/kernel-parameters.txt.
O STRONIE
Angielska wersja tej strony pochodzi z wydania 5.07 projektu Linux man-pages. Opis projektu, informacje dotyczące zgłaszania błędów oraz najnowszą wersję oryginału można znaleźć pod adresem https://www.kernel.org/doc/man-pages/.
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys [AT] dione.pl> i Michał Kułach <michal.kulach [AT] gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres <manpages-pl-list [AT] lists.net>.