Č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
.
Č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.
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.
Č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/
.
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.)
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.
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.
Č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.
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.
Nadgradite vsaj na različico 1.2.1.
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.
Spremenite besedo dumb
v linux
v opisu zaslonskega
terminala v datoteki /etc/termcap
. Morda boste morali tudi
narediti nov zapis.
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.
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