Fedora Core 3 pro lamy - kompilace kernelu
Předpokládám, že na základě předchozích článků již máte Fedoru Core 3 nainstalovanou, konfigurovanou a obohacenou o další programy a pluginy.
V tomto článku se podívám na kompilaci kernelu. Kompilace kernelu již nevypadá jako téma pro lamy, nicméně, v některých případech se tomu nevyhneme, konkrétně při zprovoznění CDMA na Linuxu, protože cdc-acm
ovladač, díky chybě v Quallcom modemu (chybně reportované max_packet_size
) dosahuje bez úprav maximální rychlosti jen cca 28KB/s.
Kompilace kernelu ze zdroje je vhodná i tehdy, pokud chcete optimalizovat kernel pro Váš počítač, a nezahrnovat do jádra (případně formou modulů) podporu pro řadu ovladačů, protokolů, hardware a dalšího, které nemáte, ale standardní kernel je přitom obsahuje.
Zdrojové kódy kernelu
Z fedora.redhat.com/updates/ si stáhněte poslední verzi kernelu, v době psaní tohoto článku je to soubor kernel-2.6.9-1.681_FC3.src.rpm a tento zdrojový kód kernelu si nainstalujte a sestavte:
su rpm -ivh kernel-2.6.9-1.681_FC3.src.rpm rpmbuild -bp --target=noarch /usr/src/redhat/SPECS/kernel-2.6.spec
Následně budete mít kernel dostupný v adresáři /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9
. Podívejte se do pod-adresáře configs
a zkopírujte konfigurační soubor pro kernel dle typu Vašeho procesoru / architektury do souboru .config
o adresář výše, pro P-IV/HT tedy takto:
cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 cp configs/kernel-2.6.9-i686-smp.config .config
Soubor .config
obsahuje specifikaci, které moduly a části jádra budou zkompilovány. Pokud byste .config
neměnili, dostanete přesně stejný kernel, jak si stáhnete od RedHatu (takže kompilace by byla zcela k ničemu).
Přizpůsobení kernelu
Kernel si můžete přizpůsobit v textovém menu (existují i volby gconfig
a xconfig
pro grafické menu, ale je to naprosto to samé), které Vám ukáže zhruba 2.500 různých voleb, co si přejete (či nepřejete) do Vašeho nového kernelu zahrnout. Základním bodem bývá volba typu procesoru, podporované chipsety, grafické karty (pokud máte nVidia, nemusíte instalovat ATI, Matrox a další), modemy, síťové karty (včetně třeba podpory pro TokenRing), filesystémy (včetně NTFS), a mnohé další.
Každá položka menu má po stisknutí ?
dostupnou nápovědu, a rovněž doporučenou hodnotu, která máte ponechat, pokud té položce nerozumíte.
Uložení těchto voleb provedete stiskem klávesy Escape
a potvrzením dotazu na uložení nového .config
souboru. Interaktivní menu pro nastavení parametrů kernelu zobrazíte takto:
su cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 make menuconfig
Kompilace a instalace kernelu
Před kompilací kernelu ješte musíte zmodifikovat soubor Makefile
, na jeho začátku naleznete specifikaci verze kernelu, doporučuji si ji změnit dle svého, a to konkrétně položku EXTRAVERSION
, tato položka se totiž doplní do názvu instalovaného kernelu, a nebude tak kolidovat s kernelem stávajícím (a budete moci bootovat oba dva).
VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 9 EXTRAVERSION = -cdma
Vlastní kompilace a instalace je potom velice jednoduchá:
su cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 make clean make make modules_install make install
Pokud používáte grub
, je tímto vše hotovo, při rebootu počítače si budete moci zvolit starý i nový kernel. Pokud nový kernel bude fungovat, můžete starý kernel z /boot
, /boot/grub/grub.conf
a /lib/modules
vymazat.
Zprovoznění CDMA
Pro CDMA je nutné ručně udělat úpravu cdc-acm.c
, dle návodu Petra Písaře, před kompilací kernelu (modulů), jako parametr pro max_packet_size
se mi osvědčila hodnota 4096
.
Potom již jen stačí nadefinovat nové spojení na /dev/ttyACM0
(nikoliv tedy na defaultním /dev/input/ttyACM0
) s číslem #777
.
Pokud nechcete modulu předávat parametr, můžete to udělat klidně i “natvrdo”, třeba doplněním těchto řádků do cdc-acm.c
:
@071+ #define QUALCOMM_VENDOR_ID 0x05c6 @072+ #define QUALCOMM_GTRAN_6420 0x3196 @656+ if ( @657+ usb_dev->descriptor.idVendor==QUALCOMM_VENDOR_ID && @658+ usb_dev->descriptor.idProduct==QUALCOMM_GTRAN_6420 @659+ ) { @660+ epctrl->wMaxPacketSize = 4096; @661+ epread->wMaxPacketSize = 4096; @662+ epwrite->wMaxPacketSize = 4096; @663+ } ctrlsize = epctrl->wMaxPacketSize; readsize = epread->wMaxPacketSize; acm->writesize = epwrite->wMaxPacketSize;
Důležité: po instalaci nového kernelu musíte reinstalovat i nvidia ovladače (modul)!
Mé užívání Fedora Core 3 bohužel skončilo tím, že jsem moc lama na to, abych si nějakým způsobem nainstaloval WiFi kartu (ASUS WL-138G). Existuje nějaké jednoduché řešení?
28 KB/s - nemyslel jsi 28Kb/s? 28KB/s mi málo opravdu nepřipadá :-)
[2] ne, 28KB/s je zcela správně, CDMA jinak běží na 100KB/s
[1] To bude tím, že pro tuto kartu nejsou nativní linuxové ovladače a je potřeba používat projek 'ndiswrapper,' který natahuje originální windowz ovladače. A to samozřejmě nebude ani jednoduché na rozchození, ani příliš stabilní. Ale možná se mohu mýlit.
Relevantní odkazy: ndiswrapper a seznam podporovaných zařízení/ovladačů.
[1] Ja uz jsem rozchodil nekolik ruznych wireless karet pomoci linuxant. Je to uplne jednoduche a programu se predhodi ovladace pro win a to zvladne i zacatecnik. Program je mozno vyzkouset pro MAC addressu a pak az zaplatit.
[4] [5] Díky za rady... Zatím se mi nepovedlo windowsácký drivery loadnout, protože mi to tvrdí, že zařízení neni připojeno, ale to už snad nějak vyřeším.
Pro "instalaci" jádra doporučuji použít radši přímé kopírování bzImage z arch/i386/boot/ do /boot, protože se těm automatickým věcičkám nedá věřit. :-)
[7] hm, nějaký konkrétní důvod, proč se *dá* "věřit"
./configure
,make
,make menuconfig
,make modules_install
, alemake install
ne? ;-)když dám do konzole # rpm -ivh kernel.src.rpm tak mi to vyhodi tohle "warning: kernel-2.6.11-1.20_FC3.src.rpm: V3 DSA signature: NOKEY, key ID 30c9ecf8
error: nemohu vytvořit sourcedir: /usr/src/redhat/SOURCES"
co s tim?
mam problem - mam jadro 2.6.9-1.667 a kdyz jsem dal automaticky upgrade jadra na 2.6.11-1.35_FC3, tak pri bootovani tohoto jadra se to "sekne" na "Nastavuji parametry jadra:". Ani po hodine nic, tak jsem dal CTRL-C a rozjelo se to -bohjuzel ne na dlouho - tentokrat se to (natrvalo) zastavi na "Spoustim zaznamenavani systemu" (nebo nejak tak)...
Ted jsem zkousel zkompilovat "vlastni" jadro, ale presne ten samy problem... Nevite nekdo kde je chyba?