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 nastavitev jedra operacijskega sistema Linux, prevajanja, nadgradnje in odpravljanja problemov za sisteme s procesorji ix86. <toc> <sect>Uvod <p> Naj sploh berete ta dokument? No, poglejte, če imate 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 preprosto morate imeti. <item>Nimate najmanjšega pojma, kako prevesti jedro. <item>,,Je stvar v datoteki <tt>README</tt> res vsa zgodba?`` <item>Prišli ste, poskusili, ni delovalo. <item>Potrebujete nekaj, kar bi dali ljudem, ki vas mučijo s prošnjami, da namesto njih namestite njihova jedra. </itemize> <sect1>Najprej preberite tole! (In to res mislim!) <p> Nekateri primeri 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 razparcionirate svoj disk, dodate novega, ponovno namestite svoj sistem, ali kaj podobnega. <p> 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! <sect1>O stilu <p> <tt>Besedilo, ki je videti takole</tt> 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: ,,<tt>make config</tt>``. <sect>Pomembna vprašanja in njihovi odgovori <p> <sect1>Kaj pravzaprav sploh počne jedro? <p> 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. <p> Gotovo ima jedro več dolžnosti kot samo ti dve, a najpomembneje je, da poznate ti, osnovni. <sect1>Zakaj bi si želeli nadgraditi svoje 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 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. <sect1>Katero strojno opremo podpirajo nova jedra? <p> Preberite <tt>Hardware-HOWTO</tt>. Kot alternativo lahko pogledate datoteko <tt>config.in</tt>, v Linuxovi izvorni kodi, 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 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. <sect1>Kaj je nalagalni modul (loadable module)? <p> 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. <sect1>Koliko prostora potrebujem na disku? <p> 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. <sect1>Kako dolgo traja? <p> 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 ... <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 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. <sect>Kako zares sestaviti jedro<label id="configuring"> <p> <sect1>Nabava izvorne kode <p> Izvorno kodo lahko dobite po anonimnem FTP-ju s 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. Izvorna 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 navadno premorejo 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 potrebno manj časa). <p> Najboljše bo, če za prenos uporabite <tt>ftp.xx.kernel.org</tt>, kjer 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 izvorne 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 izvorno kodo jedra (večina jih stori tako), bo tam že imenik ,,<tt>linux</tt>``, 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 ,,<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 se počutite malo bolj lahkomiselne, preprosto pobrišite celoten imenik. V vsakem primeru se prepričajte, da v <tt>/usr/src</tt> nimate imenika ,,<tt>linux</tt>``, preden odpakirate celotno izvorno kodo. <p> Zdaj v imeniku <tt>/usr/src</tt> odpakirajte izvorno 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 izvorne 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 ostalih datotek <tt>.o</tt> itd. <p> Če imate datoteko <tt>.bz2</tt> in pripomoček <tt>bzip2</tt> (več o tem 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: Nekaj 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 vas vpraša veliko vprašanj. Potrebuje ukazno lupino <tt>bash</tt>, zato preverite, če ta obstaja 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 ,,<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, lahko greste nazaj in zadevo popravite. <p> Z uporabo ,,<tt>make menuconfig</tt>`` ali ,,<tt>make xconfig</tt>`` bodo nastavitvene izbire urejene hierarhično. <p> Pripravljeni ste na odgovarjanje nekaj vprašanj, navadno z ,,<tt>y</tt>`` (da) ali ,,<tt>n</tt>`` (ne). Gonilnik 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. 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 <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. Tukaj je seznam nekaterih najpomembnejših odlik, s hierarhijo, v kateri jih najdete, in kratkim opisom. <sect2>Kernel math emulation (Processor type and features) <p> [ Emulacija matematičnih operacij v jedru (Vrsta in lastnosti procesorja) ] <p> Če nimate matematičnega koprocesorja (imate le goli procesor 386 ali 486SX), morate tukaj reči ,,<tt>y</tt>``. Če imate koprocesor in rečete ,,<tt>y</tt>``, 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. <sect2>Enhanced (MFM/RLL) disk and IDE disk/cdrom support (Block Devices) <p> [ Podpora izboljšanim diskom (MFM/RLL) in diskom/CD-ROM-om tipa IDE (Blokovne naprave) ] <p> 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. <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; 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. <sect2>Networking support (General Setup) <p> [ Omrežna podpora (Splošne nastavitve) ] <p> Tukaj boste zelo verjetno rekli ,,<tt>y</tt>``, 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 ,,<tt>y</tt>``. Pozneje vas bo program vprašal, če ž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> 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 ,,<tt>n</tt>`` ni dobra ideja, razen, če točno veste, kaj počnete. <sect2>Processor family (Processor type and features) <p> [ Procesorska družina (Vrsta in lastnosti procesorja) ] <p> (v starejših jedrih: uporabite zastavico <tt>-m486</tt> za optimizacije za 486) <p> 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 ,,<tt>386</tt>`` bo delovalo na vseh strojih. <sect2>SCSI support <p> [ Podpora SCSI ] <p> Če imate naprave tipa SCSI, recite ,,<tt>y</tt>``. Vprašani boste po nadaljnih podatkih, kot je podpora CD-ROM-om, diskom in katere vrste vmesnik SCSI imate. Za več podrobnosti preberite <tt>SCSI-HOWTO</tt>. <sect2>Network device support <p> [ Podpora omrežnim napravam ] <p> Če imate mrežno kartico ali bi radi uporabljali SLIP, PPP ali paralelni vmesnik za dostop na Internet, recite ,,<tt>y</tt>``. Nastavitveni skript vas bo vprašal o tipu kartice in protokolu, ki ga boste uporabljali. <sect2>Filesystems <p> [ Datotečni sistemi ] <p> Nastavitveni skript vas bo vprašal, če želite imeti naslednje datotečne sisteme podprte v jedru: <itemize> <item><tt>Standard (minix)</tt> - 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. <item><tt>Second extended</tt> - To je standardni datotečni sistem Linuxa. Skoraj zagotovo ga imate in morate reči ,,<tt>y</tt>``. <item><tt>msdos</tt> - Če želite uporabljate particije MS-DOS-a na trdem disku ali nameščati dosovske formatirane diskete, recite ,,<tt>y</tt>``. <p> Dostopnih je še mnogo drugih tujih datotečnih sistemov. <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. Veliko izpisovalcev procesov (npr. ,,<tt>ps</tt>``) ga uporablja. Poskusite kdaj ,,<tt>cat /proc/meminfo</tt>`` ali ,,<tt>cat /proc/devices</tt>``. Nekatere ukazne lupine (posebej <tt>rc</tt>) uporabljajo <tt>/proc/self/fd</tt> (na drugih sistemih znan kot <tt>/dev/fd</tt>) za vhodno/izhodne (V/I) operacije. Skoraj gotovo morate reči ,,<tt>y</tt>``; veliko pomembnih orodij za Linux je odvisnih od tega. <item><tt>NFS</tt> - Če vaš stroj biva na omrežju in želite uporabljati datotečne sisteme, ki ležijo na drugih sistemih z NFS, recite ,,<tt>y</tt>``. <item><tt>ISO9660</tt> - Najdete ga na večini CD-ROM-ov. Če imate pogon za CD-ROM in ga želite uporabljati v Linuxu, recite ,,<tt>y</tt>``. </itemize> <sect3>Vendar jaz ne vem, katere datotečne sisteme potrebujem! <p> Prav, napišite ,,<tt>mount</tt>``. Izpis bo približno takšen: <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> tipa ,,second extended``, uporabljam <tt>/proc</tt> in nameščena je disketa z datotečnim sistemom msdos (bljak). <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 uporabljanih, ne-nujnih datotečnih sistemov lahko povzroči napihnjeno jedro; glejte razdelek <ref id="moduls" name="o modulih"> za način, kako se temu izognete in razdelek <ref id="big_n_slow" name=",,Velika ali počasna jedra``"> o tem, zakaj je napihnjeno jedro nezaželjen pojav. <sect2>Character devices <p> [ Znakovne naprave ] <p> 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 ,,<tt>y</tt>``, če je tako prav. <p> Opomba: <tt>gpm</tt> 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. <sect2>Sound <p> [ Zvok ] <p> Če imate veliko željo slišati, kako <tt>biff</tt> laja, recite ,,<tt>y</tt>``, 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 ,,<tt>n</tt>`` in prihranite nekaj pomnilnika jedra z izbiro le tistih lastnosti, ki se vam zdijo potrebne.) <p> Če zares potrebujete dobro podporo zvočne kartice, poglejte 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 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 <tt>Configure</tt>); 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 izvorni 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, tukaj 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 naj pogledate ,,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 ogledu te datoteke počutite izgubljeni, jo pač pozabite. <sect>Prevajanje jedra<label id="compiling"> <p> <sect1>Čiščenje in urejanje odvisnosti <p> Ko konfiguracijski skript konča z delom, 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. 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 ,,<tt>make clean</tt>``. 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. <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 veliko č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 komprimirano jedro. ,,<tt>make bzdisk</tt>`` naredi isto stvar, 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 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 <bf>zdaj</bf>?``). Vsa, vsaj na pol razumno nova, jedra so komprimirana, odtod črka ,,<tt>bz</tt>`` pred njihovimi imeni. Komprimirano jedro se samodejno odkomprimira, 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>`` naredi bolj intenzivno čiščenje (,,<tt>clean</tt>``). Včasih je ta cilj potreben; morda ga želite uporabiti ob vsakem popravku. ,,<tt>make mrproper</tt>`` bo tudi pobrisal 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 hočete spremeniti privzeto nastavitev. Za ukaz ,,<tt>make modules</tt>`` glejte razdelek o modulih. <sect1>Namestitev jedra <p> 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 ,,<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 enostaven za inštalacijo in delo, a zna zmesti ljudi s konfiguracijsko datoteko. Glejte nastavitveno datoteko (v starejših različicah je to <tt>/etc/lilo/config</tt>, v novejših pa <tt>/etc/lilo.conf</tt>) in poglejte, kakšne nastavitve imate. Konfiguracijska datoteka mora izgledati podobno: <tscreen><verb> image = /vmlinuz label = Linux root = /dev/hda1 ... </verb></tscreen> Nastavitev ,,<tt>image =</tt>`` kaže na na novo nameščeno jedro. Večina ljudi 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. Napravite 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 s trdega diska (še en način, kako si opomorete, če ste uničili novo jedro), prekopirajte vrstice pod (in vključno z) ,,<tt>image = xxx</tt>`` v LILO-vi nastavitveni datoteki 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 dodate 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 obstaja 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 napraviti rezervno kopijo drevesa izvorne kode (komprimiran arhiv naredite z ,,<tt>make clean</tt>`` in potem ,,<tt>cd /usr/src; tar zcvf old-tree.tar.gz linux</tt>``). <p> Nadaljujmo zgornji primer 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 komprimiran). Na zaslonu bodo mimo vas letele 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 lahko brali. Č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 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<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 izvorno kodo jedra v kakšnem drugem imeniku kot <tt>/usr/src/linux</tt>, uporabite v tem imeniku <tt>patch -p1</tt>. Ostale 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> Najpogostejši problem, ki se je včasih pojavljal, je bil, ko 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 lahko v starejših izdajah še vedno srečate. Popravite pa tako, da pogledate datoteko <tt>config.in.rej</tt> tako, da odgovarja originalnemu popravku. Popravki bodo navadno označeni s simboloma ,,<tt>+</tt>`` in ,,<tt>-</tt>`` na začetku vrstice. Glejte 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 obratno, kjer je to primerno. Naredite: <tscreen><verb> # patch -p0 < config.in.rej </verb></tscreen> in če <tt>patch</tt> sporoči, da je uspel, lahko nadaljujete z nastavitvami in prevajanjem. Datoteka <tt>config.in.rej</tt> vam bo ostala, a jo lahko pobrišete. <p> Če imate še vedno probleme, 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 izvorno kodo, in najverjetneje mu bo spodletelo. Potrebovali boste popolno čisto novo drevo izvorne kode (kar je morda tako ali tako dobra ideja). <p> Za razveljavitev popravkov uporabite ukaz ,,<tt>patch -R</tt>`` na originalnem popravku. <p> 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 <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 megabyta. 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>``. Obstajajo tudi boljši načini za odpravo datotek <tt>.orig</tt>, ki slonijo 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, 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. <p> Kako pogosti so popravki, ki niso v standardnih distribucijah? Verjetno boste slišali o njih. Jaz uporabljam popravek <tt>noblink</tt> 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. <sect>Dodatni paketi<label id="additional_packages"> <p> 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. <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 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. <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-ju 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. 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. <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 vašim trdim 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 prilepljate med posameznimi navideznimi zasloni in počnete druge stvari s celo paleto različnih mišk. <sect>Nekatere pasti <p> <sect1>make clean <p> Če po rutinski nadgradnji jedra vaše jedro počne zares čudne reči, ste morda pozabili napisati <tt>make clean</tt> 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 <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 (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. <p> Koliko pomnilnika zaseda jedro lahko izveste z odštevanjem vrednosti ,,total mem`` v izpisu <tt>/proc/meminfo</tt> ali izhodom ukaza ,,<tt>free</tt>``, od količine vsega pomnilnika. <sect1>Vzporedna vrata ne delujejo/tiskalnik ne deluje <p> 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). <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 to verjetno zato, ker je popravek spodletel, ali je vaša izvorna koda nekako pokvarjena. Morda nimate prave različice prevajalnika <tt>gcc</tt>, 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 <tt>README</tt> 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. <p> V nekaterih primerih lahko <tt>gcc</tt> 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. <p> 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 <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 LILO-vi konfiguracijski datoteki, 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> 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 ,,<tt>make zdisk</tt>``). Vedeti morate, kje je vaš korenski (<tt>/</tt>) 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 <tt>/usr/src/linux</tt>, njegov tip, 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 tipa 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 takšna, 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 po tem primeru. <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, ga ignorirajte. 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 vaših 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 svoj sistem z nove diskete. Ne pozabite tokrat po zagonu pognati <tt>lilo</tt> (ali karkoli je bilo že narobe)! Kot smo omenili zgoraj, obstaja š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>, naredite le te spremembe v zgoraj opisanem primeru: 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 probleme. Preberite LILO mini-HOWTO ali LILO-vo dokumentacijo, č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 izvorno 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). Ta program se sam namesti kot ,,<tt>update</tt>`` in po ponovnem zagonu se novo jedro ne bo več pritoževalo. <sect1>Mojega CD-ROM-a IDE/ATAPI ne prepričam, da bi deloval <p> Čudno, a veliko ljudi ne more pripraviti svoje pogone ATAPI k delovanju, verjetno zato, ker gre lahko veliko stvari narobe. <p> Č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. <p> 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). <p> 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. <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 komprimirana) <p> Ne uporabljajte datoteke <tt>vmlinux</tt>, ki je narejena v imeniku <tt>/usr/src/linux</tt>, kot vašo 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 zadev <p> Linuxova izvorna koda jedra vsebuje veliko vključnih datotek (datoteke, ki se končujejo na <tt>.h</tt>), na katere se sklicujejo standardne datoteke v imeniku <tt>/usr/include</tt>. Na njih se navadno sklicujemo takole (tukaj 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>, na imenik <tt>include/linux</tt> vaše izvorne kode jedra (<tt>/usr/src/linux/include/linux</tt> 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š <tt>root</tt> nastavitev umask, ki ne dovoljuje drugim uporabnikom, da bi kot privzeto lahko gledali njegove datoteke, in ste izluščili izvorno 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ž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: <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 primer ukazov je lahko koristen za tiste, 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 njihovi namestitvi. Berite datoteko <tt>Documentation/Changes</tt> 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. <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 izvorno 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 ali manjša vašemu jedru. 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 nekaj preprostega, kot, 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 datoteko <tt>INSTALL</tt> v tem podimeniku za 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 izgleda 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 ime 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 vsega dostopna kot nalagalni modul. Če jih želite uporabiti, morate nastaviti podatke o njih v običajnem jedru; to se pravi, ne rečete ,,<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 na njih. Uporabite jih lahko v tem imeniku ali pa izvedete ,,<tt>make modules_install</tt>`` in 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 z datotečnimi sistemi. 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-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. <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 inštalacija jedra <p> 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: <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 vašega starega jedra <tt>/vmlinuz</tt> (seveda morate še pognati <tt>lilo</tt>). Najpreprostejši način za 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 izvorne kode različnih jeder (to lahko sicer zaseda veliko diskovnega prostora), je najpogostejši način ta, da jih preimenujete v <tt>/usr/src/linux-x.y.z</tt>, kjer je <tt>x.y.z</tt> različica jedra. Potem lahko ,,izberete`` drevo izvorne 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 drevo. Preden naredite to simbolično povezavo, se prepričajte, da zadnji argument programu <tt>ln</tt> ni pravi imenik (stare simbolične povezave so v redu); rezultat ne bo tak, kot bi želeli. <sect1>Nadgradnje jedra <p> Russell Nelson <<tt>nelson@crynwr.com</tt>> zbira spremembe v novih izdajah jedra. Te so kratke, lahko jih pogledate, preden nadgradite svoje jedro. Najdete jih na <tt><url url="ftp://ftp.emlist.com/pub/kchanges/"></tt> ali prek svetovnega spleta na naslovu <tt>url url="http://www.crynwr.com/kchanges"></tt>. <sect>Ostali HOWTO-ji, 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 PPPjem, posebej, <item><tt>PCMCIA-HOWTO</tt>: o gonilnikih za vaš notesnik, <item><tt>ELF-HOWTO</tt>: ELF: kaj je to, 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šljite mi vse pripombe, dodatke, popravke (predvsem popravki so zame najbolj pomembni). <p> Mojo domačo stran najdete na enem od teh dveh URL-jev: <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 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. <p> Če vaše vprašanje ni povezano z jedrom ali je v jeziku, ki ga ne razumem, morda ne bom odgovoril. <p> Č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. <p> 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. <p> 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. <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 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 <url url="ftp://ftp.lugos.si/pub/lugos/doc/HOWTO-sl/"> ali na 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 triki``"> je bolj majhen. Upam, da ga bom razširil s predlogi drugih. <p> Tako je tudi z razdelkom <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 ljudje, ki so mi poslali pošto z vprašanji in problemi. <sect1>Pravice razširjanja, licenca, in te stvari <p> Copyright © Brian Ward, 1994-1999. <p> 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. <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 glede dovoljenj. Prevodi padejo 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 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. </article>