Naprej Nazaj Vsebina

7. Nekatere pasti

7.1 make clean

Če po rutinski nadgradnji jedra vaše jedro počne zares čudne reči, ste morda pozabili napisati make clean pred prevajanjem novega jedra. Simptomi so lahko karkoli, od zmrznjenega sistema, čudnih V/I problemov, do slabega (počasnega) delovanja. Prepričajte se tudi, da boste ukazali make dep.

7.2 Velika ali počasna jedra

Če vaše jedro požira velike količine pomnilnika, je preveliko, in/ali le traja neskončno dolgo, da se prevede, čeprav imate nov procesor Quadbazillium-III/440, ste najverjetneje vključili podporo veliko nepotrebnih zadev (gonilnikov naprav, datotečnih sistemov, itd.). Če naprave ne uporabljate, je ne podprite v jedru, saj to zavzema pomnilnik. Najbolj očiten simptom prenapihnjenega jedra je ekstremno izmenjavanje pomnilnika z diskom sem ter tja; če vaš disk nenehno oglaša in ni eden od tistih starih Fujitsujevih Eagles, katerih zvok lahko primerjamo s pristajanjem reaktivnih letal, preglejte nastavitve vašega jedra.

Koliko pomnilnika zaseda jedro lahko izveste z odštevanjem vrednosti ,,total mem`` v izpisu /proc/meminfo ali izhodom ukaza ,,free``, od količine vsega pomnilnika.

7.3 Vzporedna vrata ne delujejo/tiskalnik ne deluje

Nastavitvene izbire za PC-je so: najprej v kategoriji Splošnih nastavitev (angl. General Setup) vključite podporo zaporednih vrat (angl. Parallel port support) in strojno opremo osebnih računalnikov (angl. PC-style hardware). Nato v Znakovnih napravah (angl. Character devices) podprite tiskalnik na vzporednih vratih (angl. Parallel printer support).

Potem so tu še imena. Linux 2.2 poimenuje tiskalniške naprave drugače od prejšnjih izdaj. Posledica tega je, da napravi lp1 v vašem starem jedru v novem jedru verjetno ustreza naprava lp0. Uporabite dmesg ali poglejte v dnevnik v imeniku /var/log ter ugotovite novo ime.

7.4 Jedro se ne prevede

Če se ne prevede, je to verjetno zato, ker je popravek spodletel, ali je vaša izvorna koda nekako pokvarjena. Morda nimate prave različice prevajalnika gcc, ali je tudi z njim kaj narobe (na primer, vključne datoteke so lahko napačne). Prepričajte se, da so simbolične povezave, ki jih Linus priporoča v datoteki README pravilno narejene. V splošnem, če se standardna jedra ne prevajajo, je nekaj resno narobe s sistemom in ponovna inštalacija nekaterih orodij je neizogibna.

V nekaterih primerih lahko gcc odpove zaradi strojnih problemov. Sporočila o takšnih napakah so nekaj kot ,,xxx exited with signal 15`` in navadno izgledajo zelo skrivnostna. Tega sploh ne bi omenil, a se mi je nekoč zgodilo - imel sem nekaj slabega predpomnilnika in prevajalnik se je pritoževal povsem naključno. Če imate težave, poskusite najprej ponovno namestiti gcc. Sumničavi postanite samo, če se vaše jedro lepo prevede z izključenim zunanjim predpomnilnikom, zmanjšano količino RAM-a, ipd.

Ljudje so navadno vznemirjeni, ko izvejo, da bi lahko imeli tudi težave s strojno opremo. Hja, tega si ne izmišljujem. Obstajajo tudi pogosto zastavljena vprašanja o tej temi - najdete jih na http://www.bitwizard.nl/sig11/.

7.5 Novo jedro se noče zagnati

Niste pognali programa LILO, ali pa ga niste pravilno nastavili. Nekoč me je zafrkavala vrstica v LILO-vi konfiguracijski datoteki, ki je bila ,,boot = /dev/hda1`` namesto ,,boot = /dev/hda``. (To je lahko sprva zelo moteče, a ko imate enkrat delujočo nastavitveno datoteko, vam je ni treba spreminjati.)

