Első "igazi" kernel fordításom :)

 ( Adamyno | 2012. január 7., szombat - 20:47 )

Nem tudom, hogy le merjem-e írni, de ezen is túl vagyok :D

Igazából annyira nem volt nehéz, néhány szakkifejezéssel, rövidítéssel jó tisztában lenni, a google sokat segít, meg nem árt némi angol tudás.
Nekem csak annyi bajom van az angollal, hogy ha 4 órán keresztül bújom a monitort, akkor a végére magyarul se értek semmit.

Adott egy P3 gép, fél giga RAM... meg egy Crunchbang, amit a testing tárolókból frissítettem 3.1-es kernelre.

Azzal a kernellel másfél képernyőnyi modul volt betöltve, ezzel csak annak a fele.
Az eredetivel a proci terhelés alapjáraton 10-20% közötti volt, ezzel 9-12%.
Minden működik, egy kivételével. (de lehet, hogy csak én bénázom) Pendrive-okat csak read only módban tudok mountolni. Na de ez egy másik történet lesz.

Úgy kezdődött minden, hogy ez egy igen régi gép, és gondoltam megnézem, hátha gyorsul valamit egy egyedileg fordított kernellel.

Leszedtem a legfrissebb vanilla kernelt
wget http://kernel.org/pub/linux/kernel/v3.x/linux-3.2.tar.gz
Ha lejött, kibontjuk a tar -xf linux-3.2.tar.gz paranccsal a
/usr/src könyvtárba, belépünk a Linux 3.2 mappába, és ott dolgozunk, illetve onnan adogatjuk ki a parancsokat.

Közben egy csomó eszközt telepítettem egy másik terminál ablakban
apt-get install build-essential gcc make binutils module-init-tools procps glibc-dev patch bzip2 libncurses5-dev tk8.4 libqt3-dev libqt3-headers libqt3-dev qt3-apps-dev libqt3-mt-dev qt3-dev-tools e2fsprogs reiserfsprogs

Ennek lehet, hogy a fele is elég lett volna, de biztosra akartam menni.

Lett éjfél mire az összes szükséges dolgot beszereztem. (kernel forrás, fordító, csomagoló eszközök, dokumentáció...)

lspci
Kilistázza a legtöbb hardvert a gépben. Chipkészletekre szükség lehet, nem árt tudni milyen procink van, videokártya, usb vezérlő(k) SmBus vezérlő... nálam ezek voltak a fontosabbak.

lsusb
Érdemes mindent ráaggatni a gépre, amit a jövőben használni akarunk, és ez alapján majd befordítani a drivereket modulba.

sudo apt-get install lm-sensors
Ha még nincs fent, szükség lehet rá különböző szenzor alkalmazásoknál.
sensors
segít megkeresni a thermal/voltage sensorunk típusát. Az enyémhez "w83781d" nevű driver kell, amit a modprobe paranccsal be is töltöttem és egyből működnek a szenzorok. Ezt a modult a CTRL+F billentyű kombóval megkerestem a konfig programban, de először nem talált semmit, mert valahogy úgy van jelölve, hogy w83700/70/81/xy..d

A lényeg, hogy a w83* keresés segített.

De ha már itt járunk, akkor make menuconfig
Ez egy grafikus felületű konfig programot indít. Szerencsére lehet benne menteni a config fájlt, így ha valami nem lesz jó, akkor később nem kell mindent elölről kezdeni.

És ez után van a CTRL+F-es keresés :D Csak egyszerre több dolgot is kellett nézni. Ugye magát a config programot, meg a háttérben a terminál ablakokat, amikben voltak a külöböző infók a hardvereimről.

Hát őszintén szólva félidőben majdnem feladtam, de elmentem kajálni és mégis folytattam tovább Mikor megláttam a driver szekciót, akkor lett félidő :) Nem is az északi/déli híd típusának a kiderítése volt nehéz, meg a szenzor chip-é, hanem az RTC. /Real Time Clock/ Bár van egy általános, ami BIOSból szedi az infókat, de én jobban bízom a direkt elérésben ha már egyszer van rá lehetőség. Rengeteg lehetőség van, azt mindet kibogarászni jó pár percbe telt. Teljesen véletlenül akadtam rá a neten a google segítségével, de szerintem nem mindenkinek lesz ekkora szerencséje, mert az alaplap gyártók nem igen kötik az ember orrára.

Az USB-vel is volt egy kisebb fajta szívás az EHCI,OHCI, stb... dolgok miatt, amik ha nem tiszták, akkor vegy berakod biztonság kedvéért, vagy utánanézel. (ezért írtam az elején is, hogy nem árt tisztában lenni néhány rövidítéssel, kifejezéssel)

A legnagyobb szívás a SCSI, IDE, ATA, SATA meghajtókkal volt, mert az új rendszerek valahogy emulálják az ide meghajtókat sata vagy scsi driverekkel (erre nem emlékszem pontosan, ez a baj), ezért már nem hdx a jelölés /dev alatt, hanem sdx. Ha csak ATA/IDE drivert forgatok bele, akkor persze jóval kisebb lenne a kernel meg gyorsabb is a gép, de mivel nem tudtam, hogy mi az ábra, így néhány dolgot befordítottam, néhányat meg modulba. Csak azt a pár dolgot hagytam ki, ami majdnem biztos, hogy nem kell. Úgy gondoltam, ha csak IDE drivert fordítottam volna, akkor a lemez hivatkozásokat, fstab-ot, mindent át kellett volna írni kézzel, de ezt nem akartam, ezért inkább ment a levesbe minden.

Később aztán kiderült, hogy a rendszer most hda meghajtónak látja a vinyót (a másik kernellel sda volt), sda, sdb... a pendrive-ok. És mégis működik, hiszen erről írok most. Csakhogy a pendrivek valamiért read only-k most :P

A konfigurálás kb.4 óráig tartott, a fordítás 2, azaz reggel 6ra kész is volt.

Fordítás:
Ha kész vagyunk a konfiggal, egy mentés után nyugodtan lépjünk ki.
Én a kövtkező parancsot adtm ki (ezt nem ajánlom senkinek):
make && make modules_install (ezt nem is teszem kód formába)

szépen lefordult a kernel, azzal nem volt baj, bemásoltam a /boot könyvtárba vmlinuz_3.2.0-adam néven.

cp arch/i386/boot/bzImage /boot/vmlinuz_3.2.0-adam

nano /boot/grub/menu.lst
Erre egy üres fájl nyílik meg nekem, kiderült hogy nincs is menu.lst fájlom. Legalábbis ott. AKkor meg hol vannak eltárolva ezek az infók? Na mindegy..

Gondoltam, akkor indítsunk egyet. Grub konfigban /E betűvel/ csak átírtam a kernel nevét, de valami váratlan hiba fogadott. chdir() ... error ... mittudomén

Az a lényeg, hogy a rendszer initrd-t használ indulásnál, és azt én nem frissítettem. Megpróbáltam a következő parancsot:

update-initramfs -c -k 3.2.0

a /boot/ könyvtárból. Valami ment 1 másodpercig aztán kilépett.
Utána ugyanezt kiadtam a /usr/src/linux-xy mappában, ott meg valami hiányzó lib-eket listázott, de nagyon sokat. Közben lett új initrd.img fájlom, de nem úgy gondoltam, hogy így semmi értelme, ha tele van hibákkal.

Némi olvasgatás után az lett a vége, hogy:
apt-get install kernel package

/boot alól töröltem az eddigi fáljokat, amiket ott létrehoztam:
rm initrd.img-3.2.0 initrd.img-3.2.0-adam vmlinuz_3.2.0-adam

visszamentem a forráskódom mappájába, és ott:
make-kpkg clean Ezzel kitisztítottam a make által létrehozott fájlokat
make xconfig Megnéztem, hogy a beállítások megmaradtak-e (igen)

fakeroot make-kpkg --initrd --append-to-version=-kernelem-neve kernel_image kernel_headers
Ez újrafordítja a kernelt, de 2 db deb csomagot csinál belőle. Egyik a kernel, másik a kernel-headers. Ezt később bármikor fel lehet telepíteni bármilyen debian alapú gépen. A "-kernelem-neve" részhez bármilyen szöveg írható, én "-adam20120107"-et írtam. (persze idézőjelek nélkül) Ajánlott a kötőjel vagy aláhúzás jel a szöveg előtt, hogy elkülönüljön a verziószámtól.

Telepítettem a két csomagot:
dpkg -i linux-image-3.2.0-adam20120107_3.2.0-adam20120107-10.00.Custom_i386.deb
dpkg -i linux-headers-3.2.0-adam20120107_3.2.0-adam20120107-10.00.Custom_i386.deb

Újraindítás:
shutdown -r now

És már alapból ott volt a boot menüben az imént fordított/telepített kernel, nem kellett semmit állítani. Alapból az indul ha nem nyomok semmit.
És működik.

Ahogy az elején írtam, a proci terhelés kisebb, a betöltött modulok száma kb. fele annyi mint előtte. Egy bajom a ro pendrive.

Hát nagyjából ennyi :D

Ha lesz rá igény, akkor majd valamikor esetleg leírhatom a beállításokat, hogy mit hogy csináltam.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Kösz a leírást! Nem kizárt, hogy felhasználom a közeljövőben.

Nem tudom, a Debian-származékoknak mi kell, mi nem, de ez valóban hiányos, mert manuálisan másoltad be az eredményt.

Én a kövtkező parancsot adtm ki (ezt nem ajánlom senkinek):
make && make modules_install (ezt nem is teszem kód formába)

Szerintem így működött volna:

make && make modules_install install

Ekkor a make be is másolja a file-okat a helyükre, s az a gyanúm, az initrd-t is megcsinálja. Fedorán legalább is akkor, amikor még forrásból fordítottam kernelt, ez így működött.


tr [:lower:] [:upper:] <<<locsemege
LOCSEMEGE

igen ám, viszont készít .deb csomagot is belőle, tehát make install felesleges. illetve ez jobb megoldás is (szerintem).

Nem vitatom, hogy a disztribúcióhoz jobban igazodik, ha csomagot csinál belőle. Pusztán arra próbáltam rámutatni, miért nem sikerült enélkül. Lefordította, majd kézzel másolta be. Rendesen fel kell telepíteni a kernelt - ez a mozdulat maradt el -, s akkor jó lesz.

Forrásból fordított alkalmazást sem úgy telepítünk, hogy a /usr/local/bin-be másoljuk, ami lefordult, mert lehet, több file-ból áll. Aki csinálta a programot, csak jobban tudja milyen komponensekből áll. Tehát sima alkalmazás forrásból kb.:

./configure
make
su -c 'make install'

Persze a ./configure után lehetnek fordítási opciók. A make úgy tudom, kulturált, tehát 4 magos gépen úgy fordul, mintha make -j4 lenne az opció. Legalább is így emlékszem.


tr [:lower:] [:upper:] <<<locsemege
LOCSEMEGE

Így van, majd megnézem amit írtál, nekem most nincs szükségem rá, de ha valakinek az jobban kézre áll, akkor már azt is tudja :D

Egyébként ha lesz egykis időm, azt a néhány programot lehet, hogy lefordítom forrásból amit használok. (pidgin, Iceweasel, minitube, stb...) A nagyokat nem :D

Régebben én is fordítottam kernelt magamnak, minimalizáltam arra amire kell, és pár opciót az adott felhasználásra igazítottam, megvan az előnye. De most már nem hiszem hogy belevágok... :)

--
http://neurogadget.com/

Mivel még nem csináltam ilyet, így gondoltam megpròbàlom. De Inkàbb maradok a deb csomagoknál. :)

Még átnézem a proci beállításokat, mert a chrome szaggat nagyon, de lehet hogy nem tudok mit kezdeni vele, mert tudtommal sse2 kell neki, a processzor meg csak sima sse-t támogat.

Még az USB beállításokat is átnézem, meg kiszedem a scsi, SATA drivereket és újra fordítom.

Most találtam valami nyílt forráskódú böngészőt, elég jól teszi a dolgát, szóval a chrome nem nagy veszteség lesz, ha esetleg így marad :)

Most találtam valami nyílt forráskódú böngészőt

Csak nem a Firefox az? :))


tr [:lower:] [:upper:] <<<locsemege
LOCSEMEGE

Majdnem... Firefox alapú, de Iceweasel-nek hívják^^ :)