kernelfordítás

Fórumok

Sziasztok!

Debian lenny alatt szeretném a kernelt frissíteni (2.6.26-2-amd64-ről 2.6.34.1-re), csak már nagyon rég forgattam kernelt (2.4 kernel idejében). Az a kérdésem, hogy a make menuconfig parancs után, milyen további parancsokat kell kiadnom, hogy meglegyen a bzImages stb?

Közönöm előre is.

Hozzászólások

Ha csomagot akarsz csinálni, akkor a legegyszerűbben így:

make-kpkg kernel_image
make-kpkg kernel_headers

Azt azokat meg dpkg -i *deb -el felrakod és kész is.

Szerk: Ha nem kell csomi, akkor így:

> make bzImage modules modules_install
---------------------------
Oszt jónapot!

Vagy így:


sudo fakeroot make-kpkg --initrd --revision=1.0 kernel_image kernel_headers
sudo dpkg -i linux-image-2.6.34*
sudo dpkg -i linux-headers-2.6.34*
sudo mkinitramfs -k 2.6.34.1 -o /boot/initrd.img-2.6.34.1
sudo update-grub

Így lesz initrd -d. Ha nem kell, akkor a "--initrd" paramétert az első sorból és a "sudo mkinitramfs .." sort hagyd ki.

Sajnos nem fordul le a kernelem, most virtualbox alatt próbálkoztam, de mindig elszáll. Amikor befordul rendesen, akkor meg nem csinálja meg a .deb csomagokat.

Tehát a make menuconfig után lefutatom a

fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
dpkg -i linux-image-2.6.*---------------------------------nincs
dpkg -i linux-headers-2.6.*-------------------------------nincs

Vajon miért?

Előre is köszi

Hát nekem lefordul. Én is forgattam 2.6.34-est, igaz ezt squeezen, de lennyin sem volt semmi bajom. Illetve tavaly szívtam vele, - hozzátenném én voltam a hülye - mert valami zlibet hiányolt, de feltettem a hiányzó csomagot és kész. Nézd meg pontosan mit ír ki a make error. Nem hiányol valamit.

Én mindig csomagot csinálok az alábbiak szerint:

make-kpkg kernel_image --initrd
make-kpkg kernel_headers

************************************************************************
Mielött beletaposnál a lelki világomba a 7 perc 30 másodperctől nézd meg ezt.

Debián forevör

Az alábbi hibaüzentet kapom a make-kpkg kernel_image --initrd kiadásakor:

[1]: Leaving directory `/usr/src/linux-2.6.28.2'
/usr/bin/make ARCH=i386 \
-C Documentation/lguest
make[1]: Entering directory `/usr/src/linux-2.6.28.2/Documentation/lguest'
cc -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include lguest.c -lz -o lguest
lguest.c:34:18: error: zlib.h: No such file or directory
make[1]: *** [lguest] Error 1
make[1]: Leaving directory `/usr/src/linux-2.6.28.2/Documentation/lguest'
make: *** [debian/stamp/build/kernel] Error 2

Próbáld meg az "apt-get build-dep linux-image" paranccsal a fordítás függőségeit telepíteni! Gondolom a libncurses-dev már fent van, ha a make menuconfig megy. :)

Egyébként ha létrejönnek a .deb csomagok, akkor a /usr/src könyvtár alatt keresd őket, ne a kernel forráskönyvtárában, ahol a fordítást végezted!

Hm.. LVM -et használsz? Sata driver be van forgatva (gondolom sata -s diszked van, ugye?)? Ext.3/4, stb fájlrendszerek be vannak forgatva vagy modulként vannak fordítva? Milyen fájlrendszered van? Milyen fájlrendszeren van a /boot?

A lényeg az, hogy a /boot fájlrendszere mindenképp legyen beforgatva a kernelbe, a többi fájlrendszert lehet modulként is fordítani, aztán initrd -ből azt berántja a kernel. De ha a /boot fájlrendszere nincs beforgatva, akkor már az initrd -t sem tudja beolvasni...

Esetleg még azt próbáld meg, hogy úgy forgatod a kernelt, hogy a működő kerneled .config fájlját bemásolod a fordítandó kernel forráskönyvátárába. Valahol a /boot/config-2.6.* környékén van, simán cp /boot/config-2.6.* /usr/src/linux/.config (vagy ahol van a kernel forrásod). Ezzel a módszerrel biztosan leforgatsz mindent modult, amit a disztribútor is szállít. Viszont így lesz egy csomó fölösleges modulod is...

Én úgy tudom, hogy az initrd-t még nem a kernel tölti. Pont ez lenne a lényeg, hogy az initrd eszköz független: a kernel után az initrd-t is még a boot loader tölti be, így a kernelnek nem kell tökölnie azzal, hogy milyen eszközről töltse be. Ebből több dolog is következik: nem kell tudni elérni a /boot eszközét és nem kell a /boot file rendszerét sem ismernie a kernelnek!

Sajna nekem nem jö össze ez a csomag összerakás:( Találkozott már valki hasonló problémával?

IHEX2FW firmware/keyspan_pda/xircom_pgs.fw
make[1]: Leaving directory `/usr/src/linux-2.6.31.14'
/usr/bin/make EXTRAVERSION=.14-some-string-here ARCH=i386 \
-C Documentation/lguest
make[1]: Entering directory `/usr/src/linux-2.6.31.14/Documentation/lguest'
cc -m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE lguest.c -o lguest
lguest.c:21:25: error: sys/eventfd.h: No such file or directory
lguest.c: In function ‘create_thread’:
lguest.c:1021: warning: implicit declaration of function ‘eventfd’
make[1]: *** [lguest] Error 1
make[1]: Leaving directory `/usr/src/linux-2.6.31.14/Documentation/lguest'
make: *** [debian/stamp/build/kernel] Error 2

