Naprej Nazaj Vsebina

5. Popravljanje jedra

5.1 Uporaba popravka

Zaporedne nadgradnje jedra se distribuirajo kot popravki (patches). Na primer, če imate različico 1.1.45 in opazite, da obstaja nekje datoteka ,,patch46.gz`` za njo, to pomeni, da lahko z uporabo programa patch nadgradite jedro na različico 1.1.46. Morda boste najprej želeli napraviti rezervno kopijo drevesa izvorne kode (komprimiran arhiv naredite z ,,make clean`` in potem ,,cd /usr/src; tar zcvf old-tree.tar.gz linux``).

Nadaljujmo zgornji primer in predpostavimo, da imate datoteko ,,patch46.gz`` v imeniku /usr/src. Naredite cd /usr/src in potem ,,zcat patch46.gz | patch -p0`` (ali ,,patch -p0 < patch46``, če popravek ni komprimiran). Na zaslonu bodo mimo vas letele stvari, ki vam bodo sporočale, da patch poskuša uporabiti določene popravke in uspeh teh poskusov. Navadno se vse odvija prehitro, da bi lahko brali. Če niste prepričani, ali je šlo vse po sreči, boste morda uporabili zastavico -s za program patch, kar pove patchu naj sporoča le sporočila o napakah (v tem primeru ne boste imeli občutka ,,Hej, moj računalnik za spremembo nekaj počne!``, a boste morda vseeno raje storili tako). Če vas zanima, kateri deli se niso popravili povsem gladko, napravite cd /usr/src/linux in poiščite datoteke s podaljškom .rej. Nekatere starejše različice patcha pustijo podaljšek #. Za iskanje uporabite ,,find``:

 # find .
-name '*.rej' -print 

To izpiše vse datoteke s podaljškom .rej, ki prebivajo v trenutnem imeniku ali podimenikih, na standardni izhod.

Če je šlo vse kot po maslu, napravite ,,make clean``, ,,config``, in ,,dep`` kot je opisano v razdelkih ,,Kako zares sestaviti jedro`` in ,,Prevajanje jedra``.

Ukaz patch ima še precej dodatnih izbir. Zgoraj smo že omenili patch -s, ki zadrži izpis vseh sporočil, razen napak. Če imate izvorno kodo jedra v kakšnem drugem imeniku kot /usr/src/linux, uporabite v tem imeniku patch -p1. Ostale izbire najdete z man patch.

5.2 Če se kje zalomi

(Opomba: Ta razdelek se nanaša predvsem na zelo stara jedra.)

Najpogostejši problem, ki se je včasih pojavljal, je bil, ko je popravek spremenil datoteko ,,config.in`` in ta ni bila čisto prava, saj ste spremenili izbire, da bi opisali opremo svojega stroja. To se je uredilo, a lahko v starejših izdajah še vedno srečate. Popravite pa tako, da pogledate datoteko config.in.rej tako, da odgovarja originalnemu popravku. Popravki bodo navadno označeni s simboloma ,,+`` in ,,-`` na začetku vrstice. Glejte okoliške vrstice in se spomnite, ali so bile nastavljene kot ,,y`` ali kot ,,n``. Zdaj popravite config.in in spremenite ,,y`` v ,,n`` in obratno, kjer je to primerno. Naredite:

# patch -p0 < config.in.rej
in če patch sporoči, da je uspel, lahko nadaljujete z nastavitvami in prevajanjem. Datoteka config.in.rej vam bo ostala, a jo lahko pobrišete.

Če imate še vedno probleme, ste morda namestili popravek prek vrste. Če patch pravi ,,previously applied patch detected: Assume -R?``, verjetno poskušate namestiti popravek, ki je starejši od trenutne različice jedra; če odgovorite z ,,y``, bo patch poskušal podgraditi vašo izvorno kodo, in najverjetneje mu bo spodletelo. Potrebovali boste popolno čisto novo drevo izvorne kode (kar je morda tako ali tako dobra ideja).

Za razveljavitev popravkov uporabite ukaz ,,patch -R`` na originalnem popravku.

Najboljša stvar, ki jo lahko naredite, ko ne morete uporabiti popravkov, je, da začnete znova s čistim drevesom izvorne kode (na primer, z eno od datotek linux-x.y.z.tar.gz), in znova začnete.

5.3 Kako se znebite datotek .orig

Po nekaj popravkih se bodo začele kopičiti datoteke .orig. Npr. neko drevo jedra 1.1.51, ki sem ga nekoč imel, je bilo zadnjič očiščeno pri različici 1.1.48. Odstranitev datotek .orig je prihranila več kot pol megabyta.

Zadevo uredite z ukazom:

# find .  -name '*.orig' -exec rm -f {} ';'

Različice programa patch, ki uporabljajo # za zavrnitvene datoteke, uporabljajo za podaljšek tildo (,,.~``) namesto ,,.orig``.

Obstajajo tudi boljši načini za odpravo datotek .orig, ki slonijo na GNU xargs:

# find .  -name '*.orig' | xargs rm
ali ,,precej varna, a malo bolj izčrpna`` metoda:
# find . -name '*.orig' -print0 | xargs --null rm --

5.4 Drugi popravki

Razen Linusovih, obstajajo tudi drugi popravki (rekel jim bom ,,nestandardni``). Če jih uporabite, Linusovi popravki morda ne bodo delovali pravilno in jih boste morali obnoviti, urediti izvorno kodo popravka, namestiti novo drevo izvorne kode ali kombinacijo naštetega. To lahko postane zelo frustrirajoče, zato, če ne želite spreminjati izvorne kode (z morda slabim izidom), napravite rezervne kopije nestandardnih popravkov, preden uporabite Linusove, ali le namestite novo drevo. Potem lahko pogledate, če nestandardni popravki delujejo. Če ne, morate ostati pri starem jedru in se igrati s popravki ali izvorno kodo, da bi dosegli delovanje, ali čakati (morda celo prosjačiti) za novo različico popravkov.

Kako pogosti so popravki, ki niso v standardnih distribucijah? Verjetno boste slišali o njih. Jaz uporabljam popravek noblink za moje navidezne zaslone, ker sovražim utripajoče kazalce (ta popravek je (ali je vsaj bil) redno osvežen ob vsaki novi izdaji jedra). Z razvojem vse več novejših gonilnikov naprav kot modulov pa uporaba ,,nestandardnih`` popravkov znatno upada.


Naprej Nazaj Vsebina