2024. április 25., csütörtök

Gyorskeresés

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

Írta: |

[ ÚJ BEJEGYZÉS ]

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

Copyright © 2000-2024 PROHARDVER Informatikai Kft.