Cél jelen írással inkább olyasmi, hogy leírjam egy gcc-hez síkhülye történetét az első sikeresnek mondható kernelfordításig. Olyan szinten fogalmazva, ahonnan elindultam, azon a nyelvezeten fogalmazva, ahol annak idején még fel is fogtam a dolgokat.
Cél az is, hogy tálaljam, milyen érzelmi-, filozófiai-, összérzékszervi- és egyéb elváltozásokon keresztül megy át valaki, aki mattidiótaként vág bele kernelezni, míg el nem jut a fejettebb tudatállapotig.
Szükséges azonban valami kiindulópontot is adnom, hogy eme leíráshoz mik az alapok.
Ezek részletesebb elemzésébe nem megyek bele, még megfogalmazni sem akarom igazán alaposan, csak körülíni. Alapok, melyek biztosan szükségesek ahhoz, hogy kernelt fordíthassunk.
Lám:
---Linux fájlrendszerei oly módon, hogy parancssorban, mc nélkül is bármi megoldható legyen (hol az src, boot, modules, firmware stb.)
---lilo (vagy grub, grub2) ismerete biztonságosan, elbarmolás esetén rendes kernel visszaállításával
---BASH ismerete (cp, tar, echo, sed, grep, cat, awk stb.)
Ami még kell:
---2 db ugyanolyan laptop (így a legkényelmesebb, de lehet 1 db is.)
---rendezett magánélet
---barátnőihez leláncolt barátnő (ha még nem menekült el)
Jelen esetben 2 db eeepc701-es csúcsmodell van kernelfordításnak kitéve, egyikben 0.5, másikban 2 GB RAM-mal, mindkettőben 4GB SSD lemezzel (ezen van a linux).
Kiindulópont egy Slackware alapon nyugvó Salix, frissen telepítve innen:
http://www.salixos.org
http://www.salixos.org/wiki/index.php/Download_Fluxbox (a fluxboxosat választottam.)
A letöltés parancssorban egyszerű:
wget -d -c http://sourceforge.net/projects/salix/files/13.37/salix-fluxbox-13.37.i…
vagy töltögetés:
wget -d -c http://dfn.dl.sourceforge.net/project/salix/13.37/salix-fluxbox-13.37.i…
Méret: 574.5 MB (602406912 bájt)
(...valamelyik csak megy.)
Unetbootlin-nel nem lehet pendrájvra tenni az iso-t erről mintha írnának is a salix honlapján.
Ki kell írni cédére, majd bootolni róla.
Telepítéskor nem a CORE, hanem a full telepítést kell végigvinni, ellenkező esetben wlan sem lesz. (A CORE a mag, az igazán elvontaknak való, akik MINDENT parancssorban fognak fordítani. Ehhez nem tudok hozzászólni)
Település után a repók beállítása:
/etc/slapt-get/slapt-getrc tartalma:
WORKINGDIR=/var/slapt-get
EXCLUDE=^aaa_elflibs,^aaa_base,^devs,^glibc-.*,^kernel-.*,^udev,^rootuser-settings,^zzz-settings.*,-x86_64-
SOURCE=http://salix.enialis.net/i486/slackware-13.37/:OFFICIAL
SOURCE=http://salix.enialis.net/i486/slackware-13.37/extra/:OFFICIAL
SOURCE=http://salix.enialis.net/i486/13.37/:PREFERRED
SOURCE=http://repository.slacky.eu/slackware-13.37/
------------------
A reposit. alapján
slapt-get -u
slapt-get dist-upgrade
majd
slapt-get --remove "mindazon csomagok, melyek nem érdekelnek, pl. openoffice"
példa gyomláláras:
slapt-get -remove libreoffice brasero
(A slapt-get ennél részletesebb leírását máshol keressétek, a repókat mai napig szidom...)
Ha sikeres minden és a gcc-t nem irtottuk le, letölthetjük az első kernelfordításhoz szükséges cuccokat:
slapt-get -i kernel-source
Közben az első irodalom:
Lunixx rendszerfelügyelet (szép sárga könyvecske, melyben eddig is sok helyen turkáltam, csak éppen a kernelnél nem)
Azt hiszem ebben volt egy szép mondat:
,,Mikor köl rencermagot fordítani? --- Válasz: soha.''
Ez így. Persze van, aki nem olvasta.
Mi azonban tudjuk miért akarunk fordítani: valami nem megy és utána akarunk járni mimért nem. És addig ütjük, míg el nem indul.
jön az első instrukció, röviden és tömören:
"-root jogosultsággal az /usr/src/linux -ban kiadod a make menuconfig parancsot"
Ez így rázós egy olyannak, aki semmit sem ért az egészből. Szerencsémre 1 évvel ezelőtt 1 gigahekker leforgatott előttem, csak nekem egy kernelt (mely ment is, szinte minden megvolt, míg szét nem barmoltam), így nagyjából tudom, hogy a lépések triviálisak, csak az nem, mikor melyik triviális lépés jön a másik után. Akár egy felsőbb matematikai bizonyításnál...
Eleve tidtam, mit is akarok a már meglévőkön kívül:
alsa-cuccok (mikrofon, hangszóró)
tömörített meghajtó-kezelés (squashfs)
külső wifiusb (TL-WN722N) esetleges felismerése
usb klaviatúra- és tartalék egér, kamera
virtual frame buffer (azt hiszem ez kell a szimpla parancssorban megjeleníthető képekhez
Tehát a valódi első lépés valami kernelforrás letöltése:
slapt-get -i kernel-source
Ez betelepíti a cuccost pontosan oda, ahova kell.
Ha ennél többre vágyunk, ismernünk kell, hogy a kézzel eltöltött egyéb forrást hova kell kicsomagolni és azután mi a teendő.
Ihol a kernel, ami mindig friss.
http://kernel.org/
(Jelen pillanatban a 3.1.5 a legfrissebb)
Ebből (ha jól tudom) mindig a páratlan verziószámú stabilat érdemes megenni.
Egy ilyen letöltése (pl. a 3.1.5-é):
az említett oldalon a [Full Source] -ra klikkelve jön le, esetleg wgetelve:
wgez -d -c http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.b…
(a wgetnél a c kapcsoló a félbeszakadt letöltés folytathatósága miatt van)
A kernelforrás kézi kicsomagolását a
/usr/src/linux-3.1.5
könyvtárba végezzük el mondjuk mc-vel vagy tar-ral.
Ez nem elég.
Ha lejött a forrás és kicsomagolódott, a
/usr/src/linux
nevű symlinket a legújabb kernel könyvtárára kell irányítani, ellenkező esetben vagy semmi nem fordul, vagy valami egészen más.
Jelen kernelnél a symlink így fest:
root[src]# ls -l /usr/src/linux
lrwxrwxrwx 1 root root 11 dec 10 12:09 /usr/src/linux -> linux-3.1.5
root[src]#
A kicsomagolt kernel tehát a linux-3.1.5 könyvtárban van, belenézhetünk, majd el is tévedhetünk benne. Elsőre horror, olyan, mintha egy könyvtárban valami külön operációs rendszer-szintű bonyolultság lenne. Nem ismerek senkit, aki erről MINDENT tud.
Kiadjuk az alábbi parancsot, mire megjelenik kis idő múlva egy parancssori grafikus felület, a kernel konfigurációjára vonatkozóan:
make menuconfig
(BigBook azt is írja, hogy van még ezen kívül config, xconfig és gconfig program is a kernelparaméterezés grafikus megjelenítéséhez. Eza könyv a RedHat 2005-ös kiadásának 973. oldalán van lapközépen.)
Itt megkeressük hangkártyánkat, videokártyánkat, fájlrendszereinket, usb-s dolgainkat, meg ami még fontos.
Érdekes, hogy a BeOS fájlrendszere is ott figyel, de letiltva. Gyorsan engedélyezzük.
A menuconfig programnál ha kernelbe akarunk valamit forgatni, * jelnek kell a cucc előtt állnia, ha modulként akarjuk látni, akkor M.
"make menuconfig" után könyvtárunkban maradva kiadjuk a make parancsot, ez eltart néhány óráig.
Ha elrontottunk valamit, vagy valami földrengés történik, akkor a
make mrproper
segítségével minden beállítást és bináris fájlt szanálhatunk, tiszta alapokról indulva.
A menuconfigból CTRL-C-val kiléphetünk anélkül, hogy változna bármi.
A menuconfig beállításairól később egy EPISODE 2 fog íródni. De nem most. Itt most elégedjünk meg azzal, hogy ha minden lezajlik, keletkezik a kernelforrás könyvtárában egy
.config
állomány. A ponttal együtt az elején. Ez őrizzük majd meg, mint valami kincset, mert ha sikerül a fordítás, ennek segítségével bármilyen más, újabb verziószámú kernelt is leforgathatunk.
Létezhet egy ilyen fordítás is szkriptbe írva (öszegezve az eddigieket):
#!/bin/bash
# csomaglista frissitese
slapt-get -u
#hujesegek kiirtasa
slapt-get -remove libreoffice brasero
#kernelforras letoltese
slapt-get -i kernel-source
#linuxkernel meglatogatasa
cd /usr/src/linux
#legegyszerubb kernelbeallito program inditasa
make menuconfig
#elobbibol kilepve induljon is a forditas
make
#kernelmodulok is vannak, holott azt sem tudjuk, mik ezek
make modules
#leforditjuk a modultelepitot es elinditjuk,
#hogy ne kezzel kelljen felpakolni olyanokat, amikrol semmit sem tudunk
make modules_install && make install
#kiirjuk magunknak hogy minden rendben, ez a script lefutott.
echo "all ok"
#kilepunk a scriptunkbol
exit 0
Később persze mindenki saját szkriptet ír, hogy ne kelljen annyit gépelnie. Valamit a fentihez hasonlóan.
...közben gőzöm sincs, mi történik.
Ha lefutott minden, egy
bzImage
névre hallgató file-t kell megkeresnünk a find paranccsal BASH.ban, az a kernel.
Már ha egyáltalán sikerült a fordítás.
Nekem elsőre nem ment. kb. a 30. után már kezdtem sejteni a hibáimat, de akkor már mindenki megfelelő távolságra volt köreimtől..
A kernelt jómagam ezen az útvonalon találtam meg:
/usr/src/linux/x86/boot/bzImage
A fenti scriptben a legalsó sorokban található egy make install parancs, mely akkor fut le, ha az előtte álló make modules_install sikeresen lefordult.
Természetesen kézzel is felpakolhatjuk a kernelt és a moduljait, de elsre nem ajánlatos, kezdetben én sem tettem ezt.
Itt jön az, hogy alapszintű lilo-s tudásunk alapján észrevesszük, hogy a lilo is lefut.
Tudnunk kell, mikor mit kell a liloba írnunk (fentebb írtam, hogy a lilo ismerete létszükséglet), erre nem térek ki.
Ha a fenti dolgok sikerültek, van egy kernelünk.
De nem ez a lényeg, hanem az, hogy MIT állítunk be a menuconfigban és miért.
Ettől függ minden.
Az eddigi írás csak az első folyamatot mutatta meg, de a horror a
make menuconfig
parancs elindulása után előbukkanó, karakteres felületű cucctól keletkezik.
SEMMIRŐL SEM TUDUNK ITT SEMMIT.
Persze van akinek minden zsigerbő megy, ezek többsége szóba sem áll velünk, de ha mégis, akkor csupán n-szer, n+1-szer már nem. Tudnunk kell az n értékét és mindenkire csak annyiszor rászállni, hog ezt az n számot el ne érjük.
--------------------------
Bonyolódás:
--------------------------
Tudnunk kell mindent a hardverünkről, ezt ki is kell nyomtatnunk, ha nincs második gépünk, ami ugyanolyan, mint amin kernelt fordítunk.
toljunk rá az USB- és egyéb foglalatunkra minden hardvert, kamerát, wifi-cuccot, majd paancssorban adjuk ki ezeket:
lsusb
lspci
lsmod
Ezeket fájlba is írhatjuk:
lsusb >/__lsusb.txt
lspci >/__lspci.txt
lsmod >/__lsmod.txt
...vagy ki is nyomtathatjuk.
Ezek alapján a bogarászás lényege az, hogy EGYENKÉNT minden hardver eemünkről kikeressük a beállítópanelünkben minden kernelmodult.
Miután megtaláltunk egy eszközt, azt Y-re kattintva a kernelbe, M-re kattintva (vagy space-re nyomkodva) modulként fordíthatjuk.
Itt jön az éles kérdés (nekem is megvolt), hogy mi ez a kt marhaság, nem értem. (Ma sem olyan nagyon, de sebaj)
ha beleforgatunk szinte mindent a kernelbe, a kernel mérete nagy lesz de a modulkönyvtár kicsi, nem 110 MB, mint nagyobb linux-distribeknél.
Itt jöhet az ismerkedés a kernel-szottyokkal oly módon, hogy leírjuk magunknak, mi hol van:
kernel helye:
/boot
(itt minden kernelverziónak külön neve van, a lilo ezekre hivatkozik.)
drájverek helye:
/lib/firmware
(ebből nem érdemes utólag törölgetni, csak ha nagyon tudjuk, mit művelünk)
modulok helye:
/lib/modules
(verziószámok alapján minden külön könyvtárban van. Amit már biztosan nem használunk a liloban sem, törölhetjük.)
Így elsőre ennyit írok, talán nem volt annyira fárasztó.
Az elkövetkezendő második rész arról fog szólni, mitől kaptam agyvérzést.
Az ember hiába követ le fordítási instrukciókat interneten, valami mindig hiányozhat. Ha oly módon fordít valaki kernelt hogy azt sem tudja mit tesz, akkor könnyen lehet, hogy abbahagyja. Vagy nem érdekli.
Engem nem érdekelt egy idő múlva. Folyamatosan fordultak le a kerneldebug-gal (általános anomália) induló kernelkék. Amikor végre beindult az első, nem éreztem semmi örömöt. Minek az? Ez természetes. Te sem fogsz :)
Az a gáz, hogy örömöt az okozna, ha tudjuk, mi történi fordítás közben. Csakhogy ezt halandók az életben nem fogják tudni csak azok, akik tényleg értenek a kernelekhez.
Azonban sokan az autóhoz sem értenek motorilag, mégis tudnak vezetni. Valami ilyen a kernel is szerintem
...miközben ezen sorok keletkeznek, egy kernel fordul éppen, csupán szórakozásképpen.
Lássuk a parancssori kimenetét, az utolsó néhány sort:
...
INSTALL /lib/firmware/qlogic/1280.bin
INSTALL /lib/firmware/qlogic/12160.bin
DEPMOD 3.1.5-ultrakill
sh /mnt/sdc1/kernel/usr/src/linux-3.1.5/arch/x86/boot/install.sh 3.1.5-ultrakill arch/x86/boot/bzImage \
System.map "/boot"
Warning: LBA32 addressing assumed
Added kerneltest
Added 2.6.37.6-smp
Added 3.1.5-biokiller
Added 3.1.4-biokiller *
One warning was issued.
all ok
root[linux]#
Miután kaptunk egy promptot és a lilo sem rinyált semmiért, készen állink a reboothoz.
A menuconfigos káromkodásaimról, a megoldások menetéről majd egy episode2-ben írok.
root[linux]# shutdown -h now
Episode 2: http://hup.hu/node/109789
############################
UI:
a második rész megírása előtt átnézem a fentieket még egyszer, ha hibák lennének, javítom. Még emlékszem arra akorszakomra, mikor semmit sem fogtam fel, kísérletet teszek arra, hogy minden érthető legyen. Akik otthon vannak a témában, nyugodtan lapozzanak el...
- bzs blogja
- A hozzászóláshoz be kell jelentkezni
- 2628 megtekintés
Hozzászólások
Az esélytelenek magabiztossága... :)
Ismerős életérzés... :D
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -> Kérjük a humoros aláírást itt elhelyezni. <- - -
- A hozzászóláshoz be kell jelentkezni
Az "esélytelen" az tökéletes jelző, tényleg ez van :)
Az anomáliák mennyisége mindig megmarad, hiába oldódik meg valami, jelentkezik más.
- A hozzászóláshoz be kell jelentkezni
Miért kellett teljes kernelt fordítani hozzá? Amúgy nem vészes a „make menuconfig” (a „make config” az volt), csak tényleg ismerni kell hozzá pár dolgot.
-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."
rand() a lelke mindennek! :)
- A hozzászóláshoz be kell jelentkezni
a menuconfig nekem bejött.
Alább a jelenlegi fordítószkriptem, amit a kernelforrás gyökerében tartok. Mindig bereREMelem (#) ami nem kell:
#!/bin/bash
cd /usr/src/linux
#takaritas
#make mrproper
#echo "mrproper ok">forditas.temp
du -sh /boot/vmlinuz >>forditas.temp
du -sh /lib/firmware >>forditas.temp
ls -l /lib/modules >>forditas.temp
ls -l /usr/src/linux/.config >>forditas.temp
make menuconfig
#make dep && make clean && make bzImage
#vagy inkabb
make
echo "make ok">>forditas.temp
make modules
echo "modules ok">>forditas.temp
make modules_install && make install
echo "modules_install make install ok">>forditas.temp
du -sh /boot/vmlinuz >>forditas.temp
du -sh /lib/firmware >>forditas.temp
ls -l /lib/modules >>forditas.temp
ls -l /usr/src/linux/.config >>forditas.temp
echo "-------------------------------">>forditas.temp
echo "all ok"
espeak "all done, sucker"
- A hozzászóláshoz be kell jelentkezni
"Adott egy laptop, meg egy ugyanolyan másik, no meg egy kritikus USB-re tolható TP-LINK wifikütyü, ami nem megy. Mit tesz egy igazi lúzer? Kernelt fordít vakon"
Lehet hogy ez is elég lett volna...
- A hozzászóláshoz be kell jelentkezni
Jártam ezen az oldalon is. később leírom, miért nem foglalkoztam vele. Alapos ok.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Szerintem a dmesg-ben kiírja hogy betöltené a hozzávaló drivert, de firmware hiányában nem teszi és ezért nem fogod tudni használni. A tárolókban lévő fw csomagok csodákra képesek :-) Egyébként ha kernel fordítás akkor küldök neked olyan config-ot hogy szemed szád megnyalod utána, de ha kell a fullra fordított kernelt is hozzád vághatom :-)
--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!
- A hozzászóláshoz be kell jelentkezni
Gondoltam rá, hogy firmware-hiány is lehetséges.
Ellövöm egyik poénomat: a firmware megvan, a régi kernel, amit a salix tartalmazott, már kezeli a küső wifit. Nagy valószínűséggel valamielyik fordításkor befordultak a hiányzó firmware-ek, csak éppen akkor nem vettem észre mert kerneldebug volt.
Szóval az a helyzet állt elő, hogy rengeteg dolog megodódott, melyek a kernelezés nélkül nem oldódtak volna meg, a kernelek baromi gyors bootolást eredményeznek, minden megy velük, csak az nem, ami miatt elkezdtem foglalkozni velük.
Viszont "MEGJAVULT" az eredeti, 80 megás modulkönyvtáras smp salixkernel, és jelenleg is az megy. Ez az igazi betegség.
dmesg?
Ez új, még nem rágtam bele magam.
megnézem még ma.
A legújabb kíséret:
elindítottam a már tökéetesen működő smp kernelt, a salixos "gyárit".
Kigányoltam zcat-tal a procban lévő, tömörített kernelkonfigot, hátha az nekem remek lesz.
Kiszedtem belőle azon laptopok, kamerák moduljait, melyek a leírások szerint is feleslegesek nekem, majd lefordítottam. 40megás modules könyvtár, ezek szerint a felét kiirtottam.
Minden megy, fut, amga a gyönyör, de wifikártya, wlan1 sehol... holott biztosra veszem, hogy jót cselekedtem.
A segítséget megköszönöm, de ezt az írást már befejezem, folyamatosan leírva magamnak, mit milyen lépésekben fogtam fel. Hátha valakinek még jó lesz, nemcsak nekem valami jegyzetnek.
Szerintem a következő lépésben kirakom az ötmegás kernelemre és 2 megás modules könyvtáramra vonatkozó, mindentbeforgatós .configomat, könnyen lehet, hogy valami fergetegesen evidens valamit hagytam ki vagy rontottam el.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni