Jedro Linuxa, HOWTO Brian Ward, bri@cs.uchicago.edu v1.0, 5. junij 1999 To je slovenski prevod datoteke Kernel-HOWTO, podrobnega vodnika nas tavitev jedra operacijskega sistema Linux, prevajanja, nadgradnje in odpravljanja problemov za sisteme s procesorji ix86. ______________________________________________________________________ Kazalo 1. Uvod 1.1 Najprej preberite tole! (In to res mislim!) 1.2 O stilu 2. Pomembna vpra¹anja in njihovi odgovori 2.1 Kaj pravzaprav sploh poène jedro? 2.2 Zakaj bi si ¾eleli nadgraditi svoje jedro? 2.3 Katero strojno opremo podpirajo nova jedra? 2.4 Katero razlièico prevajalnika gcc in knji¾nice libc potrebujem? 2.5 Kaj je nalagalni modul (loadable module)? 2.6 Koliko prostora potrebujem na disku? 2.7 Kako dolgo traja? 3. Kako zares sestaviti jedro 3.1 Nabava izvorne kode 3.2 Odpakiranje izvorne kode 3.3 Nastavitev jedra 3.3.1 Kernel math emulation (Processor type and features) 3.3.2 Enhanced (MFM/RLL) disk and IDE disk/cdrom support (Block Devices) 3.3.3 Networking support (General Setup) 3.3.4 System V IPC (General Setup) 3.3.5 Processor family (Processor type and features) 3.3.6 SCSI support 3.3.7 Network device support 3.3.8 Filesystems 3.3.8.1 Vendar jaz ne vem, katere datoteène sisteme potrebujem! 3.3.9 Character devices 3.3.10 Sound 3.3.11 Druge nastavitvene mo¾nosti 3.3.12 Kernel hacking 3.4 Pa zdaj? (Datoteka Makefile) 4. Prevajanje jedra 4.1 Èi¹èenje in urejanje odvisnosti 4.2 Èas za prevajanje 4.3 Drugi cilji ,,make`` 4.4 Namestitev jedra 5. Popravljanje jedra 5.1 Uporaba popravka 5.2 Èe se kje zalomi 5.3 Kako se znebite datotek .orig 5.4 Drugi popravki 6. Dodatni paketi 6.1 kbd 6.2 util-linux 6.3 hdparm 6.4 gpm 7. Nekatere pasti 7.1 make clean 7.2 Velika ali poèasna jedra 7.3 Vzporedna vrata ne delujejo/tiskalnik ne deluje 7.4 Jedro se ne prevede 7.5 Novo jedro se noèe zagnati 7.6 Pozabili ste pognati LILO, ali pa se sistem sploh ne za¾ene 7.7 Izpi¹e ,,warning: bdflush not running`` 7.8 Mojega CD-ROM-a IDE/ATAPI ne preprièam, da bi deloval 7.9 Izpisuje èudne reèi o zastarelih zahtevah za usmerjanje (obsolete routing requests) 7.10 Po¾arni zid ne deluje v 1.2.0 7.11 ,,Not a compressed kernel Image file`` (datoteka s sliko jedra ni komprimirana) 7.12 Te¾ave z zaslonskim terminalom po nadgradnji na 1.3.x 7.13 Po nadgradnji jedra ne morem prevajati zadev 7.14 Poveèanje omejitev 8. Opomba o nadgradnji na razlièice 2.0.x, 2.2.x 9. Moduli 9.1 Namestitev modulskih pripomoèkov 9.2 Moduli, distribuirani poleg jedra 10. Nasveti in triki 10.1 Preusmeritev izhoda ukazov make in patch 10.2 Pogojna in¹talacija jedra 10.3 Nadgradnje jedra 11. Ostali HOWTO-ji, ki bi lahko bili uporabni 12. Razno 12.1 Avtor 12.2 Narediti 12.3 Prispevki 12.4 Pravice raz¹irjanja, licenca, in te stvari ______________________________________________________________________ 1. Uvod Naj sploh berete ta dokument? No, poglejte, èe imate katerega od na¹tetih simptomov: * ,,Aaa! Tale paket wizzo-46.5.6 pravi, da potrebuje jedro izdaje vsaj 2.8.193, jaz pa imam ¹e vedno izdajo 1.0.9!`` * V enem novej¹ih jeder je gonilnik za neko napravo, ki ga preprosto morate imeti. * Nimate najmanj¹ega pojma, kako prevesti jedro. * ,,Je stvar v datoteki README res vsa zgodba?`` * Pri¹li ste, poskusili, ni delovalo. * Potrebujete nekaj, kar bi dali ljudem, ki vas muèijo s pro¹njami, da namesto njih namestite njihova jedra. 1.1. Najprej preberite tole! (In to res mislim!) Nekateri primeri v tem spisu predpostavljajo, da imate GNU tar, find in xargs. Ti so kar standardni; to vam ne bi smelo povzroèati preglavic. Predvidevam tudi, da poznate datoteèno strukturo va¹ega sistema; èe je ne, je pomembno, da imate pri roki izpisano kopijo izhoda ukaza mount med normalnim delovanjem sistema (ali izpis datoteke /etc/fstab, èe ga znate brati). Te informacije so pomembne in se ne spreminjajo, razen, èe razparcionirate svoj disk, dodate novega, ponovno namestite svoj sistem, ali kaj podobnega. Zadnja stabilna razlièica jedra je bila v èasu pisanja tega spisa 2.2.9, torej se sklicevanja in primeri nana¹ajo na to izdajo. Èeprav posku¹am narediti ta spis karseda neodvisen od razlièice, se jedro nenehno razvija, torej bo novej¹a razlièica neizogibno vsebovala nekaj sprememb. To vam ne bi smelo povzroèati veèjih te¾av, lahko pa vas malce zmede. Obstajata dve razlièici izvorne kode jedra Linuxa; stabilna (angl. ,,production``) in razvojna (angl. ,,development``). Stabilne izdaje imajo sodo malo ¹tevilo: 1.2.x je bila stabilna, 2.0.x prav tako, in tudi 2.2.x. Ta jedra se smatrajo za najbolj stabilne in razhro¹èene razlièice v èasu njihove izdaje. Razvojna jedra (2.1.x, 2.3.x itd.) so jedra, namenjena preizku¹anju, za ljudi, ki bi radi preizkusili nova in morda zelo hro¹èata jedra. Bili ste opozorjeni! 1.2. O stilu Besedilo, ki je videti takole je nekaj, kar se prika¾e na va¹em zaslonu, ime datoteke ali nekaj, kar lahko neposredno vtipkate, na primer ukaz ali izbire pri ukazu (èe gledate tekstovno razlièico tega spisa, zgornje besedilo ne izgleda niè drugaèe). Ukazi in drugi vnosi so pogosto citirani (z ,, ``), v slovenskem prevodu takole: ,,make config``. 2. Pomembna vpra¹anja in njihovi odgovori 2.1. Kaj pravzaprav sploh poène jedro? Jedro Unixa deluje kot posrednik med va¹imi programi in strojno opremo. Najprej, dela (ali poskrbi za) upravljanje s pomnilnikom za vse tekoèe programe (procese) in poskrbi, da vsi dobijo po¹ten (ali nepo¹ten, èe tako ¾elite) dele¾ ciklov procesorja. Poleg tega daje programom prijazen, precej prenosljiv, vmesnik za pogovor z va¹o strojno opremo. Gotovo ima jedro veè dol¾nosti kot samo ti dve, a najpomembneje je, da poznate ti, osnovni. 2.2. Zakaj bi si ¾eleli nadgraditi svoje jedro? Novej¹a jedra v splo¹nem ponujajo mo¾nost za pogovor z veè vrstami opreme (to se pravi, imajo veè gonilnikov naprav), imajo morda bolj¹e procesno upravljanje, lahko delujejo hitreje kot starej¹e razlièice, so bolj stabilna od starej¹ih razlièic in odpravijo neumne hro¹èe v starej¹ih razlièicah. Veèina ljudi nadgradi jedra, ker ¾elijo gonilnike naprav in popravke hro¹èev. 2.3. Katero strojno opremo podpirajo nova jedra? Preberite Hardware-HOWTO. Kot alternativo lahko pogledate datoteko config.in, v Linuxovi izvorni kodi, lahko pa tudi izveste, ko poskusite ,,make config``. To vam poka¾e vso opremo, ki je podprta v standardni izdaji jedra, a ne vse, kar podpira Linux; veliko pogostih gonilnikov (kot npr. gonilniki za PCMCIA in za nekatere traène enote) je nalagalnih modulov, ki se urejajo in distribuirajo posebej. 2.4. Katero razlièico prevajalnika gcc in knji¾nice libc potrebujem? Linus priporoèa razlièico gcc v datoteki README, prilo¾eni izvorni kodi Linuxa. Èe nimate te razlièice, vam dokumentacija poleg priporoèene razlièice gcc pove, èe morate nadgraditi knji¾nico libc. To ni te¾ko opravilo, pomembno pa je, da sledite navodilom. 2.5. Kaj je nalagalni modul (loadable module)? To so delèki kode jedra, ki niso povezani (vkljuèeni) direktno v jedro. Prevedemo jih posebej in jih lahko vkljuèimo ali odstranimo v delujoèe jedro skoraj kadarkoli. Zaradi njihove fleksibilnosti je to zdaj priporoèen naèin za uporabo doloèenih lastnosti jedra. Mnogi popularni gonilniki, na primer gonilniki za PCMCIA in za traèno enoto QIC-80/40, so nalagalni moduli. 2.6. Koliko prostora potrebujem na disku? Odvisno od va¹e konkretne konfiguracije sistema. Komprimirana izvorna koda Linuxa razlièice 2.2.9 je velika pribli¾no 14 MB. Veèina raèunalnikov jo obdr¾i tudi po odpakiranju. Odpakirana in zgrajena izvorna koda jedra za povpreèno sestavo zasede dodatnih 67 MB. 2.7. Kako dolgo traja? Na novej¹ih strojih traja prevajanje znatno manj èasa kot na starej¹ih; AMD K6-2/300 s hitrim diskom lahko prevede jedro 2.2.x v pribli¾no ¹tirih minutah. Èe pa ¾elite prevesti jedro na starih raèunalnikih Pentium, 486 in 386, bodite pripravljeni èakati, morda ure ali celo dneve ... Èe vas to moti in imate na voljo tudi hitrej¹i stroj, na katerem lahko prevajate, lahko gradite jedro na hitrej¹ih strojih (èe podate pravilna doloèila, èe so va¹i pripomoèki osve¾eni, in tako naprej) in potem prenesete sliko jedra na poèasnej¹i stroj. 3. Kako zares sestaviti jedro 3.1. Nabava izvorne kode Izvorno kodo lahko dobite po anonimnem FTP-ju s stre¾nika ftp.kernel.org v imeniku /pub/linux/kernel/vx.y, kjer je x.y razlièica (npr. 2.2), in kot je bilo ¾e omenjeno, so lahko razvojne razlièice jedra, oznaèene z lihimi konènimi ¹tevilkami, nestabilne. Izvorna koda jedra je navadno oznaèena kot linux-x.y.z.tar.gz, kjer je x.y.z ¹tevilka razlièice. Stre¾niki navadno premorejo tudi datoteke s podalj¹kom .bz2, ki so bile stisnjene s pripomoèkom bzip2 (te datoteke bodo manj¹e, zato bo za njihov prenos potrebno manj èasa). Najbolj¹e bo, èe za prenos uporabite ftp.xx.kernel.org, kjer je xx koda va¹e dr¾ave; v Sloveniji boste tako uporabili ftp.si.kernel.org, v Avstriji ftp.at.kernel.org, v Zdru¾enih dr¾avah Amerike pa ftp.us.kernel.org. 3.2. Odpakiranje izvorne kode Prijavite se kot ,,root`` (ali pa uporabite ukaz su) in s cd spremenite imenik na /usr/src. Èe ste ob prvi namestitvi Linuxa namestili tudi izvorno kodo jedra (veèina jih stori tako), bo tam ¾e imenik ,,linux``, ki vsebuje celotno staro drevo izvorne kode. Èe imate dovolj diskovnega prostora in bi se radi poèutili varno, ohranite ta imenik. Dobra ideja je, da izveste razlièico sistema, ki jo trenutno uporabljate, in ustrezno preimenujete imenik. Trenutno razlièico jedra izveste z ukazom ,,uname -r``. Èe torej ,,uname -r`` pravi ,,1.0.9``, boste preimenovali (z ,,mv``) ,,linux`` v ,,linux-1.0.9``. Èe se poèutite malo bolj lahkomiselne, preprosto pobri¹ite celoten imenik. V vsakem primeru se preprièajte, da v /usr/src nimate imenika ,,linux``, preden odpakirate celotno izvorno kodo. Zdaj v imeniku /usr/src odpakirajte izvorno kodo z ukazom ,,tar zxpvf linux-x.y.z.tar.gz`` (èe imate samo datoteko .tar brez konènega .gz pa z ukazom ,,tar xpvf linux-x.y.z.tar``). Na zaslonu boste videli izpisane datoteke izvorne kode. Ko tar konèa, boste imeli nov imenik /usr/src/linux. Naredite cd v linux in preberite datoteko README. Nekje bo razdelek z naslovom ,,INSTALLING the kernel`` (,,NAMESTITEV jedra``). Upo¹tevajte navodila, kjer je to primerno - simbolne povezave, ki morajo biti na pravih mestih, brisanje ostalih datotek .o itd. Èe imate datoteko .bz2 in pripomoèek bzip2 (veè o tem preberite na <http://www.muraroa.demon.co.uk/>), naredite tole: bz2cat linux-x.y.z.tar.bz2 | tar xvf - 3.3. Nastavitev jedra Opomba: Nekaj tega je reiteracija/razjasnitev podobnega razdelka v Linusovi datoteki README. Ukaz ,,make config`` v imeniku /usr/src/linux po¾ene nastavitveni skript, ki vas vpra¹a veliko vpra¹anj. Potrebuje ukazno lupino bash, zato preverite, èe ta obstaja v /bin/bash, /bin/sh, ali $BASH. Verjetno boste raje uporabljali katero od alternativ ukazu ,,make config``. Tisti, ki poganjate grafièni sistem X, lahko poskusite ,,make xconfig``, èe imate name¹èen programski paket Tk (,,klik-o- rama`` - Nat). ,,make menuconfig`` je za tiste, ki imate (n)curses in bi radi imeli tekstovne menuje. Ta dva vmesnika imata bistveno prednost pred standardnim: èe zamoèite in med konfiguracijo izberete napaèno izbiro, lahko greste nazaj in zadevo popravite. Z uporabo ,,make menuconfig`` ali ,,make xconfig`` bodo nastavitvene izbire urejene hierarhièno. Pripravljeni ste na odgovarjanje nekaj vpra¹anj, navadno z ,,y`` (da) ali ,,n`` (ne). Gonilnik naprav imajo tipièno izbiro ,,m``. Ta pomeni ,,modul``, se pravi, da ga bo sistem prevedel, ne pa tudi vkljuèil neposredno v jedro. Na voljo bo kot nalagalni modul. Bolj duhovit naèin za opis te izbire bi bil ,,mogoèe``. Nekatere bolj oèitne in ne-kritiène izbire tukaj niso opisane; glejte razdelek ``,,Druge nastavitvene izbire``'' za kratek opis nekaterih posameznih izbir. Pri ,,make menuconfig`` s presledkom spreminjate izbiro. V jedrih 2.0.x in poznej¹ih je na voljo tudi izbira ,,?``, ki poda kratek opis posameznega nastavitvenega parametra. Ta informacija je verjetno najbolj sve¾a. Tukaj je seznam nekaterih najpomembnej¹ih odlik, s hierarhijo, v kateri jih najdete, in kratkim opisom. 3.3.1. Kernel math emulation (Processor type and features) [ Emulacija matematiènih operacij v jedru (Vrsta in lastnosti procesorja) ] Èe nimate matematiènega koprocesorja (imate le goli procesor 386 ali 486SX), morate tukaj reèi ,,y``. Èe imate koprocesor in reèete ,,y``, ne skrbite preveè - koprocesor se bo ¹e vedno uporabljal, emulacija pa ignorirala. Za vsak napol sodoben stroj bo odgovor ,,ne``, a ne skrbite, èe boste pomotoma rekli ,,da``; èe emulacija ni potrebna, se ne uporablja. 3.3.2. Enhanced (MFM/RLL) disk and IDE disk/cdrom support (Block Devices) [ Podpora izbolj¹anim diskom (MFM/RLL) in diskom/CD-ROM-om tipa IDE (Blokovne naprave) ] Verjetno morate to podpreti; pomeni, da bo jedro podpiralo standardne trde diske, ki jih najdemo v osebnih raèunalnikih veèine ljudi. Ta gonilnik ne vkljuèuje pogonov SCSI; v nastavitvah pridejo ti na vrsto kasneje. Nastavitveni program vas bo nato vpra¹al ali ¾elite podporo le starim diskom (,,old disk-only``) in novim diskom IDE (,,new IDE``). Izbrati morate eno od teh mo¾nosti; glavna razlika je v tem, da stari gonilnik podpira le dva diska na enem vmesniku, medtem ko novi podpira drugi vmesnik in CD-ROM-e IDE/ATAPI. Novi gonilnik je 4 KB veèji od starej¹ega in naj bi bil ,,izpopolnjen``, kar pomeni, da poleg vsebovanja razliènega ¹tevila hro¹èev verjetno tudi izbolj¹a obna¹anje va¹ega diska, posebej, èe imate novej¹o strojno opremo tipa EIDE. 3.3.3. Networking support (General Setup) [ Omre¾na podpora (Splo¹ne nastavitve) ] Tukaj boste zelo verjetno rekli ,,y``, saj ¾elite, da bo va¹ raèunalnik omre¾en na Internet ali da bo dostopal vanj preko SLIP, PPP, term itd., torej s klicnim dostopom. Vendar, ker veliko paketov (kot na primer sistem X window) potrebuje omre¾no podporo tudi, èe va¹ raèunalnik ne ¾ivi v pravem omre¾ju, boste tukaj vseeno rekli ,,y``. Pozneje vas bo program vpra¹al, èe ¾elite omre¾no podporo protokolu TCP/IP; spet boste odgovorili z ,,y``, èe niste absolutno preprièani v nasprotno. 3.3.4. System V IPC (General Setup) [ Medprocesna komunikacija Systema V (Splo¹ne nastavitve) ] Ena najbolj¹ih definicij IPC (Interprocess Communication, medprocesna komunikacija) je v slovarèku knjige Programming Perl: ,,vèasih se mora proces le pogovoriti z drugim procesom``. Ne preseneèa nas torej, da nekateri perlovski programerji dovoljujejo procesom, da se pogovarjajo drug z drugim, kot to poène tudi veliko drugih paketov (najbolj znan je DOOM), torej izbira ,,n`` ni dobra ideja, razen, èe toèno veste, kaj poènete. 3.3.5. Processor family (Processor type and features) [ Procesorska dru¾ina (Vrsta in lastnosti procesorja) ] (v starej¹ih jedrih: uporabite zastavico -m486 za optimizacije za 486) Vèasih je to vkljuèilo posebne optimizacije za doloèen procesor; jedro je teklo povsem dobro na ostalih èipih, a je bilo morda malo veèje. V novej¹ih jedrih pa to ni veè res, zato vnesite procesor, za katerega prevajate jedro. Jedro za ,,386`` bo delovalo na vseh strojih. 3.3.6. SCSI support [ Podpora SCSI ] Èe imate naprave tipa SCSI, recite ,,y``. Vpra¹ani boste po nadaljnih podatkih, kot je podpora CD-ROM-om, diskom in katere vrste vmesnik SCSI imate. Za veè podrobnosti preberite SCSI-HOWTO. 3.3.7. Network device support [ Podpora omre¾nim napravam ] Èe imate mre¾no kartico ali bi radi uporabljali SLIP, PPP ali paralelni vmesnik za dostop na Internet, recite ,,y``. Nastavitveni skript vas bo vpra¹al o tipu kartice in protokolu, ki ga boste uporabljali. 3.3.8. Filesystems [ Datoteèni sistemi ] Nastavitveni skript vas bo vpra¹al, èe ¾elite imeti naslednje datoteène sisteme podprte v jedru: * Standard (minix) - novej¹e distribucije ne delajo datoteènih sistemov minix in veliko ljudi jih ne uporablja, a mogoèe je vseeno dobra zamisel, da bi jih podprli. Nekateri programi za izdelavo ,,re¹ilnih diskov`` jih uporabljajo in veliko disket je formatiranih kot minix, saj je minixov datoteèni sistem na disketah manj mukotrpen. * Second extended - To je standardni datoteèni sistem Linuxa. Skoraj zagotovo ga imate in morate reèi ,,y``. * msdos - Èe ¾elite uporabljate particije MS-DOS-a na trdem disku ali name¹èati dosovske formatirane diskete, recite ,,y``. Dostopnih je ¹e mnogo drugih tujih datoteènih sistemov. * /proc - (zamisel iz Bell Labs, domnevam). Datoteènega sistema /proc se ne ustvari na disku; to je datoteèni vmesnik do jedra in procesov. Veliko izpisovalcev procesov (npr. ,,ps``) ga uporablja. Poskusite kdaj ,,cat /proc/meminfo`` ali ,,cat /proc/devices``. Nekatere ukazne lupine (posebej rc) uporabljajo /proc/self/fd (na drugih sistemih znan kot /dev/fd) za vhodno/izhodne (V/I) operacije. Skoraj gotovo morate reèi ,,y``; veliko pomembnih orodij za Linux je odvisnih od tega. * NFS - Èe va¹ stroj biva na omre¾ju in ¾elite uporabljati datoteène sisteme, ki le¾ijo na drugih sistemih z NFS, recite ,,y``. * ISO9660 - Najdete ga na veèini CD-ROM-ov. Èe imate pogon za CD-ROM in ga ¾elite uporabljati v Linuxu, recite ,,y``. 3.3.8.1. Vendar jaz ne vem, katere datoteène sisteme potrebujem! Prav, napi¹ite ,,mount``. Izpis bo pribli¾no tak¹en: blah:# mount /dev/hda1 on / type ext2 (defaults) /dev/hda3 on /usr type ext2 (defaults) none on /proc type proc (defaults) /dev/fd0 on /mnt type msdos (defaults) Poglejte v vsako vrstico; beseda poleg ,,type`` je ime datoteènega sistema. V tem primeru sta moja datoteèna sistema / in /usr tipa ,,second extended``, uporabljam /proc in name¹èena je disketa z datoteènim sistemom msdos (bljak). Poskusite tudi ,,cat /proc/filesystems``, èe imate trenutno vklopljen /proc; to bo izpisalo va¹e trenutne datoteène sisteme v jedru. Namestitev redko uporabljanih, ne-nujnih datoteènih sistemov lahko povzroèi napihnjeno jedro; glejte razdelek ``o modulih'' za naèin, kako se temu izognete in razdelek ``,,Velika ali poèasna jedra``'' o tem, zakaj je napihnjeno jedro neza¾eljen pojav. 3.3.9. Character devices [ Znakovne naprave ] Tukaj vkljuèite gonilnike za va¹ tiskalnik (pravzaprav, tiskalnik na vzporednih vratih), mi¹ko, priklopljeno na vrata busmouse ali PS/2 (veliko notesnikov uporablja mi¹kovni protokol PS/2 za njihove vgrajene sledilne kroglice), nekatere traène enote in druge tak¹ne ,,znakovne`` naprave. Recite ,,y``, èe je tako prav. Opomba: gpm je program, ki vam omogoèa uporabo mi¹ke izven sistema X window za izrezovanje in prilepljanje besedila med navideznimi zasloni. Dobro je, èe imate mi¹ko na zaporednih vratih, saj ta lepo shaja z Okni X, za druge mi¹ke pa morate uporabiti posebne trike. 3.3.10. Sound [ Zvok ] Èe imate veliko ¾eljo sli¹ati, kako biff laja, recite ,,y``, in nastavitvenemu programu lahko poveste vse o va¹i zvoèni kartici. (Opomba glede nastavitve zvoène kartice: ko vas vpra¹a, èe ¾elite namestiti popolno razlièico gonilnikov, lahko reèete ,,n`` in prihranite nekaj pomnilnika jedra z izbiro le tistih lastnosti, ki se vam zdijo potrebne.) Èe zares potrebujete dobro podporo zvoène kartice, poglejte proste gonilnike na naslovu <http://www.linux.org.uk/OSS/> in komercialni Open Sound System na <http://www.opensound.com/>. 3.3.11. Druge nastavitvene mo¾nosti Vse nastavitvene izbire tukaj niso na¹tete, saj se prepogosto spreminjajo ali so same po sebi razvidne (na primer, podpora 3Com 3C509 za toèno to mre¾no kartico). Obstaja precej obse¾en seznam vseh izbir (in naèin, kako jih uvrstimo v skript Configure); projekt je zaèel in vzdr¾eval Axel Boldt (boldt@math.ucsb.edu) in je dostopen kot pomoè na zvezi. Na voljo je tudi kot ena sama velika datoteka Documentation/Configure.help v izvorni kodi jedra od razlièice Linuxa 2.0 naprej. 3.3.12. Kernel hacking [ Hekanje jedra ] Iz Linusove datoteke README: Izbira ,,hekanje jedra`` navadno vodi v veèje in poèasnej¹e jedro (ali v oboje) in lahko naredi jedro manj stabilno tako, da prekodira nekatere rutine, ki aktivno posku¹ajo sesuti slabo kodo in s tem najti jedrne probleme (kmalloc()). Torej boste, èe ste navadni smrtnik, tukaj odgovorili z ,,n``. 3.4. Pa zdaj? (Datoteka Makefile ) Ko opravite nastavljanje, vam sporoèilo pove, da je jedro nastavljeno in da naj pogledate ,,najvi¹je-nivojsko datoteko Makefile za dodatno nastavitev`` itd. Poglejte torej Makefile. Verjetno vam je ne bo treba spreminjati, a nikoli ne ¹kodi, èe pogledate. Po namestitvi novega jedra lahko spreminjate izbire tudi z ukazom ,,rdev``. Èe se ob ogledu te datoteke poèutite izgubljeni, jo paè pozabite. 4. Prevajanje jedra 4.1. Èi¹èenje in urejanje odvisnosti Ko konfiguracijski skript konèa z delom, vam pove, da napravite ,,make dep`` in (morda) ,,clean``. Torej napi¹ete ,,make dep``. To vam zagotovi, da so vse odvisnosti, na primer vkljuène datoteke, na svojem mestu. To ne traja dolgo, razen, èe imate zelo poèasen raèunalnik. Pri starej¹ih razlièicah jedra morate po koncu delanja odvisnosti napisati ¹e ,,make clean``. To odstrani vse objektne datoteke in druge stvari, ki so jih pustile za sabo stare razlièice. V vsakem primeru ne pozabite narediti tega koraka preden zaènete prevajati jedro. 4.2. Èas za prevajanje Po urejanju odvisnosti in èi¹èenju lahko napi¹ete ,,make zImage`` ali ,,make zdisk`` (ta del traja veliko èasa). ,,make zImage`` prevede jedro in v imeniku arch/i386/boot pusti datoteko, imenovano ,,bzImage`` (med drugim). To je novo komprimirano jedro. ,,make bzdisk`` naredi isto stvar, le da prepi¹e novo datoteko bzImage na disketo, ki ste jo, upajmo, vstavili v pogon ,,A:`` (/dev/fd0). ,,bzdisk`` je priroèno orodje za testiranje novih jeder; èe novo jedro ne deluje v redu, preprosto odstranite disketo in za¾enite staro jedro. Vèasih boste to disketo lahko uporabili tudi, èe boste po pomoti odstranili svoje jedro (ali naredili kaj podobno groznega). Disketo lahko uporabite tudi pri in¹talaciji novih sistemov, ko preprosto prepi¹ete vsebino enega diska na drugega (,,Vse to in ¹e veè! Koliko bi plaèali zdaj?``). Vsa, vsaj na pol razumno nova, jedra so komprimirana, odtod èrka ,,bz`` pred njihovimi imeni. Komprimirano jedro se samodejno odkomprimira, ko se izvaja. V starej¹ih jedrih ni izbire za gradnjo bzImage; le zImage. Ta izbira je trenutno ¹e vedno dostopna, vendar je glede na velikost kode novej¹ih jeder uporaba bzImage bolj ali manj obvezna, saj starej¹e metode ne znajo uporabljati prevelikega jedra. 4.3. Drugi cilji ,,make`` ,,make mrproper`` naredi bolj intenzivno èi¹èenje (,,clean``). Vèasih je ta cilj potreben; morda ga ¾elite uporabiti ob vsakem popravku. ,,make mrproper`` bo tudi pobrisal va¹o konfiguracijsko datoteko, zato shranite njeno rezervno kopijo (.config), èe se vam zdi pomembna. ,,make oldconfig`` bo posku¹al nastaviti jedro s stare konfiguracijske datoteke; namesto vas bo ¹el skozi proces ,,make config``. Èe ¹e nikoli niste prevedli jedra ali nimate stare konfiguracijske datoteke, verjetno noèete tega, saj hoèete spremeniti privzeto nastavitev. Za ukaz ,,make modules`` glejte razdelek o modulih. 4.4. Namestitev jedra Ko imate novo jedro, za katerega menite, da deluje, kot ¾elite, je èas za njegovo namestitev. Veèina ljudi za ta korak uporablja LILO (Linux Loader). Jedro namestite, po¾enete èez njega LILO in ga pripravite za zaganjanje z ukazom ,,make bzlilo``. Vendar le, èe je lilo nastavljen takole: jedro je /vmlinuz, lilo je v imeniku /sbin, in va¹a nastavitvena datoteka /etc/lilo.conf se s tem strinja. V vseh drugih primerih morate pognati LILO neposredno. Paket je precej enostaven za in¹talacijo in delo, a zna zmesti ljudi s konfiguracijsko datoteko. Glejte nastavitveno datoteko (v starej¹ih razlièicah je to /etc/lilo/config, v novej¹ih pa /etc/lilo.conf) in poglejte, kak¹ne nastavitve imate. Konfiguracijska datoteka mora izgledati podobno: image = /vmlinuz label = Linux root = /dev/hda1 ... Nastavitev ,,image =`` ka¾e na na novo name¹èeno jedro. Veèina ljudi uporablja /vmlinuz. Lilo potrebuje oznako ,,label``, da ugotovi, katero jedro ali operacijski sistem naj za¾ene, oznaka ,,root`` je korenski imenik / doloèenega operacijskega sistema. Napravite rezervno kopijo va¹ega starega jedra in prepi¹ite datoteko bzImage, ki ste jo pravkar naredili na to mesto (napi¹ete npr. ,,cp bzImage /vmlinuz``, èe uporabljate ,,/vmlinuz``). Potem ¹e enkrat za¾enete lilo - na novej¹ih sistemih le napi¹ete ,,lilo``, na starej¹ih morate morda narediti /etc/lilo/install ali celo /etc/lilo/lilo -C /etc/lilo/config. Èe bi radi izvedeli veè o nastavitvi programa LILO ali èe nimate programa LILO, dobite najnovej¹o razlièico z va¹ega priljubljenega mesta za FTP in upo¹tevate navodila. Za zaganjanje enega va¹ih starej¹ih jeder s trdega diska (¹e en naèin, kako si opomorete, èe ste unièili novo jedro), prekopirajte vrstice pod (in vkljuèno z) ,,image = xxx`` v LILO-vi nastavitveni datoteki na konec datoteke in spremenite ,,image = xxx`` v ,,image = yyy``, kjer je ,,yyy`` polna pot do datoteke, v katero ste shranili rezervno jedro. Potem spremenite ,,label = zzz`` v ,,label = linux-backup`` in ¹e enkrat po¾enite lilo. V konfiguracijsko datoteko lahko dodate tudi vrstico z ,,delay=x``, kjer je ,,x`` èasovni interval v desetinkah sekunde, v katerem LILO èaka, da ga boste lahko prekinili (npr. s tipko Shift) in vpisali oznako rezerve zaganjalne kopije (èe se zgodi kaj neprijetnega). 5. Popravljanje jedra 5.1. Uporaba popravka Zaporedne nadgradnje jedra se distribuirajo kot popravki (patches). Na primer, èe imate razlièico 1.1.45 in opazite, da obstaja nekje datoteka ,,patch46.gz`` za njo, to pomeni, da lahko z uporabo programa patch nadgradite jedro na razlièico 1.1.46. Morda boste najprej ¾eleli napraviti rezervno kopijo drevesa izvorne kode (komprimiran arhiv naredite z ,,make clean`` in potem ,,cd /usr/src; tar zcvf old- tree.tar.gz linux``). Nadaljujmo zgornji primer in predpostavimo, da imate datoteko ,,patch46.gz`` v imeniku /usr/src. Naredite cd /usr/src in potem ,,zcat patch46.gz | patch -p0`` (ali ,,patch -p0 < patch46``, èe popravek ni komprimiran). Na zaslonu bodo mimo vas letele stvari, ki vam bodo sporoèale, da patch posku¹a uporabiti doloèene popravke in uspeh teh poskusov. Navadno se vse odvija prehitro, da bi lahko brali. Èe niste preprièani, ali je ¹lo vse po sreèi, boste morda uporabili zastavico -s za program patch, kar pove patchu naj sporoèa le sporoèila o napakah (v tem primeru ne boste imeli obèutka ,,Hej, moj raèunalnik za spremembo nekaj poène!``, a boste morda vseeno raje storili tako). Èe vas zanima, kateri deli se niso popravili povsem gladko, napravite cd /usr/src/linux in poi¹èite datoteke s podalj¹kom .rej. Nekatere starej¹e razlièice patcha pustijo podalj¹ek #. Za iskanje uporabite ,,find``: # find . -name '*.rej' -print To izpi¹e vse datoteke s podalj¹kom .rej, ki prebivajo v trenutnem imeniku ali podimenikih, na standardni izhod. Èe je ¹lo vse kot po maslu, napravite ,,make clean``, ,,config``, in ,,dep`` kot je opisano v razdelkih ``,,Kako zares sestaviti jedro``'' in ``,,Prevajanje jedra``''. Ukaz patch ima ¹e precej dodatnih izbir. Zgoraj smo ¾e omenili patch -s, ki zadr¾i izpis vseh sporoèil, razen napak. Èe imate izvorno kodo jedra v kak¹nem drugem imeniku kot /usr/src/linux, uporabite v tem imeniku patch -p1. Ostale izbire najdete z man patch. 5.2. Èe se kje zalomi (Opomba: Ta razdelek se nana¹a predvsem na zelo stara jedra.) Najpogostej¹i problem, ki se je vèasih pojavljal, je bil, ko je popravek spremenil datoteko ,,config.in`` in ta ni bila èisto prava, saj ste spremenili izbire, da bi opisali opremo svojega stroja. To se je uredilo, a lahko v starej¹ih izdajah ¹e vedno sreèate. Popravite pa tako, da pogledate datoteko config.in.rej tako, da odgovarja originalnemu popravku. Popravki bodo navadno oznaèeni s simboloma ,,+`` in ,,-`` na zaèetku vrstice. Glejte okoli¹ke vrstice in se spomnite, ali so bile nastavljene kot ,,y`` ali kot ,,n``. Zdaj popravite config.in in spremenite ,,y`` v ,,n`` in obratno, kjer je to primerno. Naredite: # patch -p0 < config.in.rej in èe patch sporoèi, da je uspel, lahko nadaljujete z nastavitvami in prevajanjem. Datoteka config.in.rej vam bo ostala, a jo lahko pobri¹ete. Èe imate ¹e vedno probleme, ste morda namestili popravek prek vrste. Èe patch pravi ,,previously applied patch detected: Assume -R?``, verjetno posku¹ate namestiti popravek, ki je starej¹i od trenutne razlièice jedra; èe odgovorite z ,,y``, bo patch posku¹al podgraditi va¹o izvorno kodo, in najverjetneje mu bo spodletelo. Potrebovali boste popolno èisto novo drevo izvorne kode (kar je morda tako ali tako dobra ideja). Za razveljavitev popravkov uporabite ukaz ,,patch -R`` na originalnem popravku. Najbolj¹a stvar, ki jo lahko naredite, ko ne morete uporabiti popravkov, je, da zaènete znova s èistim drevesom izvorne kode (na primer, z eno od datotek linux-x.y.z.tar.gz), in znova zaènete. 5.3. Kako se znebite datotek .orig Po nekaj popravkih se bodo zaèele kopièiti datoteke .orig. Npr. neko drevo jedra 1.1.51, ki sem ga nekoè imel, je bilo zadnjiè oèi¹èeno pri razlièici 1.1.48. Odstranitev datotek .orig je prihranila veè kot pol megabyta. Zadevo uredite z ukazom: # find . -name '*.orig' -exec rm -f {} ';' Razlièice programa patch, ki uporabljajo # za zavrnitvene datoteke, uporabljajo za podalj¹ek tildo (,,.~``) namesto ,,.orig``. Obstajajo tudi bolj¹i naèini za odpravo datotek .orig, ki slonijo na GNU xargs: # find . -name '*.orig' | xargs rm ali ,,precej varna, a malo bolj izèrpna`` metoda: # find . -name '*.orig' -print0 | xargs --null rm -- 5.4. Drugi popravki Razen Linusovih, obstajajo tudi drugi popravki (rekel jim bom ,,nestandardni``). Èe jih uporabite, Linusovi popravki morda ne bodo delovali pravilno in jih boste morali obnoviti, urediti izvorno kodo popravka, namestiti novo drevo izvorne kode ali kombinacijo na¹tetega. To lahko postane zelo frustrirajoèe, zato, èe ne ¾elite spreminjati izvorne kode (z morda slabim izidom), napravite rezervne kopije nestandardnih popravkov, preden uporabite Linusove, ali le namestite novo drevo. Potem lahko pogledate, èe nestandardni popravki delujejo. Èe ne, morate ostati pri starem jedru in se igrati s popravki ali izvorno kodo, da bi dosegli delovanje, ali èakati (morda celo prosjaèiti) za novo razlièico popravkov. Kako pogosti so popravki, ki niso v standardnih distribucijah? Verjetno boste sli¹ali o njih. Jaz uporabljam popravek noblink za moje navidezne zaslone, ker sovra¾im utripajoèe kazalce (ta popravek je (ali je vsaj bil) redno osve¾en ob vsaki novi izdaji jedra). Z razvojem vse veè novej¹ih gonilnikov naprav kot modulov pa uporaba ,,nestandardnih`` popravkov znatno upada. 6. Dodatni paketi Va¹e Linuxovo jedro ima veliko odlik, ki niso pojasnjene v sami izvorni kodi jedra; te posebnosti se navadno dose¾ejo z uporabo zunanjih paketov. Tukaj na¹tevam nekaj najpogostej¹ih. 6.1. kbd Linuxov zaslon (console) ima najbr¾ veè zmo¾nosti, kot si jih zaslu¾i (op.: prevajalec se ne strinja). Med temi so mo¾nost preklaplanja znakov, preslikave tipkovnice, preklop video naèinov (v novej¹ih jedrih) itd. Paket kbd vsebuje programe, ki uporabniku omogoèajo vse to, in ¹e veliko znakov in naèrtov tipkovnic za skoraj vsako tipkovnico. Paket dobite na istih mestih kot izvorno kodo jedra. 6.2. util-linux Rik Faith <faith@cs.unc.edu> je sestavil veliko zbirko uporabnih programov za Linux, ki se imenujejo util-linux. Trenutno jih vzdr¾uje Andries Brouwer <util-linux@math.uio.no>. Po anonimnem FTP-ju dobite na <ftp://metalab.unc.edu/pub/Linux/system/misc/> programe kot so setterm, rdev, in ctrlaltdel, ki se nana¹ajo na jedro. Kot pravi Rik, nièesar ne in¹talirajte, ne da bi prej premislili, ni vam treba in¹talirati vsega in lahko imate resne probleme, èe bi radi in¹talirali vse. 6.3. hdparm Kot veliko paketov je bil tudi ta nekoè popravek za jedro in podporni programi. Popravki so se prebili v uradno jedro, programi za optimizacijo in igranje z va¹im trdim diskom pa se raz¹irjajo posebej. 6.4. gpm gpm pomeni ,,splo¹no uporabna mi¹ka`` (ang. general purpose mouse). S tem programom lahko besedilo izrezujete in prilepljate med posameznimi navideznimi zasloni in poènete druge stvari s celo paleto razliènih mi¹k. 7. Nekatere pasti 7.1. make clean Èe po rutinski nadgradnji jedra va¹e jedro poène zares èudne reèi, ste morda pozabili napisati make clean pred prevajanjem novega jedra. Simptomi so lahko karkoli, od zmrznjenega sistema, èudnih V/I problemov, do slabega (poèasnega) delovanja. Preprièajte se tudi, da boste ukazali make dep. 7.2. Velika ali poèasna jedra Èe va¹e jedro po¾ira velike kolièine pomnilnika, je preveliko, in/ali le traja neskonèno dolgo, da se prevede, èeprav imate nov procesor Quadbazillium-III/440, ste najverjetneje vkljuèili podporo veliko nepotrebnih zadev (gonilnikov naprav, datoteènih sistemov, itd.). Èe naprave ne uporabljate, je ne podprite v jedru, saj to zavzema pomnilnik. Najbolj oèiten simptom prenapihnjenega jedra je ekstremno izmenjavanje pomnilnika z diskom sem ter tja; èe va¹ disk nenehno ogla¹a in ni eden od tistih starih Fujitsujevih Eagles, katerih zvok lahko primerjamo s pristajanjem reaktivnih letal, preglejte nastavitve va¹ega jedra. Koliko pomnilnika zaseda jedro lahko izveste z od¹tevanjem vrednosti ,,total mem`` v izpisu /proc/meminfo ali izhodom ukaza ,,free``, od kolièine vsega pomnilnika. 7.3. Vzporedna vrata ne delujejo/tiskalnik ne deluje Nastavitvene izbire za PC-je so: najprej v kategoriji Splo¹nih nastavitev (angl. General Setup) vkljuèite podporo zaporednih vrat (angl. Parallel port support) in strojno opremo osebnih raèunalnikov (angl. PC-style hardware). Nato v Znakovnih napravah (angl. Character devices) podprite tiskalnik na vzporednih vratih (angl. Parallel printer support). Potem so tu ¹e imena. Linux 2.2 poimenuje tiskalni¹ke naprave drugaèe od prej¹njih izdaj. Posledica tega je, da napravi lp1 v va¹em starem jedru v novem jedru verjetno ustreza naprava lp0. Uporabite dmesg ali poglejte v dnevnik v imeniku /var/log ter ugotovite novo ime. 7.4. Jedro se ne prevede Èe se ne prevede, je to verjetno zato, ker je popravek spodletel, ali je va¹a izvorna koda nekako pokvarjena. Morda nimate prave razlièice prevajalnika gcc, ali je tudi z njim kaj narobe (na primer, vkljuène datoteke so lahko napaène). Preprièajte se, da so simboliène povezave, ki jih Linus priporoèa v datoteki README pravilno narejene. V splo¹nem, èe se standardna jedra ne prevajajo, je nekaj resno narobe s sistemom in ponovna in¹talacija nekaterih orodij je neizogibna. V nekaterih primerih lahko gcc odpove zaradi strojnih problemov. Sporoèila o tak¹nih napakah so nekaj kot ,,xxx exited with signal 15`` in navadno izgledajo zelo skrivnostna. Tega sploh ne bi omenil, a se mi je nekoè zgodilo - imel sem nekaj slabega predpomnilnika in prevajalnik se je prito¾eval povsem nakljuèno. Èe imate te¾ave, poskusite najprej ponovno namestiti gcc. Sumnièavi postanite samo, èe se va¹e jedro lepo prevede z izkljuèenim zunanjim predpomnilnikom, zmanj¹ano kolièino RAM-a, ipd. Ljudje so navadno vznemirjeni, ko izvejo, da bi lahko imeli tudi te¾ave s strojno opremo. Hja, tega si ne izmi¹ljujem. Obstajajo tudi pogosto zastavljena vpra¹anja o tej temi - najdete jih na <http://www.bitwizard.nl/sig11/>. 7.5. Novo jedro se noèe zagnati Niste pognali programa LILO, ali pa ga niste pravilno nastavili. Nekoè me je zafrkavala vrstica v LILO-vi konfiguracijski datoteki, ki je bila ,,boot = /dev/hda1`` namesto ,,boot = /dev/hda``. (To je lahko sprva zelo moteèe, a ko imate enkrat delujoèo nastavitveno datoteko, vam je ni treba spreminjati.) 7.6. Pozabili ste pognati LILO, ali pa se sistem sploh ne za¾ene Ups! Najbolj¹e, kar lahko storite ta hip, je, da za¾enete operacijski sistem z diskete ali CD-ROM-a in potem pripravite ¹e eno zaganjalno disketo (kot bi jo naredil ukaz ,,make zdisk``). Vedeti morate, kje je va¹ korenski (/) datoteèni sistem in katerega tipa je (npr. second extended, minix). V spodnjem primeru morate vedeti tudi na kak¹nem datoteènem sistemu le¾i va¹e drevo izvorne kode /usr/src/linux, njegov tip, in kje je navadno name¹èen (z mount). V naslednjem primeru je / enak /dev/hda1, in datoteèni sistem, ki vsebuje /usr/src/linux na /dev/hda3, navadno name¹èen na /usr. Oba sta datoteèna sistema tipa ext2 (second extended). Delujoèa slika jedra v imeniku /usr/src/linux/arch/i386/boot se imenuje bzImage. Zamisel je tak¹na, da uporabimo delujoèe jedro zImage na novi disketi. ©e ena mo¾nost, ki lahko deluje bolje, ali pa tudi ne (odvisno od konkretne metode, s katero ste zavozili svoj sistem), je opisana po tem primeru. Najprej za¾enite sistem s kombinacije disket boot in root ali z re¹evalne diskete in namestite delujoèo sliko jedra: # mkdir /mnt # mount -t ext2 /dev/hda3 /mnt Èe vam mkdir pravi, da imenik ¾e obstaja, ga ignorirajte. Zdaj pojdite z ukazom cd na imenik, v katerem je delujoèe jedro. Pozorni bodite na to, da je /mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot V disketni pogon ,,A:`` vlo¾ite formatirano disketo (ne va¹ih diskov boot ali root!), prepi¹ite sliko jedra na disketo in jo nastavite za svoj korenski datoteèni sistem. # cd /mnt/src/linux/arch/i386/boot # dd if=bzImage of=/dev/fd0 # rdev /dev/fd0 /dev/hda1 Naredite cd na / in odmestite obièajni datoteèni sistem /usr: # cd / # umount /mnt Zdaj lahko ¹e enkrat za¾enete svoj sistem z nove diskete. Ne pozabite tokrat po zagonu pognati lilo (ali karkoli je bilo ¾e narobe)! Kot smo omenili zgoraj, obstaja ¹e ena obièajna pot. Èe imate delujoèo sliko jedra v / (/vmlinuz, na primer), jo lahko uporabite za zagonsko disketo. Èe veljajo vsi zgoraj na¹teti pogoji in je slika jedra /vmlinuz, naredite le te spremembe v zgoraj opisanem primeru: spremenite /dev/hda3 v /dev/hda1 (datoteèni sistem /), /mnt/src/linux v /mnt, in if=bzImage v if=vmlinuz. Opombo o tem, kako dobimo /mnt/src/linux lahko spregledate. Uporaba programa LILO na velikih diskih (veèjih od 1024 cilindrov) lahko povzroèa probleme. Preberite LILO mini-HOWTO ali LILO-vo dokumentacijo, èe potrebujete pomoè pri tem. 7.7. Izpi¹e ,, warning: bdflush not running `` To je lahko resen problem. Od jedra izdaje po 1.0 (okoli 20. aprila 1994) se je program ,,update``, ki periodièno izplakne vmesni pomnilnik datoteènega sistema, posodabljal in nadomestil. Dobite izvorno kodo ,,bdflush`` (najdete jo tam, kjer ste na¹li jedro) in namestite ta program (verjetno boste medtem pognati va¹ sistem pod starim jedrom). Ta program se sam namesti kot ,,update`` in po ponovnem zagonu se novo jedro ne bo veè prito¾evalo. 7.8. Mojega CD-ROM-a IDE/ATAPI ne preprièam, da bi deloval Èudno, a veliko ljudi ne more pripraviti svoje pogone ATAPI k delovanju, verjetno zato, ker gre lahko veliko stvari narobe. Èe je va¹ CD-ROM edina naprava na konkretnem vmesniku IDE, morate nastaviti skakaèe kot ,,master`` ali ,,single``. To je menda najbolj pogosta napaka. Creative Labs (na primer) je postavil vmesnik IDE na njihove zvoène kartice. A to vodi k zanimivem problemu, da imajo nekateri ljudje en sam vmesnik, veliko jih ima dva vmesnika IDE na njihovih matiènih plo¹èah (navadno na IRQ15), torej je splo¹na praksa oznaèiti vmesnik SoundBlaster-ja kot tretji IDE port (IRQ11, mi pravijo). To povzroèa probleme z Linuxom, saj razlièice 1.2.x ne podpirajo tretjega vmesnika IDE (obstaja podpora v serijah 1.3.x, a to je razvojna razlièica, se ¹e spomnite, in ne izvaja avtomatskega iskanja). Temu se lahko izognemo na veè naèinov. Èe ¾e imate druga vrata IDE, jih morda ne uporabljate ali ¹e nimajo na sebi dveh naprav. Vzemite pogon ATAPI z zvoène kartice in ga pove¾ite na drugi vmesnik. Potem lahko onemogoèite vmesnik zvoène kartice, kar tako ali tako privarèuje IRQ. Èe nimate drugega vmesnika, nastavite skakaè na vmesniku zvoène kartice (ne na zvoènem delu zvoène kartice) kot IRQ15, drugi vmesnik. Moralo bi delovati. 7.9. Izpisuje èudne reèi o zastarelih zahtevah za usmerjanje (obso lete routing requests) Poi¹èite novo razlièico programa route in vseh drugih usmerjevalnih programov. Datoteka /usr/include/linux/route.h (ki je pravzaprav v imeniku /usr/src/linux) se je spremenila. 7.10. Po¾arni zid ne deluje v 1.2.0 Nadgradite vsaj na razlièico 1.2.1. 7.11. ,, Not a compressed kernel Image file `` (datoteka s sliko jedra ni komprimirana) Ne uporabljajte datoteke vmlinux, ki je narejena v imeniku /usr/src/linux, kot va¹o zaganjalno sliko; [..]/arch/i386/boot/bzImage je prava datoteka. 7.12. Te¾ave z zaslonskim terminalom po nadgradnji na 1.3.x Spremenite besedo dumb v linux v opisu zaslonskega terminala v datoteki /etc/termcap. Morda boste morali tudi narediti nov zapis. 7.13. Po nadgradnji jedra ne morem prevajati zadev Linuxova izvorna koda jedra vsebuje veliko vkljuènih datotek (datoteke, ki se konèujejo na .h), na katere se sklicujejo standardne datoteke v imeniku /usr/include. Na njih se navadno sklicujemo takole (tukaj je xyzzy.h nekaj v imeniku /usr/include/linux): #include <linux/xyzzy.h> Navadno je v imeniku /usr/include povezava, imenovana linux, na imenik include/linux va¹e izvorne kode jedra (/usr/src/linux/include/linux v tipiènem sistemu). Èe te povezave ni tam, ali ka¾e na napaèen kraj, se veèina stvari sploh ne bo prevedla. Èe ste se odloèili, da porablja izvorna koda jedra preveè prostora na disku in ste jo pobrisali, je oèitno to problem. Lahko pa, da je kaj narobe z dovoljenji datotek; èe ima va¹ root nastavitev umask, ki ne dovoljuje drugim uporabnikom, da bi kot privzeto lahko gledali njegove datoteke, in ste izlu¹èili izvorno kodo jedra brez izbire p (ohrani datoteène naèine), ti uporabniki ne bodo mogli uporabljati prevajalnika za C. Èeprav lahko uporabite ukaz chmod in to popravite, je verjetno la¾je ¹e enkrat izvleèi vkljuène datoteke. To lahko storite enako kot ste storili na zaèetku z vso izvorno kodo, le z dodatnim argumentom: # tar zxvpf linux.x.y.z.tar.gz linux/include Opomba: ,,make config`` bo naredil povezavo /usr/src/linux, èe je ¹e nimate. 7.14. Poveèanje omejitev Naslednji primer ukazov je lahko koristen za tiste, ki se spra¹ujete, kako poveèati nekatere mehke omejitve, ki jih privzame jedro: # echo 4096 > /proc/sys/kernel/file-max # echo 12288 > /proc/sys/kernel/inode-max # echo 300 400 500 > /proc/sys/vm/freepages 8. Opomba o nadgradnji na razlièice 2.0.x, 2.2.x Jedra razlièic 2.0.x in 2.2.x so uvedla precej sprememb pri njihovi namestitvi. Berite datoteko Documentation/Changes v drevesu izvorne kode jedra za znanje, ki ga morate imeti, ko nadgrajujete na ta jedra. Verjetno boste morali nadgraditi veliko kljuènih paketov, kot so gcc, libc in SysVInit, in spremeniti veliko sistemskih datotek, zato bodite na to pripravljeni. A brez panike, prosim. 9. Moduli Nalagalni moduli lahko prihranijo pomnilnik in poenostavijo konfiguracijo. Domet modulov je raz¹irjen na datoteène sisteme, gonilnike omre¾nih kratic, traènih enot, tiskalnikov in ¹e veè. 9.1. Namestitev modulskih pripomoèkov Modulski pripomoèki so na voljo, kadarkoli dobite izvorno kodo va¹ega jedra kot modutils-x.y.z.tar.gz; izberite najvi¹jo ¹tevilko razlièice x.y.z, ki je enaka ali manj¹a va¹emu jedru. Odpakirajte jih z ,, tar zxvf modutils-x.y.z.tar.gz``, pojdite s cd na imenik, ki ga ustvari tar (modutils-x.y.z), preglejte datoteko README, in upo¹tevajte navodila (kar je navadno nekaj preprostega, kot, denimo, make install). Zdaj morate imeti programe insmod, rmmod, ksyms, lsmod, genksyms, modprobe, in depmod v imeniku /sbin. Èe ¾elite, lahko preskusite pripomoèke s preizku¹evalnim gonilnikom ,,hw`` v programu insmod; preberite datoteko INSTALL v tem podimeniku za podrobnosti. insmod vkljuèi modul v tekoèe jedro. Moduli imajo navadno podalj¹ek .o; preizku¹evalni gonilnik, omenjen zgoraj, se imenuje drv_hello.o, torej morate napisati ,,insmod drv_hello.o``, èe ga ¾elite vkljuèiti. Module, ki jih jedro trenutno uporablja, lahko izpi¹ete z lsmod. Izhod izgleda takole: blah:# lsmod Module: #pages: Used by: drv_hello 1 ,,drv_hello`` je ime modula, uporablja eno stran (4 KB) pomnilnika in noben drug jedrni modul trenutno ni odvisen od njega. Ta modul odstranite z ukazom ,,rmmod drv_hello``. Paziti morate, ker hoèe rmmod ime modula, ne ime datoteke; dobite ga z izpisom lsmod. Nameni drugih modulskih pripomoèkov so na¹teti v njihovih referenènih priroènikih (npr. man ksyms). 9.2. Moduli, distribuirani poleg jedra Od razlièice 2.0.30 je veèina vsega dostopna kot nalagalni modul. Èe jih ¾elite uporabiti, morate nastaviti podatke o njih v obièajnem jedru; to se pravi, ne reèete ,,y`` med ,,make config``, temveè ,,m``. Prevedite novo jedro in z njim za¾enite sistem. Potem naredite ,,cd /usr/src/linux`` in uka¾ite ,,make modules``. To prevede vse module, ki jih niste ¾e navedli v konfiguraciji jedra in v imenik /usr/src/linux/modules namesti povezave na njih. Uporabite jih lahko v tem imeniku ali pa izvedete ,,make modules_install`` in jih s tem namestite v imenik /lib/modules/x.y.z, kjer je x.y.z ¹tevilka izdaje jedra. To je lahko ¹e posebno uporabno z datoteènimi sistemi. Morda ne uporabljate pogosto datoteènih sistemov minix in/ali msdos. Na primer, kadar dobim dosovsko (brrr) disketo, naredim insmod /usr/src/linux/modules/msdos.o, in potem rmmod msdos, ko opravim z njo. Ta postopek privarèuje okoli 50 KB RAM-a v jedru med normalnim delovanjem. Pri datoteènem sistemu minix ne bo odveè majhna pripomba: vedno ga podprite neposredno v jedru, da boste lahko uporabljali ,,re¹evalne`` diskete. 10. Nasveti in triki 10.1. Preusmeritev izhoda ukazov make in patch Èe ¾elite videti, kaj je naredil ukaz ,,make`` ali ,,patch``, lahko preusmerite standardni izhod programa v datoteko. Najprej ugotovite katero ukazno lupino uporabljate: ,,grep root /etc/passwd`` in glejte nekaj podobnega temu: ,,/bin/csh``. Èe uporabljate sh ali bash, boste takole preusmerili izhod ukaza (ukaz) v datoteko (izhodna_datoteka): # (ukaz) 2>&1 | tee (izhodna_datoteka) Za csh ali tcsh uporabite: # (ukaz) |& tee (izhodna_datoteka) Za lupino rc (verjetno je ne uporabljate) je ustrezen ukaz # (ukaz) >[2=1] | tee (izhodna_datoteka) 10.2. Pogojna in¹talacija jedra Razen z uporabo disket je ¹e veè metod preizku¹anja novega jedra, ne da bi se dotaknili starega. Za razliko od mnogih Unixov je LILO sposoben zagnati jedro s kateregakoli mesta na disku (èe imate disk veèji od 500 MB, preberite LILO-vo dokumentacijo, kako prepreèite te¾ave). Èe torej na konec konfiguracijske datoteke dodate nekaj podobnega: image = /usr/src/linux/arch/i386/boot/bzImage label = new_kernel lahko izberete zagon novega jedra ne da bi se dotaknili va¹ega starega jedra /vmlinuz (seveda morate ¹e pognati lilo). Najpreprostej¹i naèin za zagon novega jedra je, da pritisnete ob zagonu tipko Shift (ko se na zaslonu izpi¹e LILO in niè drugega), kar vam da pozivnik. Zdaj lahko vnesete ,,new_kernel`` in zagnalo se bo novo jedro. Èe ¾elite obdr¾ati veè dreves izvorne kode razliènih jeder (to lahko sicer zaseda veliko diskovnega prostora), je najpogostej¹i naèin ta, da jih preimenujete v /usr/src/linux-x.y.z, kjer je x.y.z razlièica jedra. Potem lahko ,,izberete`` drevo izvorne kode s simbolièno povezavo, npr. ,,ln -sf linux-1.2.2 /usr/src/linux`` naredi drevo 1.2.2 za trenutno aktualno drevo. Preden naredite to simbolièno povezavo, se preprièajte, da zadnji argument programu ln ni pravi imenik (stare simboliène povezave so v redu); rezultat ne bo tak, kot bi ¾eleli. 10.3. Nadgradnje jedra Russell Nelson <nelson@crynwr.com> zbira spremembe v novih izdajah jedra. Te so kratke, lahko jih pogledate, preden nadgradite svoje jedro. Najdete jih na <ftp://ftp.emlist.com/pub/kchanges/> ali prek svetovnega spleta na naslovu url url="http://www.crynwr.com/kchanges">. 11. Ostali HOWTO-ji, ki bi lahko bili uporabni * Sound-HOWTO: zvoène kartice in pripomoèki, * SCSI-HOWTO: vse o krmilnikih in napravah SCSI, * NET-2-HOWTO: omre¾enost, * PPP-HOWTO: omre¾enost s PPPjem, posebej, * PCMCIA-HOWTO: o gonilnikih za va¹ notesnik, * ELF-HOWTO: ELF: kaj je to, prenos, * Hardware-HOWTO: pregled podprte strojne opreme, * Module mini-HOWTO: veè o modulih jedra, * Kerneld mini-HOWTO: o demonu kerneld, * BogoMips mini-HOWTO: èe se sluèajno spra¹ujete. 12. Razno 12.1. Avtor Avtor in vzdr¾evalec priroènika Linux Kernel-HOWTO je Brian Ward <bri@cs.uchicago.edu>. Prosim, po¹ljite mi vse pripombe, dodatke, popravke (predvsem popravki so zame najbolj pomembni). Mojo domaèo stran najdete na enem od teh dveh URL-jev: * <http://www.math.psu.edu/bri/> * <http://blah.math.tu-graz.ac.at/~bri/> Èeprav posku¹am biti po po¹ti pozoren kot se le da, se, prosim, zavedajte, da dobim vsak dan veliko pisem, zato lahko traja dolgo, preden vam odgovorim. Posebno, kadar me po po¹ti kaj spra¹ujete, prosim, poskusite biti ¹e posebej jasni in podrobni v svojem sporoèilu. Èe pi¹ete o nedelujoèi strojni opremi (ali kaj takega), moram vedeti, kak¹na je va¹a celotna strojna konfiguracija. Èe poroèate o napaki, ne recite le ,,Poskusil sem tole, pa mi je javil napako``; vedeti moram tudi, katera napaka je to bila. ®elim tudi vedeti razlièico jedra, prevajalnika gcc in knji¾nice libc, ki jih uporabljate. Èe le poveste, da uporabljate to-in-to distribucijo, mi s tem ne boste povedali kaj dosti. Ne moti me, èe vpra¹ujete preprosta vpra¹anja; vedite, èe nikoli ne vpra¹ate, morda ne boste nikoli dobili odgovora! ®elim se zahvaliti vsem, ki so mi posredovali povratne informacije. Èe va¹e vpra¹anje ni povezano z jedrom ali je v jeziku, ki ga ne razumem, morda ne bom odgovoril. Èe ste mi pisali in vam nisem odgovoril v razumnem èasovnem roku (trije tedni ali veè), sem morda pomotoma pobrisal va¹e sporoèilo ali kaj takega (oprostite). Prosim, poskusite ¹e enkrat. Dobivam veliko po¹te o stvareh, ki imajo pravzaprav opraviti s strojno opremo. To je v redu, a, prosim, zavedajte se, da nisem seznanjen z vso obstojeèo strojno opremo tega sveta. Osebno uporabljam procesorje AMD, krmilnike SCSI proizvajalcev Adaptec in Sybios, ter diske SCSI proizvajalca IBM. Razlièica -0.1 angle¹kega izvirnika je bila napisana 3. oktobra 1994. Izvirnik je dostopen kot SGML, PostScript, TeX, roff, in kot navaden tekst. Avtor slovenskega prevoda z dne 24. julija 1999 je Roman Maurer <roman.maurer@hermes.si>. Prosim, po¹ljite mi pripombe na prevod. Slovenski prevod je dostopen kot SGML DTD LinuxDoc, HTML, DVI, PDF, PostScript in navaden tekst na stre¾niku slovenskega Dru¹tva uporabnikov Linuxa v imeniku <ftp://ftp.lugos.si/pub/lugos/doc/HOWTO- sl/> ali na spletnem naslovu <http://www.lugos.si/delo/slo/HOWTO- sl/Kernel-HOWTO-sl.html>. 12.2. Narediti Razdelek ``,,Nasveti in triki``'' je bolj majhen. Upam, da ga bom raz¹iril s predlogi drugih. Tako je tudi z razdelkom ``,,Dodatni paketi``''. Potrebujemo veè podatkov o razhro¹èevanju/odpravljanju posledic sesutja sistema. 12.3. Prispevki Vkljuèen je majhen del Linusove datoteke README (izbire za hekiranje jedra). (Hvala, Linus!) * uc@brian.lunetix.de (Ulrich Callmeier): patch -s in xargs, * quinlan@yggdrasil.com (Daniel Quinlan): popravki in dodatki veè razdelkov, * nat@nataa.fr.eu.org (Nat Makarevitch): mrproper, tar -p, veè drugih reèi, * boldt@math.ucsb.edu (Axel Boldt): po omre¾ju je zbral opise konfiguracijskih izbir jedra; potem mi je poslal seznam, * lembark@wrkhors.psyber.com (Steve Lembark): predlog razliènega zaganjanja, * kbriggs@earwax.pd.uwa.edu.au (Keith Briggs): nekateri popravki in predlogi, * rmcguire@freenet.columbus.oh.us (Ryan McGuire): dodatki ciljev make, * dumas@excalibur.ibp.fr (Eric Dumas): francoski prevod, * simazaki@ab11.yamanashi.ac.jp (Yasutada Shimazaki): japonski prevod, * jjamor@lml.ls.fi.upm.es (Juan Jose Amor Iglesias): ¹panski prevod, * mva@sbbs.se (Martin Wahlen): ¹vedski prevod, * jzp1218@stud.u-szeged.hu (Zoltan Vamosi): mad¾arski prevod, * bart@mat.uni.torun.pl (Bartosz Maruszewski): poljski prevod, * roman.maurer@hermes.si (Roman Maurer): slovenski prevod, * donahue@tiber.nist.gov (Michael J. Donahue): tipkarske napake, zmagovalec ,,tekmovanja narezanega kruha``, * rms@gnu.ai.mit.edu (Richard Stallman): zamisel in distribucija ,,proste`` dokumentacije, * dak@Pool.Informatik.RWTH-Aachen.DE (David Kastrup): reè o NFS, * esr@snark.thyrsus.com (Eric Raymond): razlièni delèki. Pomagali so mi tudi ljudje, ki so mi poslali po¹to z vpra¹anji in problemi. 12.4. Pravice raz¹irjanja, licenca, in te stvari Copyright (C) Brian Ward, 1994-1999. Dovoljeno je izdelovati in raz¹irjati kopije tega priroènika, èe ostane opomba o pravicah raz¹irjanja in tale opomba o dovoljenju nespremenjena v vseh kopijah. Dovoljeno je kopirati in raz¹irjati spremenjene razlièice tega priroènika pod pogoji za dobesedno kopiranje, èe se izpeljano delo raz¹irja z enako opombo glede dovoljenj. Prevodi padejo v kategorijo ,,spremenjenih razlièic``. Garancija: Ni je. Priporoèila: Komercialno raz¹irjanje je dovoljeno in celo za¾eleno; vendar se moèno priporoèa, da distributer stopi v stik z avtorjem ¹e pred distribucijo, da bi obdr¾ali osve¾eno stanje stvari (lahko mi po¹ljete tudi kopijo stvari, ki jo izdelujete, èe ste ¾e pri tem). Avtor svetuje tudi prevajalcem, da stopijo v stik z njim, preden zaènejo prevajati. Natisnjene razlièice so videti bolje. Lahko jih recikliramo.