Branduolio kompiliavimas
Kartais gali būti naudinga perkompiliuoti branduolį. To priežastys gali būti įvairios: norima greitesnio kompiuterio veikimo, trūkstamos tvarkyklės įrenginiams ir t.t., bet paprastai to eiliniam vartotojui niekada nereikia daryti. Čia mes pateiksime instrukcijas, kaip tai padaryti. Beveik kiekviena distribucija turi atskirus įrankius branduoliui kompiliuoti. Šiame straipsnelyje bus aprašomas branduolio kompiliavimas Ubuntu Edgy (6.10). Kadangi visiems vykdomiems veiksmas prireiks root tesisių, tai juo ir patampame:
sudo su -
Pagal nutylėjimą, terminalo komandas vykdo /bin/sh ir Edgy sistemoje tai yra simbolinė nuoroda į /bin/dash. Tačiau dash gan dažnai kelia paildomų problemų kompiliuojant iš išeities tekstų. bash šiuo atveju daug patogesnis.
rm -f /bin/sh ln -s /bin/bash /bin/sh
Atnaujiname paketų saugyklos duomenis:
apt-get update
Įdiegiame paketus, kurių reikės kompiliuojant branduolį:
apt-get install kernel-package libncurses5-dev wget bzip2 nano
Parsisiunčiame naujausio branduolio išeities tekstus:
cd /usr/src wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.3.tar.bz2
Išpakuojame branduolį ir sukuriame simbolinę nuorodą. Nuoroda reikalinga tam, kad kitos programos žinotų kur ieškoti branduolio išeities tekstų.
tar xjf linux-2.6.20.3.tar.bz2 ln -s linux-2.6.20.3 linux cd /usr/src/linux
Toliau, kaip ir minėjau pradžioje, pritaikysime branduolio pataisas. Sakykime, kad jas turite vardu patch.bz2 ir jis yra /usr/src/patch.bz2 Pradžioje tik pabandome:
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
Ir, jei viskas gerai, pritaikome:
bzip2 -dc /usr/src/patch.bz2 | patch -p1
Toliau nustatinėsime (konfigūruosime) branduolį. Kaip pradinius nustymus patogu imti iš veikiančios sistemos:
cp /boot/config-`uname -r` ./.config make menuconfig
Antroji komanda iškvies nustatymo pultą. Jame pasirenkame Load an Alternate Configuration File ir nurodome .config
Dabar, naudodami atsiverstąjį pultą, atliekame reikalingus nustatymus. Kadangi kiekvieno kompiuterio aparatinė įranga yra skitinga, negaliu tiksliau pasakyti kurios nuostatos bus optimaliausios. Pačiame pulte yra išsamus kiekvienos nuostatos aprašymas, kuris padės jums nuspręsti ar tai jums reikalinga. Sudėliojus nuostatas renkamės exit ir sutinkame su siūlymu išsaugoti naujus branduolio nustatymus.
Sudėliojus norimas nuostatas, galima kompiliuoti branduolį:
make-kpkg clean fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
Dabar belieka laukti kol branduolys bus sukompiliuotas. Kiek laiko tai užtruks priklauso nuo branduolio nustatymų, papildomų tvarkyklių ir, žinoma, kompiuterio kuriuo tai atliekate spartos. Su senesniais kompiuteriais tai gali užtrukti apie kelias valandas, naujesniais - apie pusvalandį.
Po sėkmingo kompiliavimo aplanke /usr/src surasite du deb paketus
cd /usr/src ls -l
Jei šios komandos jums parodė tik du deb paketus, tada juos paprasčiausia įdiegti taip:
dpkg -i linux*.deb
Jei daugiau - tai reikia įdiegti tik naujausios (mūsų kompiliuotos versijos) paketus:
dpkg -i linux-image-2.6.20.3-custom_2.6.20.3-custom-10.00.Custom_i386.deb dpkg -i linux-headers-2.6.20.3-custom_2.6.20.3-custom-10.00.Custom_i386.deb
Beliko įkrovos tvarkyklei nurodyti naująjį branduolį:
nano /boot/grub/menu.lst
Pridedame du nuostatų blokus:
title Ubuntu, kernel 2.6.20.3-custom root (hd0,0) kernel /boot/vmlinuz-2.6.20.3-custom root=/dev/sda1 ro quiet splash initrd /boot/initrd.img-2.6.20.3-custom savedefault boot title Ubuntu, kernel 2.6.20.3-custom (recovery mode) root (hd0,0) kernel /boot/vmlinuz-2.6.20.3-custom root=/dev/sda1 ro single initrd /boot/initrd.img-2.6.20.3-custom boot
Norėdami patikrinti naująjį branduolį, perkraukime kompiuterį:
shutdown -r now
Ir, jei viskas gerai, konsolėje surinkę:
uname -r
Turėtume išvysti kažką panašaus: 2.6.20.3-custom Jei naujasis branduolys nesikrauna, perkrovę kompiuterį renkamės seną ir bandome išsiaiškinti ką padarėme ne taip. Dažniausiai atsitinka taip, kad nebūna įkompiliuota failų sistemos, diskų įrenginių tvarkyklės, tad branduolys negali nuskaityti tolesnės įkrovos failų. Tokiu atveju reikėtų sužinoti savo motininės lusto (arba "pietų tilto" - southbridge, kuris atsakingas ir už kietuosius diskus) modelį (tokią informaciją galima gauti lspci komandą paleidus terminale veikiančioje branduolio konfigūracijoje) ir per menuconfig susirasti jos tvarkykles bei pažymėti, kad įkompiliuotų į branduolį (ne kaip modulį!). Taipogi kartais gali trūkti kitų tvarkyklių - SATA, PATA ir kt.