Sziasztok!
Bár Linux-szal már 2 éve foglalkozok, de kernelt még sosem patch-eltem és nem fordítottam.
Jelen esetben SLES11 SP1-ről van szó, a kernel verziója 2.6.32-es.
Konkrétan a "compcache 0.6.2" csomagban található "patch_swap_notify_core_support_2.6.33.diff" patch-et szeretném belefordítani a kernelbe. Alábbi oldalon található egy leírás, ami azt mondja hogy bár a patch a 2.6.33-as kernelhez van írva, de használható valszeg kicsivel régebbiekhez is, így valszeg 2.6.32-höz is:
http://code.google.com/p/compcache/wiki/CompilingAndUsingNew
Na most, a következő problémába ütköztem. Kétféle módszert is találtam a patch-eléshez, és nem ugyanaz a source fájl benne.
1. Először is a YAST Software Management-tel feltelepítettem a "kernel-source" csomagot, ami annyit tesz, hogy a /usr/src/ mappába beteszi a kernel-default-2.6.32.xxxx csomagot, azaz az egész kernel forrást.
Ehhez megpróbáltam hozzáadni a szóban forgó patch-et a szokásos "patch -p1 --dry-run < /usr/src/patch_swap_notify_core_support_2.6.33.diff" paranccsal. Természetesen nem illik rá. A swapfile.c fájlt nem tudja patch-elni. Majd módosítottam a patch-et kézzel, mivel úgy láttam hogy csak kevés módosítás van a swapfile.c fájlban az 2.6.33-ashoz képest. A kézzel módosított patch-el már lefutott a patch parancs, de fuzzy üzenettel, de legalább sikeres. Gondoltam ez használható, vagy legalábbis ki lehet próbálni.
Aztán a kernel fordítást nem ebből a forrásból akartam csinálni, előbbivel csak ki akartam próbálni hogy a patch fájl egyáltalán alkalmazható-e.
2. Igazából az alábbi linken találtam egy guide-ot:
https://www.ibm.com/developerworks/wikis/display/LinuxP/Re-building+a+S…
Ez a guide másik módszerrel fordítja újra a kernelt, "rpmbuild -ba kernel-default.spec" paranccsal. Azaz nem az előbb említett kernel-source forrást használja, hanem spec fájl alapján rpm buildet csinál BZIP2 forrásfájlokból. Ezek a BZIP2 forrásfájlok a /usr/src/packages/SOURCES mappában vannak. Innen dolgozik az rpmbild. Ide kell betenni a korábbi patch-et is, csak tar.bz2-be csomagolva.
Szépen becsomagoltam a patch fájlt BZIP2-be, ahogy a guide írja. Minden menne is, de a fordítás megszakadt a szóban forgó patch-nél. Az rpmbuild a /usr/src/packages/BUILD mappába build-eli az új forráskódot. Itt megnéztem hogy miért akadt el, és kiderült, hogy itt (/usr/src/packages/BUILD alatt) lévő swapfile.c fájl kölönbözik az 1-es pontban (/usr/src/kernel-default-2.6.32.xxxx alatti) szereplő swapfile.c fájltól. Az /usr/src/packages/BUILD alatti swapfile.c bővebb mint a másik. Mivel különbözik, ezért a patch nem tudott rá felmenni.
Lényeg a lényeg, miért különbözik a két kernel source ( a két swapfile.c) a két helyen?
Nem ugyanannak kéne lenniük? Vagy a 2-es pontban lévő már tartalmaz bizonyos más patch-eket?
Melyik a helyes módszer a kernel patch-eléshez, az 1-es pontban leírt kernel-source, aztán make, make install stb? Vagy a 2-es pontban leírt rpmbuild parancs? Mi a fő különbség a két módszer között??
Köszönet előre is!
batagy
- 1518 megtekintés
Hozzászólások
Hali!
No, hát nincs túl sok aktivitás...
Akkor felteszem egyszerűbben a kérdésem:
Azt feltételezem, hogy:
- A /usr/src/kernel-default-2.6.32.xxxx alatt az eredeti linux kernel (nem SUSE specifikus) van?
- A /usr/src/packages/SOURCES alatt pedig a SUSE-re testreszabott kernel?
Ez igaz vagy nem?
Másik variáció, hogy mindketttő ugyanaz a kernel, csak a build során mire elér a saját patch-emhez, addigra előtte más patch-ek már felmennek ugyanarra a fájlra, így a saját patch már nem tud felmenni, mivel a fájl változott.
Melyik a valóság?
Kösz!
- A hozzászóláshoz be kell jelentkezni
Szia!
A default nem az eredeti kernelt jelenti, hanem az alapértelmezettet (l. még -debug, -desktop, -pae, -ec2, -rt, -trace, -vmi, -xen).
A teljesen eredeti, SUSE javítások nélküli kernel neve kernel-vanilla.
- A hozzászóláshoz be kell jelentkezni
OK! Köszi! Ezt nem tudtam!
Ezek szerint, a két mappában lévő kernel valószínűleg ugyanaz, és az eltérés azért lehetett, mert már valami másik patch felment rá mire a szóban forgó patch akart menni. De ezt persze csak feltételezem.
De ha ugyanaz a két kernel, akkor elvileg make-kel újra tudnám fordítani...
- A hozzászóláshoz be kell jelentkezni