7.6 Pozabili ste pognati LILO, ali pa se sistem sploh ne zažene

Ups! Najboljše, kar lahko storite ta hip, je, da zaženete operacijski sistem z diskete ali CD-ROM-a in potem pripravite še eno zaganjalno disketo (kot bi jo naredil ukaz ,,make zdisk``). Vedeti morate, kje je vaš korenski (/) datotečni sistem in katerega tipa je (npr. second extended, minix). V spodnjem primeru morate vedeti tudi na kakšnem datotečnem sistemu leži vaše drevo izvorne kode /usr/src/linux, njegov tip, in kje je navadno nameščen (z mount).

V naslednjem primeru je / enak /dev/hda1, in datotečni sistem, ki vsebuje /usr/src/linux na /dev/hda3, navadno nameščen na /usr. Oba sta datotečna sistema tipa ext2 (second extended). Delujoča slika jedra v imeniku /usr/src/linux/arch/i386/boot se imenuje bzImage.

Zamisel je takšna, da uporabimo delujoče jedro zImage na novi disketi. Še ena možnost, ki lahko deluje bolje, ali pa tudi ne (odvisno od konkretne metode, s katero ste zavozili svoj sistem), je opisana po tem primeru.

Najprej zaženite sistem s kombinacije disket boot in root ali z reševalne diskete in namestite delujočo sliko jedra:

# mkdir /mnt
# mount -t ext2 /dev/hda3 /mnt 

Če vam mkdir pravi, da imenik že obstaja, ga ignorirajte. Zdaj pojdite z ukazom cd na imenik, v katerem je delujoče jedro. Pozorni bodite na to, da je

/mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot

V disketni pogon ,,A:`` vložite formatirano disketo (ne vaših diskov boot ali root!), prepišite sliko jedra na disketo in jo nastavite za svoj korenski datotečni sistem.

# cd /mnt/src/linux/arch/i386/boot  
# dd if=bzImage of=/dev/fd0 
# rdev /dev/fd0 /dev/hda1 

Naredite cd na / in odmestite običajni datotečni sistem /usr:

# cd /
# umount /mnt

Zdaj lahko še enkrat zaženete svoj sistem z nove diskete. Ne pozabite tokrat po zagonu pognati lilo (ali karkoli je bilo že narobe)!

Kot smo omenili zgoraj, obstaja še ena običajna pot. Če imate delujočo sliko jedra v / (/vmlinuz, na primer), jo lahko uporabite za zagonsko disketo. Če veljajo vsi zgoraj našteti pogoji in je slika jedra /vmlinuz, naredite le te spremembe v zgoraj opisanem primeru: spremenite /dev/hda3 v /dev/hda1 (datotečni sistem /), /mnt/src/linux v /mnt, in if=bzImage v if=vmlinuz. Opombo o tem, kako dobimo /mnt/src/linux lahko spregledate.

Uporaba programa LILO na velikih diskih (večjih od 1024 cilindrov) lahko povzroča probleme. Preberite LILO mini-HOWTO ali LILO-vo dokumentacijo, če potrebujete pomoč pri tem.

7.7 Izpiše ,,warning: bdflush not running``

To je lahko resen problem. Od jedra izdaje po 1.0 (okoli 20. aprila 1994) se je program ,,update``, ki periodično izplakne vmesni pomnilnik datotečnega sistema, posodabljal in nadomestil. Dobite izvorno kodo ,,bdflush`` (najdete jo tam, kjer ste našli jedro) in namestite ta program (verjetno boste medtem pognati vaš sistem pod starim jedrom). Ta program se sam namesti kot ,,update`` in po ponovnem zagonu se novo jedro ne bo več pritoževalo.

7.8 Mojega CD-ROM-a IDE/ATAPI ne prepričam, da bi deloval

Čudno, a veliko ljudi ne more pripraviti svoje pogone ATAPI k delovanju, verjetno zato, ker gre lahko veliko stvari narobe.

Če je vaš CD-ROM edina naprava na konkretnem vmesniku IDE, morate nastaviti skakače kot ,,master`` ali ,,single``. To je menda najbolj pogosta napaka.

