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.

Panašūs puslapiai

  1. Straipsniai
  2. Straipsniai/BranduolioKompiliavimas