Jedro Linuxa, HOWTO <author>Brian Ward, <tt>bri@cs.uchicago.edu</tt> <date>v1.0, 5. junij 1999 <abstract> To je slovenski prevod datoteke <tt>Kernel-HOWTO</tt>, podrobnega vodnika po nastavitvah jedra operacijskega sistema Linux, prevajanju, nadgradnji in odpravljanju težav za sisteme s procesorji ix86. <toc> <sect>Uvod <p> Ste tudi vi med tistimi, ki naj bi prebrali ta dokument? No, pomislite, ali pri sebi opazite katerega od naštetih simptomov: <itemize> <item>,,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!`` <item>V enem novejših jeder je gonilnik za neko napravo, ki ga morate dobiti za vsako ceno. <item>Še sanja se vam ne, kako prevesti jedro. <item>,,Se res skrivnost vsega skriva v datoteki <tt>README</tt>?`` <item>Prišli ste, poskusili, pa ni delovalo. <item>Potrebujete nekaj, kar bi lahko ponudili vsem tistim, ki vas mučijo s prošnjami, da namesto njih namestite njihova jedra. </itemize> <sect1>Najprej si preberite tole! (Resno mislim!) <p> Nekateri zgledi v tem spisu predpostavljajo, da imate GNU <tt>tar</tt>, <tt>find</tt> in <tt>xargs</tt>. 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 <tt>mount</tt> med normalnim delovanjem sistema (ali izpis datoteke <tt>/etc/fstab</tt>, če ga znate brati). Te informacije so pomembne in se ne spreminjajo, razen če razdelite disk, dodaste novega, namestite svoj sistem znova ali kaj podobnega. <p> Zadnja stabilna različica jedra je bila med pisanjem tega spisa 2.2.9, torej se sklicevanja in zgledi nanašajo nanjo. Čeprav se trudim, da bi bil ta spis kar se da neodvisen od posameznih različic, se jedro nenehno razvija, torej bo v novejši različici neizogibno nekaj sprememb. To vam ne bi smelo povzročati večjih težav, lahko pa vas malce zmede. Poznamo dve različici izvirne kode jedra Linuxa; stabilno (angl. ,,production``) in razvojno (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 ob času njihove izdaje. Razvojna jedra (2.1.x, 2.3.x itd.) so jedra za preizkušanje, za tiste torej, ki bi radi preizkusili nova in morda zelo hroščata jedra. Bili ste opozorjeni! <sect1>O slogu <p> <tt>Besedilo, ki je videti takole</tt>, se prikaže na vašem zaslonu. Je ime datoteke ali nekaj, kar lahko neposredno vtipkate, na primer ukaz ali izbire pri ukazu (če gledate tekstovno različico tega spisa, zgornje besedilo ni videti nič drugače). Ukazi in drugi vnosi so pogosto citirani (z ,, ``), v slovenskem prevodu takole: ,,<tt>make config</tt>``. <sect>Pomembna vprašanja in odgovori <p> <sect1>Kaj pravzaprav sploh počne jedro? <p> Jedro Unixa deluje kot posrednik med vašimi programi in strojno opremo. Najprej, upravlja pomnilnik za vse tekoče programe (procese) ali poskrbi za to in preveri, 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. <p> Gotovo ima jedro več dolžnosti kot samo ti dve, a najpomembneje je, da poznate ti, osnovni. <sect1>Zakaj bi želeli nadgraditi jedro? <p> 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 kakor starejše različice, so stabilnejša od starejših različic in odpravijo neumne hrošče iz starejših različic. Večina nadgradi jedra, ker želijo gonilnike naprav in popravke hroščev. <sect1>Katero strojno opremo podpirajo nova jedra? <p> Preberite si <tt>Hardware-HOWTO</tt>. Kot alternativo si lahko ogledate datoteko <tt>config.in</tt> v izvirni kodi Linuxa, lahko pa tudi izveste, ko poskusite ,,<tt>make config</tt>``. 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. <sect1>Katero različico prevajalnika gcc in knjižnice libc potrebujem? <p> Linus priporoča različico gcc v datoteki <tt>README</tt>, priloženi izvirni kodi Linuxa. Če nimate te različice, vam dokumentacija poleg priporočene različice gcc pove, ali morate nadgraditi knjižnico libc. To ni težko opravilo, pomembno pa je, da sledite navodilom. <sect1>Kaj je nalagalni modul (loadable module)? <p> To so delčki kode jedra, ki niso povezani (vključeni) neposredno 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čeni način za uporabo določenih lastnosti jedra. Številni priljubljeni gonilniki, na primer gonilniki za PCMCIA in za tračno enoto QIC-80/40, so nalagalni moduli. <sect1>Koliko prostora potrebujem na disku? <p> Odvisno od konkretne konfiguracije sistema. Stisnjena izvirna koda Linuxa različice 2.2.9 obsega približno 14 MB. Večina računalnikov jo obdrži tudi po odpakiranju. Odpakirana in zgrajena izvirna koda jedra za povprečno sestavo zasede dodatnih 67 MB. <sect1>Kako dolgo traja? <p> Pri novejših strojih traja prevajanje znatno manj časa kot pri 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 v starih računalnikih Pentium, 486 in 386, bodite pripravljeni čakati, morda ure ali celo dneve ... <p> Če vas to moti in imate na voljo tudi hitrejši stroj, na katerem lahko prevajate, lahko gradite jedro na hitrejših strojih (če podaste pravilna določila, če so vaši pripomočki osveženi in tako naprej) in potem prenesete sliko jedra na počasnejši stroj. <sect>Kako zares sestaviti jedro<label id="configuring"> <p> <sect1>Nabava izvirne kode <p> Izvirno kodo lahko dobite po anonimnem FTP iz strežnika <tt>ftp.kernel.org</tt> v imeniku <tt>/pub/linux/kernel/vx.y</tt>, kjer je <tt>x.y</tt> 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. Izvirna koda jedra je navadno označena kot <tt>linux-x.y.z.tar.gz</tt>, kjer je <tt>x.y.z</tt> številka različice. Strežniki imajo navadno tudi datoteke s podaljškom <tt>.bz2</tt>, ki so bile stisnjene s pripomočkom <tt>bzip2</tt> (te datoteke bodo manjše, zato bo za njihov prenos treba manj časa). <p> Najbolje bo, če za prenos uporabite <tt>ftp.xx.kernel.org</tt>, pri čemer je <tt>xx</tt> koda vaše države; v Sloveniji boste tako uporabili <tt><htmlurl name="ftp.si.kernel.org" url="ftp://ftp.si.kernel.org/pub/linux/kernel/"></tt>, v Avstriji <tt>ftp.at.kernel.org</tt>, v Združenih državah Amerike pa <tt>ftp.us.kernel.org</tt>. <sect1>Odpakiranje izvirne kode <p> Prijavite se kot ,,<tt>root</tt>`` (ali pa uporabite ukaz <tt>su</tt>) in s <tt>cd</tt> spremenite imenik na <tt>/usr/src</tt>. Če ste ob prvi namestitvi Linuxa namestili tudi izvirno kodo jedra (večina jih stori tako), bo tam že imenik ,,<tt>linux</tt>`` s celotnim starim drevesom izvirne kode. Če imate dovolj diskovnega prostora in bi se radi počutili varno, ohranite ta imenik. Pametno je izvesti različico sistema, ki jo trenutno uporabljate, in ustrezno preimenovati imenik. Trenutno različico jedra izveste z ukazom ,,<tt>uname -r</tt>``. Če torej ,,<tt>uname -r</tt>`` pravi ,,1.0.9``, boste preimenovali (z ,,<tt>mv</tt>``) ,,<tt>linux</tt>`` v ,,<tt>linux-1.0.9</tt>``. Če ste malo bolj lahkomiselni, preprosto zbrišite ves imenik. V vsakem primeru preverite, da v <tt>/usr/src</tt> nimate imenika ,,<tt>linux</tt>``, preden odpakirate celotno izvirno kodo. <p> Zdaj v imeniku <tt>/usr/src</tt> odpakirajte izvirno kodo z ukazom ,,<tt>tar zxpvf linux-x.y.z.tar.gz</tt>`` (če imate samo datoteko <tt>.tar</tt> brez končnega <tt>.gz</tt>, pa z ukazom ,,<tt>tar xpvf linux-x.y.z.tar</tt>``). Na zaslonu boste videli izpisane datoteke izvirne kode. Ko <tt>tar</tt> konča, boste imeli nov imenik <tt>/usr/src/linux</tt>. Naredite <tt>cd</tt> v <tt>linux</tt> in preberite datoteko <tt>README</tt>. Nekje bo razdelek z naslovom ,,<tt>INSTALLING the kernel</tt>`` (,,NAMESTITEV jedra``). Upoštevajte navodila, kjer je to primerno -- simbolne povezave, ki morajo biti na pravih mestih, brisanje drugih datotek <tt>.o</tt> itd. <p> Če imate datoteko <tt>.bz2</tt> in pripomoček <tt>bzip2</tt> (več o tem si preberite na <tt><url url="http://www.muraroa.demon.co.uk/"></tt>), naredite tole: <tscreen><verb> bz2cat linux-x.y.z.tar.bz2 | tar xvf - </verb></tscreen> <sect1>Nastavitev jedra <p> Opomba: Del tega je reiteracija/razjasnitev podobnega razdelka v Linusovi datoteki <tt>README</tt>. <p> Ukaz ,,<tt>make config</tt>`` v imeniku <tt>/usr/src/linux</tt> požene nastavitveni skript, ki vam zastavi kup vprašanj. Potrebuje ukazno lupino <tt>bash</tt>, zato preverite, ali je ta v <tt>/bin/bash</tt>, <tt>/bin/sh</tt>, ali <tt>$BASH</tt>. <p> Verjetno boste raje uporabljali katero od alternativ ukazu ,,<tt>make config</tt>``. Tisti, ki poganjate grafični sistem X, lahko poskusite z ,,<tt>make xconfig</tt>``, če imate nameščen programski paket Tk (,,klik-o-rama`` - Nat). ,,<tt>make menuconfig</tt>`` 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, se lahko vrnete in stvar popravite. <p> Z uporabo ,,<tt>make menuconfig</tt>`` ali ,,<tt>make xconfig</tt>`` bodo nastavitvene izbire urejene hierarhično. <p> Pripravljeni ste odgovarjati na nekaj vprašanj, navadno z ,,<tt>y</tt>`` (da) ali ,,<tt>n</tt>`` (ne). Gonilniki naprav imajo tipično izbiro ,,<tt>m</tt>``. Ta pomeni ,,modul``, se pravi, da ga bo sistem prevedel, ne pa tudi vključil neposredno v jedro. Na voljo bo kot nalagalni modul. Duhovitejši način za opis te izbire bi bil ,,mogoče``. Nekatere očitnejše in nekritične izbire tu niso opisane; glej razdelek <ref id="other_options" name=",,Druge nastavitvene izbire``"> za kratek opis nekaterih posameznih izbir. Pri ,,<tt>make menuconfig</tt>`` s presledkom spreminjate izbiro. <p> V jedrih 2.0.x in poznejših je na voljo tudi izbira ,,<tt>?</tt>``, ki poda kratek opis posameznega nastavitvenega parametra. Ta informacija je verjetno najbolj sveža. Tu je seznam nekaterih najpomembnejših odlik, s hierarhijo, v kateri jih najdete, in kratkim opisom. <sect2>Kernel math emulation (Processor type and features) <p> [ Posnemanje matematičnih operacij v jedru (Vrsta in lastnosti procesorja) ] <p> Če nimate matematičnega koprocesorja (imate le goli procesor 386 ali 486SX), morate tu reči ,,<tt>y</tt>``. Če imate koprocesor in rečete ,,<tt>y</tt>``, naj vas ne skrbi preveč -- koprocesor se bo še vedno uporabljal, posnemanje pa ignoriralo. Za vsak napol sodoben stroj bo odgovor ,,ne``, a ne skrbite, če boste pomotoma rekli ,,da``; če posnemanje ni potrebno, se ne uporablja. <sect2>Enhanced (MFM/RLL) disk and IDE disk/cdrom support (Block Devices) <p> [ Podpora izboljšanim diskom (MFM/RLL) in diskom/CD-ROM vrste IDE (blokovne naprave) ] <p> Verjetno morate to podpreti; pomeni, da bo jedro podpiralo standardne diske, ki jih najdemo v osebnih računalnikih večine ljudi. Ta gonilnik ne vključuje pogonov SCSI; v nastavitvah pridejo ti na vrsto pozneje. <p> 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; poglavitna razlika je v tem, da stari gonilnik podpira le dva diska na enem vmesniku, novi pa drugi vmesnik in CD-ROM IDE/ATAPI. Novi gonilnik je 4 KB večji od starejšega in naj bi bil ,,izpopolnjen``, kar pomeni, da premore več ali manj hroščev, verjetno pa tudi izboljša vedenje vašega diska, še posebej, če imate novejšo strojno opremo vrste EIDE. <sect2>Networking support (General Setup) <p> [ Omrežna podpora (splošne nastavitve) ] <p> Tu boste zelo verjetno rekli ,,<tt>y</tt>``, saj želite, da bi bil vaš računalnik omrežen v internet ali bi vanj vstopal prek SLIP, PPP, term itd., torej s klicnim dostopom. A ker številni paketi (na primer sistem X window) potrebujejo omrežno podporo tudi, če vaš računalnik ne živi v pravem omrežju, boste tu vseeno odgovorili z ,,<tt>y</tt>``. Pozneje vas bo program vprašal, ali želite omrežno podporo protokolu TCP/IP; spet boste odgovorili z ,,<tt>y</tt>``, če niste absolutno prepričani v nasprotno. <sect2>System V IPC (General Setup) <p> [ Medprocesna komunikacija Systema V (splošne nastavitve) ] <p> Eno najboljših definicij IPC (Interprocess Communication, medprocesna komunikacija) najdemo 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 ,,<tt>n</tt>`` ni najboljša, razen če natanko veste, kaj počnete. <sect2>Processor family (Processor type and features) <p> [ Procesorska družina (vrsta in značilnosti procesorja) ] <p> (v starejših jedrih: uporabite zastavico <tt>-m486</tt> za optimizacije za 486) <p> Včasih je to zajemalo posebne optimizacije za določen procesor; jedro je teklo povsem dobro na drugih č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 ,,<tt>386</tt>`` bo delovalo v vseh strojih. <sect2>SCSI support <p> [ Podpora SCSI ] <p> Če imate naprave vrste SCSI, recite ,,<tt>y</tt>``. Vprašani boste po nadaljnjih podatkih, kot je podpora CD-ROM, diskom, in katere vrste vmesnik SCSI imate. Podrobnosti si preberite v <tt>SCSI-HOWTO</tt>. <sect2>Network device support <p> [ Podpora omrežnim napravam ] <p> Če imate omrežno kartico ali bi radi uporabljali SLIP, PPP ali vzporedni vmesnik za dostop v internet, recite ,,<tt>y</tt>``. Nastavitveni skript vas bo vprašal po vrsti kartice in protokolu, ki ga boste uporabljali. <sect2>Filesystems <p> [ Datotečni sistemi ] <p> Nastavitveni skript vas bo vprašal, ali želite imeti v jedru podprte naslednje datotečne sisteme: <itemize> <item><tt>Standard (minix)</tt> -- novejše distribucije ne ustvarjajo datotečnih sistemov minix in marsikdo jih ne uporablja, a morda bi bilo vseeno dobro, 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 mučen. <item><tt>Second extended</tt> -- To je standardni datotečni sistem Linuxa. Skoraj zagotovo ga imate, in morate odgovoriti ,,<tt>y</tt>``. <item><tt>msdos</tt> -- Če želite uporabljate particije MS-DOS na disku ali nameščati dosovske formatirane diskete, recite ,,<tt>y</tt>``. <p> Dostopni so še številni drugi tuji datotečni sistemi. <item><tt>/proc</tt> -- (zamisel iz Bell Labs, domnevam). Datotečnega sistema <tt>/proc</tt> se ne ustvari na disku; to je datotečni vmesnik do jedra in procesov. Številni izpisovalci procesov (npr. ,,<tt>ps</tt>``) ga uporabljajo. Poskusite kdaj s ,,<tt>cat /proc/meminfo</tt>`` ali ,,<tt>cat /proc/devices</tt>``. Nekatere ukazne lupine (posebej <tt>rc</tt>) uporabljajo <tt>/proc/self/fd</tt> (v drugih sistemih znan kot <tt>/dev/fd</tt>) za vhodno/izhodne (V/I) operacije. Skoraj gotovo morate odgovoriti ,,<tt>y</tt>``; številna pomembna orodja za Linux so odvisna od tega. <item><tt>NFS</tt> -- Če vaš stroj biva v omrežju in želite uporabljati datotečne sisteme, ki ležijo v drugih sistemih z NFS, recite ,,<tt>y</tt>``. <item><tt>ISO9660</tt> -- Najdete ga na večini CD-ROM. Če imate pogon za CD-ROM in ga želite uporabljati v Linuxu, odgovorite ,,<tt>y</tt>``. </itemize> <sect3>Kako naj vem, katere datotečne sisteme potrebujem?! <p> Prav, napišite ,,<tt>mount</tt>``. Izpis bo približno tak: <tscreen><verb> 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) </verb></tscreen> <p> Poglejte v vsako vrstico; beseda poleg ,,<tt>type</tt>`` je ime datotečnega sistema. V tem primeru sta moja datotečna sistema <tt>/</tt> in <tt>/usr</tt> vrste ,,second extended``, uporabljam <tt>/proc</tt> in nameščena je disketa z datotečnim sistemom msdos (fej). <p> Poskusite tudi ,,<tt>cat /proc/filesystems</tt>``, če imate trenutno vklopljen <tt>/proc</tt>; to bo izpisalo vaše trenutne datotečne sisteme v jedru. <p> Namestitev redko rabljenih, ne nujnih datotečnih sistemov lahko povzroči napihnjeno jedro; glej razdelek <ref id="moduls" name="o modulih"> za način, kako se temu izogniti, in razdelek <ref id="big_n_slow" name=",,Velika ali počasna jedra``"> o tem, zakaj je napihnjeno jedro nezaželen pojav. <sect2>Character devices <p> [ Znakovne naprave ] <p> Tu vključite gonilnike za vaš tiskalnik (pravzaprav tiskalnik na vzporednih vratih), miško, priklopljeno na vrata busmouse ali PS/2 (veliko notesov uporablja miškovni protokol PS/2 za vgrajene sledilne kroglice), nekatere tračne enote in druge take ,,znakovne`` naprave. Odgovorite z ,,<tt>y</tt>``, če je tako prav. <p> Opomba: <tt>gpm</tt> je program, ki omogoča uporabo miške zunaj sistema X window za izrezovanje in lepljenje besedila med navideznimi zasloni. Dobro je, če imate miško na zaporednih vratih, saj lepo shaja z Okni X, za druge miške pa morate uporabiti posebne zvijače. <sect2>Sound <p> [ Zvok ] <p> Če si zelo želite slišati, kako <tt>biff</tt> laja, odgovorite ,,<tt>y</tt>`` in nastavitvenemu programu lahko poveste vse o vaši zvočni kartici. (Opomba k nastavitvi zvočne kartice: ko vas vpraša, ali želite namestiti popolno različico gonilnikov, lahko odgovorite ,,<tt>n</tt>`` in prihranite nekaj pomnilnika jedra z izbiro le tistih značilnosti, ki se vam zdijo potrebne.) <p> Če zares potrebujete dobro podporo zvočni kartici, si oglejte proste gonilnike na naslovu <tt><url url="http://www.linux.org.uk/OSS/"></tt> in komercialni Open Sound System na <tt><url url="http://www.opensound.com/"></tt>. <sect2>Druge nastavitvene možnosti<label id="other_options"> <p> Vse nastavitvene izbire tu niso naštete, saj se prepogosto spreminjajo ali so same po sebi razvidne (na primer, podpora 3Com 3C509 za točno to omrežno kartico). Seznam vseh izbir (in načinov, kako jih uvrstimo v skript <tt>Configure</tt>) je precej obsežen; projekt je začel in vzdrževal Axel Boldt (<tt>boldt@math.ucsb.edu</tt>) in je dostopen kot pomoč na zvezi. Na voljo je tudi kot ena sama velika datoteka <tt>Documentation/Configure.help</tt> v izvirni kodi jedra od različice Linuxa 2.0 naprej. <sect2>Kernel hacking <p> [ Hekanje jedra ] <p> Iz Linusove datoteke <tt>README</tt>: <p> 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 (<tt>kmalloc()</tt>). Torej boste, če ste navadni smrtnik, tu odgovorili z ,,<tt>n</tt>``. <sect1>Pa zdaj? (Datoteka <tt>Makefile</tt>) <p> Ko opravite nastavljanje, vam sporočilo pove, da je jedro nastavljeno in da si oglejte ,,najvišje nivojsko datoteko Makefile za dodatno nastavitev`` itd. <p> Poglejte torej <tt>Makefile</tt>. Verjetno vam je ne bo treba spreminjati, a nikoli ne škodi, če pogledate. Po namestitvi novega jedra lahko spreminjate izbire tudi z ukazom ,,<tt>rdev</tt>``. Če se ob ogledovanju te datoteke počutite izgubljeni, pač pozabite nanjo. <sect>Prevajanje jedra<label id="compiling"> <p> <sect1>Čiščenje in urejanje odvisnosti <p> Ko konfiguracijski skript konča delo, vam pove, da napravite ,,<tt>make dep</tt>`` in (morda) ,,<tt>clean</tt>``. Torej napišete ,,<tt>make dep</tt>``. To vam zagotovi, da so vse odvisnosti, na primer vključne datoteke, na svojem mestu. Ne traja dolgo, razen če imate zelo počasen računalnik. Pri starejših različicah jedra morate po koncu izdelave odvisnosti napisati še ,,<tt>make clean</tt>``. To odstrani vse objektne datoteke in drugo, kar so pustile za sabo stare različice. V vsakem primeru ne pozabite narediti tega koraka, preden začnete prevajati jedro. <sect1>Čas za prevajanje <p> Po urejanju odvisnosti in čiščenju lahko napišete ,,<tt>make zImage</tt>`` ali ,,<tt>make zdisk</tt>`` (ta del traja dolgo časa). ,,<tt>make zImage</tt>`` prevede jedro in v imeniku <tt>arch/i386/boot</tt> pusti datoteko, imenovano ,,<tt>bzImage</tt>`` (med drugim). To je novo stisnjeno jedro. ,,<tt>make bzdisk</tt>`` naredi isto, le da prepiše novo datoteko <tt>bzImage</tt> na disketo, ki ste jo, upajmo, vstavili v pogon ,,A:`` (<tt>/dev/fd0</tt>). ,,<tt>bzdisk</tt>`` je priročno orodje za preskušanje 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 namestitvi novih sistemov, ko preprosto prepišete vsebino enega diska na drugega (,,Vse to in še več! Koliko bi plačali <bf>zdaj</bf>?``). Vsa vsaj napol razumno nova jedra so stisnjena, odtod črka ,,<tt>bz</tt>`` pred njihovimi imeni. Stisnjeno jedro se samodejno raztegne, ko se izvaja. <p> V starejših jedrih ni izbire za gradnjo <tt>bzImage</tt>; le <tt>zImage</tt>. Ta izbira je trenutno še vedno dostopna, vendar je glede na velikost kode novejših jeder uporaba <tt>bzImage</tt> bolj ali manj obvezna, saj starejše metode ne znajo uporabljati prevelikega jedra. <sect1>Drugi cilji ,,make`` <p> ,,<tt>make mrproper</tt>`` ustvari intenzivnejše čiščenje (,,<tt>clean</tt>``). Včasih je ta cilj potreben; morda ga želite uporabiti ob vsakem popravku. ,,<tt>make mrproper</tt>`` bo tudi zbrisal vašo konfiguracijsko datoteko, zato shranite njeno rezervno kopijo (<tt>.config</tt>), če se vam zdi pomembna. ,,<tt>make oldconfig</tt>`` bo poskušal nastaviti jedro s stare konfiguracijske datoteke; namesto vas bo šel skozi proces ,,<tt>make config</tt>``. Če še nikoli niste prevedli jedra ali nimate stare konfiguracijske datoteke, verjetno nočete tega, saj ne želite spremeniti privzete nastavitve. Za ukaz ,,<tt>make modules</tt>`` glej razdelek o modulih. <sect1>Namestitev jedra <p> Ko imate novo jedro, za katerega menite, da deluje, kakor želite, je čas, da ga namestite. Večina ljudi za ta korak uporablja LILO (Linux Loader). Jedro namestite, poženete čezenj LILO in ga pripravite za zaganjanje z ukazom ,,<tt>make bzlilo</tt>``. <bf>Vendar le</bf>, če je <tt>lilo</tt> nastavljen takole: jedro je <tt>/vmlinuz</tt>, lilo je v imeniku <tt>/sbin</tt> in vaša nastavitvena datoteka <tt>/etc/lilo.conf</tt> se s tem strinja. V vseh drugih primerih morate pognati LILO neposredno. Paket je precej enostavno namestiti in delati z njim, a zna zmesti s konfiguracijsko datoteko. Poglejte v nastavitveno datoteko (v starejših različicah je to <tt>/etc/lilo/config</tt>, v novejših pa <tt>/etc/lilo.conf</tt>), kakšne nastavitve imate. Konfiguracijska datoteka mora biti podobna: <tscreen><verb> image = /vmlinuz label = Linux root = /dev/hda1 ... </verb></tscreen> Nastavitev ,,<tt>image =</tt>`` kaže na novo nameščeno jedro. Večina uporablja <tt>/vmlinuz</tt>. Lilo potrebuje oznako ,,<tt>label</tt>``, da ugotovi, katero jedro ali operacijski sistem naj zažene, oznaka ,,<tt>root</tt>`` je korenski imenik <tt>/</tt> določenega operacijskega sistema. Naredite rezervno kopijo vašega starega jedra in prepišite datoteko <tt>bzImage</tt>, ki ste jo pravkar naredili, na to mesto (napišete npr. ,,<tt>cp bzImage /vmlinuz</tt>``, če uporabljate ,,<tt>/vmlinuz</tt>``). Potem še enkrat zaženete lilo -- na novejših sistemih le napišete ,,<tt>lilo</tt>``, na starejših morate morda narediti <tt>/etc/lilo/install</tt> ali celo <tt>/etc/lilo/lilo -C /etc/lilo/config</tt>. <p> Č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. <p> Za zaganjanje enega vaših starejših jeder z diska (še en način, kako si opomorete, če ste uničili novo jedro), prekopirajte vrstice pod (skupaj z) ,,<tt>image = xxx</tt>`` v nastavitveni datoteki lila na konec datoteke in spremenite ,,<tt>image = xxx</tt>`` v ,,<tt>image = yyy</tt>``, kjer je ,,<tt>yyy</tt>`` polna pot do datoteke, v katero ste shranili rezervno jedro. Potem spremenite ,,<tt>label = zzz</tt>`` v ,,<tt>label = linux-backup</tt>`` in še enkrat poženite <tt>lilo</tt>. V konfiguracijsko datoteko lahko dodaste tudi vrstico z ,,<tt>delay=x</tt>``, kjer je ,,<tt>x</tt>`` č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). <sect>Popravljanje jedra <p> <sect1>Uporaba popravka <p> Zaporedne nadgradnje jedra se distribuirajo kot popravki (patches). Na primer, če imate različico 1.1.45 in opazite, da je nekje datoteka ,,<tt>patch46.gz</tt>`` za njo, to pomeni, da lahko z uporabo programa <tt>patch</tt> nadgradite jedro na različico 1.1.46. Morda boste najprej želeli narediti rezervno kopijo drevesa izvirne kode (stisnjen arhiv naredite z ,,<tt>make clean</tt>`` in potem ,,<tt>cd /usr/src; tar zcvf old-tree.tar.gz linux</tt>``). <p> Nadaljujmo zgornji zgled in predpostavimo, da imate datoteko ,,<tt>patch46.gz</tt>`` v imeniku <tt>/usr/src</tt>.<tt> </tt>Naredite <tt>cd /usr/src</tt> in potem ,,<tt>zcat patch46.gz | patch -p0</tt>`` (ali ,,<tt>patch -p0 < patch46</tt>``, če popravek ni stisnjen). Na zaslonu bodo letele mimo stvari, ki vam bodo sporočale, da <tt>patch</tt> poskuša uporabiti določene popravke in uspeh teh poskusov. Navadno se vse odvija prehitro, da bi utegnili prebrati. Če niste prepričani, ali je šlo vse po sreči, boste morda uporabili zastavico <tt>-s</tt> za program <tt>patch</tt>, kar pove <tt>patch</tt>u, naj sporoča le o napakah (v tem primeru boste sicer oropani za občutek, da vaš računalnik za spremembo nekaj počne, a boste morda vseeno raje storili tako). Če vas zanima, kateri deli se niso popravili povsem gladko, naredite cd<tt> /usr/src/linux</tt> in poiščite datoteke s podaljškom <tt>.rej</tt>. Nekatere starejše različice <tt>patch</tt>a pustijo podaljšek <tt>#</tt>. Za iskanje uporabite ,,<tt>find</tt>``: <tscreen><verb> # find . -name '*.rej' -print </verb></tscreen> <p> To izpiše vse datoteke s podaljškom <tt>.rej</tt>, ki prebivajo v trenutnem imeniku ali podimenikih, na standardni izhod. <p> Če je šlo vse kot po maslu, napravite ,,<tt>make clean</tt>``, ,,<tt>config</tt>``, in ,,<tt>dep</tt>``, kot je opisano v razdelkih <ref id="configuring" name=",,Kako zares sestaviti jedro``"> in <ref id="compiling" name=",,Prevajanje jedra``">. <p> Ukaz <tt>patch</tt> ima še precej dodatnih izbir. Zgoraj smo že omenili <tt>patch -s</tt>, ki zadrži izpis vseh sporočil, razen napak. Če imate izvirno kodo jedra v kakem drugem imeniku kot <tt>/usr/src/linux</tt>, uporabite v tem imeniku <tt>patch -p1</tt>. Druge izbire najdete z <tt>man patch</tt>. <sect1>Če se kje zalomi <p> (Opomba: Ta razdelek se nanaša predvsem na zelo stara jedra.) <p> Včasih je bil najpogostejši problem, da je popravek spremenil datoteko ,,<tt>config.in</tt>`` in ta ni bila čisto prava, saj ste spremenili izbire, da bi opisali opremo svojega stroja. To se je uredilo, a v starejših izdajah še vedno naletite na te nevšečnosti. Popravite jih tako, da si ogledate datoteko <tt>config.in.rej</tt> tako, da odgovarja prvotnemu popravku. Popravki bodo navadno označeni s simboloma ,,<tt>+</tt>`` in ,,<tt>-</tt>`` na začetku vrstice. Oglejte si okoliške vrstice in se spomnite, ali so bile nastavljene kot ,,<tt>y</tt>`` ali kot ,,<tt>n</tt>``. Zdaj popravite <tt>config.in</tt> in spremenite ,,<tt>y</tt>`` v ,,<tt>n</tt>`` in nasprotno, kjer je primerno. Naredite: <tscreen><verb> # patch -p0 < config.in.rej </verb></tscreen> in če <tt>patch</tt> sporoči, da mu je uspelo, lahko nadaljujete nastavljanje in prevajanje. Datoteka <tt>config.in.rej</tt> vam bo ostala, a jo lahko zbrišete. <p> Če imate še vedno težave, ste morda namestili popravek prek vrste. Če <tt>patch</tt> pravi ,,<tt>previously applied patch detected: Assume -R?</tt>``, verjetno poskušate namestiti popravek, ki je starejši od trenutne različice jedra; če odgovorite z ,,<tt>y</tt>``, bo <tt>patch</tt> poskušal podgraditi vašo izvirno kodo in najverjetneje mu bo spodletelo. Potrebovali boste popolno čisto novo drevo izvirne kode (kar je morda tako ali tako dobra zamisel). <p> Za razveljavitev popravkov uporabite ukaz ,,<tt>patch -R</tt>`` na prvotnem popravku. <p> Najbolje, kar lahko naredite, ko ne morete uporabiti popravkov, je, da začnete znova s čistim drevesom izvirne kode (na primer z eno od datotek <tt>linux-x.y.z.tar.gz</tt>) in znova začnete. <sect1>Kako se znebite datotek <tt>.orig</tt> <p> Po nekaj popravkih se bodo začele kopičiti datoteke <tt>.orig</tt>. 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 <tt>.orig</tt> je prihranila več kot pol megabajta. Zadevo uredite z ukazom: <tscreen><verb> # find . -name '*.orig' -exec rm -f {} ';' </verb></tscreen> Različice programa <tt>patch</tt>, ki uporabljajo <tt>#</tt> za zavrnitvene datoteke, uporabljajo za podaljšek tildo (,,<tt>.˜</tt>``) namesto ,,<tt>.orig</tt>``. Na voljo so tudi boljši načini za odpravo datotek <tt>.orig</tt>, ki temeljijo na GNU <tt>xargs</tt>: <tscreen><verb> # find . -name '*.orig' | xargs rm </verb></tscreen> ali ,,precej varna, a malo bolj izčrpna`` metoda: <tscreen><verb> # find . -name '*.orig' -print0 | xargs --null rm -- </verb></tscreen> <sect1>Drugi popravki <p> Razen Linusovih so na voljo tudi drugi popravki (rekel jim bom ,,nestandardni``). Če jih uporabite, Linusovi popravki morda ne bodo delovali pravilno in jih boste morali obnoviti, urediti izvirno kodo popravka, namestiti novo drevo izvirne kode ali kombinacijo naštetega. To lahko postane zelo naporno, zatorej, če ne želite spreminjati izvirne kode (z morda slabim izidom), naredite rezervne kopije nestandardnih popravkov, preden uporabite Linusove, ali le namestite novo drevo. Potem lahko preverite, ali nestandardni popravki delujejo. Če ne, morate ostati pri starem jedru in se igrati s popravki ali izvirno kodo, da bi dosegli delovanje, ali čakati (morda celo prosjačiti) za novo različico popravkov. <p> Kako pogosti so popravki, ki niso v standardnih distribucijah? Verjetno boste slišali zanje. Jaz uporabljam popravek <tt>noblink</tt> za 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 se uporaba ,,nestandardnih`` popravkov znatno manjša. <sect>Dodatni paketi<label id="additional_packages"> <p> Vaše Linuxovo jedro ima vrsto odlik, ki niso pojasnjene v sami izvirni kodi jedra; te posebnosti se navadno dosežejo z uporabo zunanjih paketov. Tu naštevam nekaj najpogostejših. <sect1>kbd <p> Linuxov zaslon (console) ima najbrž več zmožnosti, kot si jih zasluži (op.: prevajalec se ne strinja). Med temi so možnost preklapljanja znakov, preslikave tipkovnice, preklop video načinov (v novejših jedrih) itd. V paketu kbd so programi, ki uporabniku omogočajo vse to, in še veliko znakov in načrtov tipkovnic za skoraj vsako tipkovnico. Paket dobite na istih mestih kakor izvirno kodo jedra. <sect1>util-linux <p> Rik Faith <<tt><htmlurl url="mailto:faith@cs.unc.edu" name="faith@cs.unc.edu"></tt>> je sestavil veliko zbirko uporabnih programov za Linux, ki se imenujejo util-linux. Trenutno jih vzdržuje Andries Brouwer <<tt><htmlurl url="mailto:util-linux@math.uio.no" name="util-linux@math.uio.no"></tt>>. Po anonimnem FTP dobite na <tt><url url="ftp://metalab.unc.edu/pub/Linux/system/misc/"></tt> programe, kot so <tt>setterm</tt>, <tt>rdev</tt> in <tt>ctrlaltdel</tt>, ki se nanašajo na jedro. Kakor pravi Rik, ničesar ne nameščajte, ne da bi prej premislili, ni vam treba nameščati vsega in lahko imate resne težave, če boste namestili vse. <sect1>hdparm <p> 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 diskom pa se razširjajo posebej. <sect1>gpm <p> gpm pomeni ,,splošno uporabna miška`` (ang. general purpose mouse). S tem programom lahko besedilo izrezujete in lepite z enega navideznega zaslona na drugega in počnete še druge stvari s celo paleto različnih mišk. <sect>Nekatere pasti <p> <sect1>make clean <p> Če po rutinski nadgradnji jedro počne zares čudne reči, ste pred prevajanjem novega jedra morda pozabili napisati <tt>make clean</tt>. Simptomi so lahko karkoli, od zmrznjenega sistema, čudnih V/I problemov do slabega (počasnega) delovanja. Preverite tudi, ali ste ukazali <tt>make dep</tt>. <sect1>Velika ali počasna jedra<label id="big_n_slow"> <p> Č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ščin (gonilnikov naprav, datotečnih sistemov itd.). Če naprave ne uporabljate, je ne podprite v jedru, saj to zasede pomnilnik. Najočitnejši simptom prenapihnjenega jedra je ekstremno izmenjavanje pomnilnika z diskom sem ter tja; če se vaš disk nenehno oglaša in ni eden tistih starih Fujitsujevih Eagles, katerih zvok lahko primerjamo s pristajanjem reaktivnih letal, preglejte nastavitve jedra. <p> Koliko pomnilnika zaseda jedro, izveste z odštevanjem vrednosti ,,total mem`` v izpisu <tt>/proc/meminfo</tt> ali z izhodom ukaza ,,<tt>free</tt>`` od količine vsega pomnilnika. <sect1>Vzporedna vrata ne delujejo/tiskalnik ne deluje <p> Nastavitvene izbire za računalnike PC 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). <p> Potem so tu še imena. Linux 2.2 poimenuje tiskalniške naprave drugače od prejšnjih izdaj. Posledica tega je, da napravi <tt>lp1</tt> v vašem starem jedru v novem jedru verjetno ustreza naprava <tt>lp0</tt>. Uporabite <tt>dmesg</tt> ali poglejte v dnevnik v imeniku <tt>/var/log</tt> ter ugotovite novo ime. <sect1>Jedro se ne prevede <p> Če se ne prevede, je verjetno krivo to, da je popravek spodletel ali pa je vaša izvirna koda nekako pokvarjena. Morda nimate prave različice prevajalnika <tt>gcc</tt> ali pa je tudi z njim kaj narobe (na primer, vključne datoteke so lahko napačne). Preverite, ali so simbolične povezave, ki jih Linus priporoča v datoteki <tt>README</tt>, pravilno izvedene. V splošnem, če se standardna jedra ne prevajajo, je nekaj resno narobe s sistemom in vnovična namestitev nekaterih orodij je neizogibna. <p> V nekaterih primerih lahko <tt>gcc</tt> odpove zaradi strojnih težav. Sporočila o takih napakah so nekaj kot ,,xxx exited with signal 15`` in so navadno videti zelo skrivnostno. Tega sploh ne bi omenil, a se mi je nekoč zgodilo, da sem imel nekaj slabega predpomnilnika in prevajalnik se je pritoževal povsem naključno. Če imate težave, poskusite najprej znova namestiti gcc. Sumničavi postanite samo, če se vaše jedro lepo prevede z izključenim zunanjim predpomnilnikom, zmanjšano količino RAM ipd. <p> Ljudje so navadno vznemirjeni, ko izvejo, da bi lahko imeli tudi težave s strojno opremo. Hja, tega si ne izmišljujem. Cel kup pogostih vprašanj je tudi na to temo -- najdete jih na <tt><url url="http://www.bitwizard.nl/sig11/"></tt>. <sect1>Novo jedro se noče zagnati <p> Niste pognali programa lilo ali pa ga niste pravilno nastavili. Nekoč me je zafrkavala vrstica v konfiguracijski datoteki lila, ki je bila ,,<tt>boot = /dev/hda1</tt>`` namesto ,,<tt>boot = /dev/hda</tt>``. (To je lahko sprva zelo moteče, a ko imate enkrat delujočo nastavitveno datoteko, vam je ni treba spreminjati.) <sect1>Pozabili ste pognati lilo ali pa se sistem sploh ne zažene <p> Ojoj! Najboljše, kar lahko storite ta hip, je, da zaženete operacijski sistem z diskete ali s plošče CD-ROM in potem pripravite še eno zaganjalno disketo (kot bi jo naredil ukaz ,,<tt>make zdisk</tt>``). Vedeti morate, kje je vaš korenski (<tt>/</tt>) datotečni sistem in katere vrste je (npr. second extended, minix). V spodnjem primeru morate vedeti tudi, v kakšnem datotečnem sistemu leži vaše drevo izvirne kode <tt>/usr/src/linux</tt>, kakšne vrste je in kje je navadno nameščen (z <tt>mount</tt>). <p> V naslednjem primeru je <tt>/</tt> enak <tt>/dev/hda1</tt> in datotečni sistem, ki vsebuje <tt>/usr/src/linux</tt> na <tt>/dev/hda3</tt>, navadno nameščen na <tt>/usr</tt>. Oba sta datotečna sistema vrste ext2 (second extended). Delujoča slika jedra v imeniku <tt>/usr/src/linux/arch/i386/boot</tt> se imenuje <tt>bzImage</tt>. <p> Zamisel je taka, da uporabimo delujoče jedro <tt>zImage</tt> 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 za tem zgledom. <p> Najprej zaženite sistem s kombinacije disket boot in root ali z reševalne diskete in namestite delujočo sliko jedra: <tscreen><verb> # mkdir /mnt # mount -t ext2 /dev/hda3 /mnt </verb></tscreen> <p> Če vam <tt>mkdir</tt> pravi, da imenik že obstaja, se ne zmenite zanj. Zdaj pojdite z ukazom <tt>cd</tt> na imenik, v katerem je delujoče jedro. Pozorni bodite na to, da je <verb> /mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot </verb> V disketni pogon ,,A:`` vložite formatirano disketo (ne diskov boot ali root!), prepišite sliko jedra na disketo in jo nastavite za svoj korenski datotečni sistem. <tscreen><verb> # cd /mnt/src/linux/arch/i386/boot # dd if=bzImage of=/dev/fd0 # rdev /dev/fd0 /dev/hda1 </verb></tscreen> Naredite <tt>cd</tt> na <tt>/</tt> in odmestite običajni datotečni sistem <tt>/usr</tt>: <tscreen><verb> # cd / # umount /mnt </verb></tscreen> Zdaj lahko še enkrat zaženete sistem z nove diskete. Ne pozabite tokrat po zagonu pognati <tt>lilo</tt> (ali karkoli je že bilo narobe)! Kot smo omenili zgoraj, je možna še ena običajna pot. Če imate delujočo sliko jedra v <tt>/</tt> (<tt>/vmlinuz</tt>, na primer), jo lahko uporabite za zagonsko disketo. Če veljajo vsi zgoraj našteti pogoji in je slika jedra <tt>/vmlinuz</tt>, izvedite te spremembe v zgoraj opisanem zgledu: spremenite <tt>/dev/hda3</tt> v <tt>/dev/hda1</tt> (datotečni sistem <tt>/</tt>), <tt>/mnt/src/linux</tt> v <tt>/mnt</tt>, in <tt>if=bzImage</tt> v <tt>if=vmlinuz</tt>. Opombo o tem, kako dobimo <tt>/mnt/src/linux</tt>, lahko spregledate. Uporaba programa lilo na velikih diskih (večjih od 1024 cilindrov) lahko povzroča težave. Preberite lilo mini-HOWTO ali dokumentacijo lila, če potrebujete pomoč pri tem. <sect1>Izpiše ,,<tt>warning: bdflush not running</tt>`` <p> To je lahko resen problem. Od jedra izdaje po 1.0 (okoli 20. aprila 1994) se je program ,,<tt>update</tt>``, ki periodično izplakne vmesni pomnilnik datotečnega sistema, posodabljal in nadomestil. Dobite izvirno kodo ,,<tt>bdflush</tt>`` (najdete jo tam, kjer ste našli jedro) in namestite ta program (verjetno boste medtem pognati vaš sistem pod starim jedrom). Program se sam namesti kot ,,<tt>update</tt>`` in po vnovičnem zagonu se novo jedro ne bo več pritoževalo. <sect1>Mojega pogona CD-ROM IDE/ATAPI ne prepričam, da bi deloval <p> Čudno, a marsikdo ne more pripraviti pogona ATAPI do tega, da bi deloval, verjetno zato, ker gre lahko marsikaj narobe. <p> Če je vaš CD-ROM edina naprava na konkretnem vmesniku IDE, morate nastaviti skakače kot ,,master`` ali ,,single``. To je menda najpogostejša napaka. <p> Creative Labs (na primer) je postavil vmesnik IDE na zvočne kartice. A posledica tega je, da imajo nekateri ljudje en sam vmesnik, veliko jih ima dva vmesnika IDE na matičnih ploščah (navadno na IRQ15), torej je splošna praksa označiti vmesnik SoundBlasterja kot tretji vhod IDE (IRQ11, pravijo). <p> To pri Linuxu povzroča težave, saj različice 1.2.x ne podpirajo tretjega vmesnika IDE (ta podpora je v serijah 1.3.x, a to je razvojna različica, saj se spomnite, in ne izvaja avtomatskega iskanja). Temu se lahko izognemo na več načinov. <p> Č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. <p> Č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. <sect1>Izpisuje čudne reči o zastarelih zahtevah za usmerjanje (obsolete routing requests) <p> Poiščite novo različico programa <tt>route</tt> in vseh drugih usmerjevalnih programov. Datoteka <tt>/usr/include/linux/route.h</tt> (ki je pravzaprav v imeniku <tt>/usr/src/linux</tt>) se je spremenila. <sect1>Požarni zid ne deluje v 1.2.0 <p> Nadgradite vsaj na različico 1.2.1. <sect1>,,<tt>Not a compressed kernel Image file</tt>`` (datoteka s sliko jedra ni stisnjena) <p> Ne uporabljajte datoteke <tt>vmlinux</tt>, ki je narejena v imeniku <tt>/usr/src/linux</tt>, kot zaganjalno sliko; <tt>[..]/arch/i386/boot/bzImage</tt> je prava datoteka. <sect1>Težave z zaslonskim terminalom po nadgradnji na 1.3.x <p> Spremenite besedo <tt>dumb</tt> v <tt>linux</tt> v opisu zaslonskega terminala v datoteki <tt>/etc/termcap</tt>. Morda boste morali tudi narediti nov zapis. <sect1>Po nadgradnji jedra ne morem prevajati <p> Izvirno kodo jedra Linuxa sestavljajo številne datoteke (datoteke, ki se končujejo na <tt>.h</tt>), na katere se sklicujejo standardne datoteke v imeniku <tt>/usr/include</tt>. Nanje se navadno sklicujemo takole (tu je <tt>xyzzy.h</tt> nekaj v imeniku <tt>/usr/include/linux</tt>): <tscreen><verb> #include <linux/xyzzy.h> </verb></tscreen> Navadno je v imeniku <tt>/usr/include</tt> povezava, imenovana <tt>linux</tt>, z imenikom <tt>include/linux</tt> vaše izvirne kode jedra (<tt>/usr/src/linux/include/linux</tt> v tipičnem sistemu). Če te povezave ni tam ali če kaže na napačen kraj, se večina stvari sploh ne bo prevedla. Če ste se odločili, da zaseda izvirna koda jedra preveč prostora na disku in ste jo zbrisali, je očitno v tem težava. Lahko pa je tudi kaj narobe z dovoljenji datotek; če ima vaš <tt>root</tt> nastavitev umask, ki ne dovoljuje drugim uporabnikom, da bi kot privzeto lahko gledali njegove datoteke, in ste izluščili izvirno kodo jedra brez izbire <tt>p</tt> (ohrani datotečne načine), ti uporabniki ne bodo mogli uporabljati prevajalnika za C. Čeprav lahko uporabite ukaz <tt>chmod</tt> in to popravite, je verjetno laže še enkrat izvleči vključene datoteke. To lahko storite enako, kot ste storili na začetku z vso izvirno kodo, le z dodatnim argumentom: <tscreen><verb> # tar zxvpf linux.x.y.z.tar.gz linux/include </verb></tscreen> Opomba: ,,<tt>make config</tt>`` bo naredil povezavo <tt>/usr/src/linux</tt>, če je še nimate. <sect1>Povečanje omejitev <p> Naslednji zgled ukazov utegne koristiti tistim, ki se sprašujete, kako povečati nekatere mehke omejitve, ki jih privzame jedro: <tscreen><verb> # echo 4096 > /proc/sys/kernel/file-max # echo 12288 > /proc/sys/kernel/inode-max # echo 300 400 500 > /proc/sys/vm/freepages </verb></tscreen> <sect>Opomba o nadgradnji na različice 2.0.x, 2.2.x <p> Jedra različic 2.0.x in 2.2.x so uvedla precej sprememb pri namestitvi. Preberite si datoteko <tt>Documentation/Changes</tt> v drevesu izvirne kode jedra in se naučite nadgraditi 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. <sect>Moduli<label id="moduls"> <p> 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č. <sect1>Namestitev modulskih pripomočkov <p> Modulski pripomočki so na voljo, kadarkoli dobite izvirno kodo vašega jedra kot <tt>modutils-x.y.z.tar.gz</tt>; izberite najvišjo številko različice <tt>x.y.z</tt>, ki je enaka vašemu jedru ali manjša. Odpakirajte jih z ,,<tt> tar zxvf modutils-x.y.z.tar.gz</tt>``, pojdite s <tt>cd</tt> na imenik, ki ga ustvari <tt>tar</tt> (<tt>modutils-x.y.z</tt>), preglejte datoteko <tt>README</tt> in upoštevajte navodila (kar je navadno preprosto, denimo <tt>make install</tt>). Zdaj morate imeti programe <tt>insmod</tt>, <tt>rmmod</tt>, <tt>ksyms</tt>, <tt>lsmod</tt>, <tt>genksyms</tt>, <tt>modprobe</tt> in <tt>depmod</tt> v imeniku <tt>/sbin</tt>. Če želite, lahko preskusite pripomočke s preizkuševalnim gonilnikom ,,hw`` v programu <tt>insmod</tt>; preberite si datoteko <tt>INSTALL</tt> v tem podimeniku, če vas zanimajo podrobnosti. <p> <tt>insmod</tt> vključi modul v tekoče jedro. Moduli imajo navadno podaljšek <tt>.o</tt>; preizkuševalni gonilnik, omenjen zgoraj, se imenuje <tt>drv_hello.o</tt>, torej morate napisati ,,<tt>insmod drv_hello.o</tt>``, če ga želite vključiti. Module, ki jih jedro trenutno uporablja, lahko izpišete z <tt>lsmod</tt>. Izhod je videti takole: <tscreen><verb> blah:# lsmod Module: #pages: Used by: drv_hello 1 </verb></tscreen> ,,<tt>drv_hello</tt>`` je ime modula, uporablja eno stran (4 KB) pomnilnika in noben drug jedrni modul trenutno ni odvisen od njega. Ta modul odstranite z ukazom ,,<tt>rmmod drv_hello</tt>``. Paziti morate, ker hoče <tt>rmmod</tt> ime modula, ne imena datoteke; dobite ga z izpisom <tt>lsmod</tt>. Nameni drugih modulskih pripomočkov so našteti v njihovih referenčnih priročnikih (npr. <tt>man ksyms</tt>). <sect1>Moduli, distribuirani poleg jedra <p> Od različice 2.0.30 je večina dostopna kot nalagalni modul. Če jih želite uporabiti, morate nastaviti podatke o njih v običajnem jedru; to se pravi, ne odgovorite ,,<tt>y</tt>`` med ,,<tt>make config</tt>``, temveč ,,<tt>m</tt>``. Prevedite novo jedro in z njim zaženite sistem. Potem naredite ,,<tt>cd /usr/src/linux</tt>`` in ukažite ,,<tt>make modules</tt>``. To prevede vse module, ki jih niste že navedli v konfiguraciji jedra, in v imenik <tt>/usr/src/linux/modules</tt> namesti povezave do njih. Uporabite jih lahko v tem imeniku ali pa izvedete ,,<tt>make modules_install</tt>`` ter jih s tem namestite v imenik <tt>/lib/modules/x.y.z</tt>, kjer je <tt>x.y.z</tt> številka izdaje jedra. <p> To je lahko še posebno uporabno pri datotečnih sistemih. Morda ne uporabljate pogosto datotečnih sistemov minix in/ali msdos. Na primer, kadar dobim dosovsko (brrr) disketo, naredim <tt>insmod /usr/src/linux/modules/msdos.o</tt>, in potem <tt>rmmod msdos</tt>, ko opravim z njo. Ta postopek privarčuje okoli 50 KB RAM v jedru med normalnim delovanjem. Pri datotečnem sistemu minix ne bo odveč drobna pripomba: vedno ga podprite neposredno v jedru, da boste lahko uporabljali ,,reševalne`` diskete. <sect>Nasveti in triki<label id="tips_n_tricks"> <p> <sect1>Preusmeritev izhoda ukazov <tt>make</tt> in <tt>patch</tt> <p> Če želite videti, kaj je naredil ukaz ,,<tt>make</tt>`` ali ,,<tt>patch</tt>``, lahko preusmerite standardni izhod programa v datoteko. Najprej ugotovite, katero ukazno lupino uporabljate: ,,<tt>grep root /etc/passwd</tt>``, in glejte nekaj podobnega temu: ,,<tt>/bin/csh</tt>``. Če uporabljate <tt>sh</tt> ali <tt>bash</tt>, boste takole preusmerili izhod ukaza <em>(ukaz)</em> v datoteko <em>(izhodna_datoteka)</em>: <tscreen><verb> # (ukaz) 2>&1 | tee (izhodna_datoteka) </verb></tscreen> Za <tt>csh</tt> ali <tt>tcsh</tt> uporabite: <tscreen><verb> # (ukaz) |& tee (izhodna_datoteka) </verb></tscreen> Za lupino <tt>rc</tt> (verjetno je ne uporabljate) je ustrezen ukaz <tscreen><verb> # (ukaz) >[2=1] | tee (izhodna_datoteka) </verb></tscreen> <sect1>Pogojna namestitev jedra <p> Poleg rabe disket je še več metod preizkušanja novega jedra, ne da bi se dotaknili starega. Za razliko od številnih Unixov je lilo sposoben zagnati jedro s kateregakoli mesta na disku (če imate disk, večji od 500 MB, preberite dokumentacijo lila, kako preprečiti težave). Če torej na konec konfiguracijske datoteke dodaste nekaj podobnega: <tscreen><verb> image = /usr/src/linux/arch/i386/boot/bzImage label = new_kernel </verb></tscreen>, lahko izberete zagon novega jedra, ne da bi se dotaknili starega jedra <tt>/vmlinuz</tt> (seveda morate še pognati <tt>lilo</tt>). Najpreprostejši zagon novega jedra je, da pritisnete ob zagonu tipko Shift (ko se na zaslonu izpiše <tt>LILO</tt> in nič drugega), kar vam da pozivnik. Zdaj lahko vnesete ,,<tt>new_kernel</tt>`` in zagnalo se bo novo jedro. Če želite obdržati več dreves izvirne kode različnih jeder (to lahko sicer zasede veliko diskovnega prostora), je najpogostejši način ta, da jih preimenujete v <tt>/usr/src/linux-x.y.z</tt>, pri čemer je <tt>x.y.z</tt> različica jedra. Potem lahko ,,izberete`` drevo izvirne kode s simbolično povezavo, npr. ,,<tt>ln -sf linux-1.2.2 /usr/src/linux</tt>`` naredi drevo 1.2.2 za trenutno aktualno. Preden naredite to simbolično povezavo, preverite, ali zadnji argument programu <tt>ln</tt> ni pravi imenik (stare simbolične povezave so v redu); rezultat ne bo tak, kakor bi želeli. <sect1>Nadgradnje jedra <p> Russell Nelson <<tt>nelson@crynwr.com</tt>> zbira spremembe v novih izdajah jedra. Te so kratke, lahko si jih ogledate, preden nadgradite jedro. Najdete jih na <tt><url url="ftp://ftp.emlist.com/pub/kchanges/"></tt> ali v svetovnem spletu na naslovu <tt>url url="http://www.crynwr.com/kchanges"></tt>. <sect>Drugi HOWTO, ki bi lahko bili uporabni <p> <itemize> <item><tt>Sound-HOWTO</tt>: zvočne kartice in pripomočki, <item><tt>SCSI-HOWTO</tt>: vse o krmilnikih in napravah SCSI, <item><tt>NET-2-HOWTO</tt>: omreženost, <item><tt>PPP-HOWTO</tt>: omreženost s PPP še posebej, <item><tt>PCMCIA-HOWTO</tt>: o gonilnikih za notes, <item><tt>ELF-HOWTO</tt>: ELF: kaj je prenos, <item><tt>Hardware-HOWTO</tt>: pregled podprte strojne opreme, <item><tt>Module mini-HOWTO</tt>: več o modulih jedra, <item>Kerneld mini-HOWTO: o demonu <tt>kerneld</tt>, <item>BogoMips mini-HOWTO: če se slučajno sprašujete. </itemize> <sect>Razno <p> <sect1>Avtor <p> Avtor in vzdrževalec priročnika Linux Kernel-HOWTO je Brian Ward <<tt><htmlurl url="mailto:bri@cs.uchicago.edu" name="bri@cs.uchicago.edu"></tt>>. Prosim, pošiljajte mi morebitne pripombe, dodatke, popravke (ti so zame najpomembnejši). <p> Mojo domačo stran najdete na enem od teh dveh URL: <itemize> <item><tt><url url="http://www.math.psu.edu/bri/"></tt> <item><tt><url url="http://blah.math.tu-graz.ac.at/~bri/"></tt> </itemize> Čeprav se trudim odgovoriti čisto vsakomur, vedite, da prejmem vsak dan veliko pošte, zato bo lahko trajalo dolgo, preden boste dobili moj odgovor. Kadar me pisno kaj sprašujete, bodite čim bolj jasni in podrobni. Če pišete o nedelujoči strojni opremi (ali čem podobnem), moram vedeti, kakšna je vaša celotna strojna konfiguracija. Če poročate o napaki, ne recite le ,,Poskusil sem to in to, pa mi je sporočilo napako``; vedeti moram tudi, za katero napaka je šlo. Vedeti želim tudi za različico jedra, prevajalnika gcc in knjižnice libc, ki jih uporabljate. Če mi poveste, da uporabljate to-in-to distribucijo, mi s tem ne boste povedali kaj dosti. Ne moti me, če vprašate kaj preprostega; če ne boste vprašali, potem tudi nikoli ne boste izvedeli, kar vas zanima! Želim se zahvaliti vsem, ki so mi posredovali povratne informacije. <p> Če vaše vprašanje ni povezano z jedrom ali je v jeziku, ki ga ne razumem, vam morda ne bom odgovoril. <p> Če ste mi pisali in vam nisem odgovoril v razumnem roku (trije tedni ali več), sem vaše sporočilo morda pomotoma zbrisal ali kaj takega (oproščam se za to). Prosim, poskusite znova. <p> Pogosto mi pišejo o stvareh v zvezi s strojno opremo. S tem ni nič narobe, vendar morate vedeti, da ne poznam vse strojne opreme tega sveta. Osebno uporabljam procesorje AMD, krmilnike SCSI izdelovalcev Adaptec in Sybios ter diske SCSI znamke IBM. <p> Različica -0.1 angleškega izvirnika je bila napisana 3. oktobra 1994. Izvirnik je dostopen kot SGML, postscript, TeX, roff in kot navadno besedilo. <p> Avtor slovenskega prevoda z dne 24. julija 1999 je Roman Maurer <<tt><htmlurl url="mailto:roman.maurer@hermes.si" name="roman.maurer@hermes.si"></tt>>. Prosim, pošljite mi morebitne pripombe na prevod. Slovenski prevod je dostopen kot SGML DTD LinuxDoc, HTML, DVI, PDF, postscript in navadno besedilo v strežniku slovenskega Društva uporabnikov Linuxa na imeniku <url url="ftp://ftp.lugos.si/pub/lugos/doc/HOWTO-sl/"> ali spletnem naslovu <url url="http://www.lugos.si/delo/slo/HOWTO-sl/Kernel-HOWTO-sl.html">. <sect1>Narediti <p> Razdelek <ref id="tips_n_tricks" name=",,Nasveti in zvijače``"> je bolj kratek. Upam, da ga bom razširil s predlogi drugih ljudi. <p> Enako velja za razdelek <ref id="additional_packages" name=",,Dodatni paketi``">. <p> Potrebujemo več podatkov o razhroščevanju/odpravljanju posledic sesutja sistema. <sect1>Prispevki <p> Vključen je majhen del Linusove datoteke <tt><htmlurl url="file:/usr/src/linux/README" name="README"></tt> (izbire za hekiranje jedra). (Hvala, Linus!) <itemize> <item><tt><htmlurl url="mailto:uc@brian.lunetix.de" name="uc@brian.lunetix.de"></tt> (Ulrich Callmeier): <tt>patch -s</tt> in <tt>xargs</tt>, <item><tt><htmlurl url="mailto:quinlan@yggdrasil.com" name="quinlan@yggdrasil.com"></tt> (Daniel Quinlan): popravki in dodatki več razdelkov, <item><tt><htmlurl url="mailto:nat@nataa.fr.eu.org" name="nat@nataa.fr.eu.org"></tt> (Nat Makarevitch): <tt>mrproper</tt>, <tt>tar -p</tt>, več drugih reči, <item><tt><htmlurl url="mailto:boldt@math.ucsb.edu" name="boldt@math.ucsb.edu"></tt> (Axel Boldt): po omrežju je zbral opise konfiguracijskih izbir jedra; potem mi je poslal seznam, <item><tt><htmlurl url="mailto:lembark@wrkhors.psyber.com" name="lembark@wrkhors.psyber.com"></tt> (Steve Lembark): predlog različnega zaganjanja, <item><tt><htmlurl url="mailto:kbriggs@earwax.pd.uwa.edu.au" name="kbriggs@earwax.pd.uwa.edu.au"></tt> (Keith Briggs): nekateri popravki in predlogi, <item><tt><htmlurl url="mailto:rmcguire@freenet.columbus.oh.us" name="rmcguire@freenet.columbus.oh.us"></tt> (Ryan McGuire): dodatki ciljev <tt>make</tt>, <item><tt><htmlurl url="mailto:dumas@excalibur.ibp.fr" name="dumas@excalibur.ibp.fr"></tt> (Eric Dumas): francoski prevod, <item><tt><htmlurl url="mailto:simazaki@ab11.yamanashi.ac.jp" name="simazaki@ab11.yamanashi.ac.jp"></tt> (Yasutada Shimazaki): japonski prevod, <item><tt><htmlurl url="mailto:jjamor@lml.ls.fi.upm.es" name="jjamor@lml.ls.fi.upm.es"></tt> (Juan Jose Amor Iglesias): španski prevod, <item><tt><htmlurl url="mailto:mva@sbbs.se" name="mva@sbbs.se"></tt> (Martin Wahlen): švedski prevod, <item><tt><htmlurl url="mailto:jzp1218@stud.u-szeged.hu" name="jzp1218@stud.u-szeged.hu"></tt> (Zoltan Vamosi): madžarski prevod, <item><tt><htmlurl url="mailto:bart@mat.uni.torun.pl" name="bart@mat.uni.torun.pl"></tt> (Bartosz Maruszewski): poljski prevod, <item><tt><htmlurl url="mailto:roman.maurer@hermes.si" name="roman.maurer@hermes.si"></tt> (Roman Maurer): slovenski prevod, <item><tt><htmlurl url="mailto:donahue@tiber.nist.gov" name="donahue@tiber.nist.gov"></tt> (Michael J. Donahue): tipkarske napake, zmagovalec ,,tekmovanja narezanega kruha``, <item><tt><htmlurl url="mailto:rms@gnu.ai.mit.edu" name="rms@gnu.ai.mit.edu"></tt> (Richard Stallman): zamisel in distribucija ,,proste`` dokumentacije, <item><tt><htmlurl url="mailto:dak@Pool.Informatik.RWTH-Aachen.DE" name="dak@Pool.Informatik.RWTH-Aachen.DE"></tt> (David Kastrup): reč o NFS, <item><tt><htmlurl url="mailto:esr@snark.thyrsus.com" name="esr@snark.thyrsus.com"></tt> (Eric Raymond): različni delčki. </itemize> Pomagali so mi tudi vsi tisti, ki so mi po pošti posredovali svoja vprašanja in težave. <sect1>Pravice razširjanja, licenca in podobno <p> Copyright © Brian Ward, 1994--1999. <p> Dovoljeno je izdelovati in razširjati kopije tega priročnika, če ostaneta v njih nespremenjeni opomba o pravicah razširjanja in tale opomba o dovoljenju. <p> 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 o dovoljenju. Prevodi sodijo v kategorijo ,,spremenjenih različic``. <p> Garancija: Ni je. <p> Priporočila: Komercialno razširjanje je dovoljeno in celo zaželeno; vendar se močno priporoča, da se distributer poveže z avtorjem še pred distribucijo, da bi obdržali stvari osvežene (lahko mi pošljete tudi kopijo tistega, kar izdelujete, če ste že pri tem). Avtor svetuje tudi prevajalcem, naj stopijo v stik z njim, preden se lotijo prevajanja. Natisnjene različice so videti bolje. Lahko jih recikliramo. </article>