Creative Labs (na primer) je postavil vmesnik IDE na njihove zvočne kartice. A to vodi k zanimivem problemu, da imajo nekateri ljudje en sam vmesnik, veliko jih ima dva vmesnika IDE na njihovih matičnih ploščah (navadno na IRQ15), torej je splošna praksa označiti vmesnik SoundBlaster-ja kot tretji IDE port (IRQ11, mi pravijo).

To povzroča probleme z Linuxom, saj različice 1.2.x ne podpirajo tretjega vmesnika IDE (obstaja podpora v serijah 1.3.x, a to je razvojna različica, se še spomnite, in ne izvaja avtomatskega iskanja). Temu se lahko izognemo na več načinov.

Če že imate druga vrata IDE, jih morda ne uporabljate ali še nimajo na sebi dveh naprav. Vzemite pogon ATAPI z zvočne kartice in ga povežite na drugi vmesnik. Potem lahko onemogočite vmesnik zvočne kartice, kar tako ali tako privarčuje IRQ.

Če nimate drugega vmesnika, nastavite skakač na vmesniku zvočne kartice (ne na zvočnem delu zvočne kartice) kot IRQ15, drugi vmesnik. Moralo bi delovati.

7.9 Izpisuje čudne reči o zastarelih zahtevah za usmerjanje (obsolete routing requests)

Poiščite novo različico programa route in vseh drugih usmerjevalnih programov. Datoteka /usr/include/linux/route.h (ki je pravzaprav v imeniku /usr/src/linux) se je spremenila.

7.10 Požarni zid ne deluje v 1.2.0

Nadgradite vsaj na različico 1.2.1.

7.11 ,,Not a compressed kernel Image file`` (datoteka s sliko jedra ni komprimirana)

Ne uporabljajte datoteke vmlinux, ki je narejena v imeniku /usr/src/linux, kot vašo zaganjalno sliko; [..]/arch/i386/boot/bzImage je prava datoteka.

7.12 Težave z zaslonskim terminalom po nadgradnji na 1.3.x

Spremenite besedo dumb v linux v opisu zaslonskega terminala v datoteki /etc/termcap. Morda boste morali tudi narediti nov zapis.

7.13 Po nadgradnji jedra ne morem prevajati zadev

Linuxova izvorna koda jedra vsebuje veliko vključnih datotek (datoteke, ki se končujejo na .h), na katere se sklicujejo standardne datoteke v imeniku /usr/include. Na njih se navadno sklicujemo takole (tukaj je xyzzy.h nekaj v imeniku /usr/include/linux):

#include <linux/xyzzy.h>

Navadno je v imeniku /usr/include povezava, imenovana linux, na imenik include/linux vaše izvorne kode jedra (/usr/src/linux/include/linux v tipičnem sistemu). Če te povezave ni tam, ali kaže na napačen kraj, se večina stvari sploh ne bo prevedla. Če ste se odločili, da porablja izvorna koda jedra preveč prostora na disku in ste jo pobrisali, je očitno to problem. Lahko pa, da je kaj narobe z dovoljenji datotek; če ima vaš root nastavitev umask, ki ne dovoljuje drugim uporabnikom, da bi kot privzeto lahko gledali njegove datoteke, in ste izluščili izvorno kodo jedra brez izbire p (ohrani datotečne načine), ti uporabniki ne bodo mogli uporabljati prevajalnika za C. Čeprav lahko uporabite ukaz chmod in to popravite, je verjetno lažje še enkrat izvleči vključne datoteke. To lahko storite enako kot ste storili na začetku z vso izvorno kodo, le z dodatnim argumentom:

# tar zxvpf linux.x.y.z.tar.gz linux/include

Opomba: ,,make config`` bo naredil povezavo /usr/src/linux, če je še nimate.

7.14 Povečanje omejitev

Naslednji primer ukazov je lahko koristen za tiste, ki se sprašujete, kako povečati nekatere mehke omejitve, ki jih privzame jedro:

# echo 4096 > /proc/sys/kernel/file-max
# echo 12288 > /proc/sys/kernel/inode-max
# echo 300 400 500 > /proc/sys/vm/freepages


Naprej Nazaj Vsebina