A fakeroot-ot mostmár értem, de nem jutok egyről a kettőre a kernelfordítással, az alábbiak szerinte csinálom:

1, letőltöttem
2, kicaomagoltam tar -xvjf linux-2.6.31.14.tar.bz2
3, csináltam linket ln -s linux-2.6.31.14 linux (/usr/src)
4, beléptem a linux könyvtárba, majd cp -vi /boot/config-2.6.26-2-686 .config
5, make menuconfig
6, betöltöttem a .config fájlt
7, mentettem a config fájlt
8, fakeroot make-kpkg --initrd --append-to-version=-some-string-here kernel-image kernel-headers

Ez után dobta a hibaüzenetet:(

Most már nem dobaj a hibát, mert amit küldtél leírást, aszerint módosítottam, köszi.
Viszont beleszaladtam egy hibába, nem tölti be az uj kernelt, hanem át dob az initramfs menübe:(

Telapítettem a csomagokat:

dpkg -i linux-image-2.6.31.14-some-string-here_2.6.31.14-some-string-here-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.31.14-some-string-here_2.6.31.14-some-string-here-10.00.Custom_i386.deb

és reboot után az initramfs menübe dob:( miért?

Támadt egy ötletem. Miért nem hagyod a francba a kernelfordítást és töltesz le egy 32-eset a debian testing repóból. Vagy mindenáron a 31-eshez ragaszkodsz?

*************************************************************
Mielött beletaposnál a lelki világomba a 7 perc 30 másodperctől nézd meg ezt.

Debián forevör

Vagy mehet a kernel forgatás és a kapott bzImage fájlt betolja a grubba aztán mehet a rendszer. Én sokszor még az initrd-vel sem vacakolok. Minden ami kell ott van a kernelben, de az összes többi kikapcsolva (hangkártyák, videókártyák, sata vezérlők tipusai).
Nincs szivás. Ha a hangkártyát, hálókártyát nem tudom, akkor berakok néhányat modulból. Később amikor felállt a rendszer, egyenként betolom a modulokat. Ami megfogja, azt később fixre beforgatom. Jobb esetben magától berántja és az lsmoddal megnézem mi kell neki, később ezeket szintén fixen beleforgatom. Ami tényleg olyan, hogy évente 1x kell nekem, pl. ntfs támogatás, azt modulként beleteszem. Initrd ehhez totál felesleges, ha fixen ott van a sata vezérlő a rendszer már elindul, no para.
Többit meg majd behúzza a kernel a /lib/modules/ mappából.

Holnap neki esek megint, de most virtual gépen (virtual box-on), és ha nem jutok sehova, akkor átküldöm neked a configot, csak a gondom az, hogy felnyomok egy rendszert, és a .config filet load-olm be, aminek utánna mennie kellene. Régen a 2.4 kerneleknél nem volt ennyire elcseszve, de lehet, hogy én vagyok a bal*asz. Na mindegy holnap nekiesek megint...

Köszi mindenkinek

Az is eredményre szokott vezetni, hogy egy gyári kernel (pl. ubuntuban lévő) /boot alatt lévő config fájlt használod fel, csak kiveszed azt a több száz számodra teljesen felesleges modult. Majd egyre jobban lefaragod, mindig megtartva az előző, még sikeres változatot. A végére egész jól kicsontosodik ;)

Ha a vasad tartalmát fixen állítod be, nem kell
init.rd.

Mellesleg a "make" parancs megcsinál mindent,
ha jól emléxem fordítgatós időmre.

make_clean
make_menu_config
make
make_install