Naprej Nazaj Kazalo

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 je 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 narediti rezervno kopijo drevesa izvirne kode (stisnjen arhiv naredite z ,,make clean`` in potem ,,cd /usr/src; tar zcvf old-tree.tar.gz linux``).

Nadaljujmo zgornji zgled 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 stisnjen). Na zaslonu bodo letele mimo 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 utegnili prebrati. Č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 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 /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 izvirno kodo jedra v kakem drugem imeniku kot /usr/src/linux, uporabite v tem imeniku patch -p1. Druge izbire najdete z man patch.

5.2 Če se kje zalomi

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

Včasih je bil najpogostejši problem, da 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 v starejših izdajah še vedno naletite na te nevšečnosti. Popravite jih tako, da si ogledate datoteko config.in.rej tako, da odgovarja prvotnemu popravku. Popravki bodo navadno označeni s simboloma ,,+`` in ,,-`` na začetku vrstice. Oglejte si 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 nasprotno, kjer je primerno. Naredite:

# patch -p0 < config.in.rej
in če patch sporoči, da mu je uspelo, lahko nadaljujete nastavljanje in prevajanje. Datoteka config.in.rej vam bo ostala, a jo lahko zbrišete.

Če imate še vedno težave, 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 izvirno kodo in najverjetneje mu bo spodletelo. Potrebovali boste popolno čisto novo drevo izvirne kode (kar je morda tako ali tako dobra zamisel).

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

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 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 megabajta.

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``.

Na voljo so tudi boljši načini za odpravo datotek .orig, ki temeljijo 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 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.

Kako pogosti so popravki, ki niso v standardnih distribucijah? Verjetno boste slišali zanje. Jaz uporabljam popravek noblink 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.


Naprej Nazaj Kazalo