Tikrai netaikau į branduolio kompiliavimo guru, todėl atviro vikyje yra kitas, labiau bendrinis straipsnelis. Čia būdas, kuriuo naudojuosi pats.
Mano Tux

Turinys
Pasiruošimas darbui
Namų puslapis http://kernel.org
arba einame į ftp://ftp.eu.kernel.org/pub/linux/kernel/v2.6/
susirandame LATEST bylą, kurios vardas bus naujausio branduolio numeris.
LATEST-IS-2.6.24.2
Įsijungiame terminalą, plačiau apie jį čia Straipsniai/PagrindinėsKomandos
Įgauname teisę vykdyti:
sudo bash arba su
Įdiegiame reikalingus įrankius (archlinux jau yra):
apt-get install build-essential gcc libncurses5 libncurses5-dev libqt3-mt-dev
Keliaujame į darbo vietą:
cd /usr/src/
Parsisiunčiame išeities kodą:
wget ftp://ftp.eu.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.2.tar.bz2
arba automatiškai:
#: wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/LATEST* && VAR=$(ls | grep LATEST-IS | sed -e 's/LATEST-IS-//') && rm LATEST-IS* && wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-$VAR.tar.bz2
Dabar reikia išpakuoti archyvą, taigi pažiūrim ar jis tikrai yra:
box:/usr/src# ls linux-2.6.24.2.tar.bz2 ir išpakuojam tar -xvvjf linux-2.6.24.2.tar.bz2
Kad kitos įrangos tvarkyklių (drivers) diegikliai rastų branduolio kodą yra susitarimas sukurti nuorodą į jį:
ln -s linux-2.6.24.2 linux cd /usr/src/linux
Teisingai konfigūracijai reikia žinoti kokia techninė įranga (geležis) yra sumontuota toje ūžiančioje dėžėje. Tam naudoju sekančius įrankius, bei kad būtų patogu skaityti, sukuriu bylą kurioje ir bus aprašas, ir visa tai darau namų kataloge:
cd touch gelezis lspci > gelezis lshw >> gelezis
Įrankis lspci bus tikrai, o lshw gali tekti įdiegti. Dabar mano namų kataloge (/home/vartotojas/gelezis) yra „detalių“ sąrašas ir galiu patogiai su teksto redaktorium viską matyti. Alternatyviai galima naudotis [HardInfo]
Konfigūravimas
Na štai ir prasideda tikrasis darbas, aš užtrunku maždaug valandą gerai žinodamas ko ieškau ir kas turi būti. Netgi jau turėdamas senesnio branduolio konfigūraciją turiu ją peržiūrėti visą, nes su nauja versija atsiranda papildymai, kurie gali būti man nereikalingi. Čia pagrindinis tikslas yra nustatyti branduolio konfigūraciją, tai yra pasirinkti ką įdėti į patį branduolį, ką pasirinkti kaip modulius, ir ko nereikia išvis. Pradėsiu nuo to ko nereikia. Kadangi man reikia tik to ko reikia ir nieko daugiau, aš išimu viską ir tik tada dasidedu reikiamas dalis. Toliau: įkompiliuoti į branduolio monolitą ar kaip modulį, kuris kraunamas tik pasikrovus branduoliui. Įkompiliuoti būtina tai, be ko branduolys nesikraus, tai procesoriaus, pagrindinės plokštės, failų sistemos tvarkyklės.
Nustatant parametrus nebūtina daryti viską iš eilės, esant poreikiui galima pakeisti ką norit, bet kai kurie nustatymai susiję, todėl reikia pažiūrėti „Help“, ten bus parašyta, Taip pat naudojantis „xconfig“ yra „search“, labai padeda kartais.
Jeigu kas nors neaišku, naudojamės parametro aprašymu (Help), bei deliojame varneles tarpo klavišu.
[*] Įdėti vidun
[M] Modulis
[ ] Gali būti įdėtas vidun
< > įdėtas vidun, modulis
{ } vidun/modulis - pasirinkta pagal kitus parametus
- - pasirinkta kitų parametrų (depai)Pradedam:
cd /usr/src/linux make menuconfig arba make xconfig
Branduolio konfigūracija
Tvarkyklių, programinės įrangos, emuliatorių palaikymas
General setup --->
[*] Prompt for development and/or incomplete code/drivers
[*] Support for paging of anonymous memory (swap)
[*] POSIX Message Queues
[*] BSD Process Accounting
[*] Initial RAM filesystem and RAM disk (initramfs/initrd
[*] Optimize for size (Look out for broken compilers!) [*] Enable loadable module support --->
[*] Module unloading
[*] Forced module unloading
[*] Module versioning support
[*] Automatic kernel module loading
„Didelių sluoksnių“ palaikymo nuostatos
-*- Enable the block layer --->
IO Schedulers --->
<*> CFQ I/O schedulerPasirenkame procesorių: Taip pat žiūrime lshw pateiktus procesoriaus parametus.
Processor type and features --->
(Athlon/Duron/K7) Processor family
[*] Generic x86 support
[*] Local APIC support on uniprocessors
<M> /dev/cpu/*/msr - Model-specific register support
<M> /dev/cpu/*/cpuid - CPU information support
[*] MTRR (Memory Type Range Register) supportPower management options --->
[*] Power Management support
[*] ACPI (Advanced Configuration and Power Interface) Sup│Bus options (PCI etc.) --->
[*] PCI support
[*] Enable deprecated pci_find_* API
[*] ISA support
<M> Support for PCI Hotplug (EXPERIMENTAL) --->
<M> Fake PCI Hotplug driver
<M> ACPI PCI Hotplug driver Executable file formats / Emulations --->
<M> Kernel support for MISC binariesNetworking --->
Networking options --->
<*> Packet socket
<*> Unix domain sockets
[*] TCP/IP networking
{M} Large Receive Offload (ipv4/tcp)
<M> INET: socket monitoring interface
[*] Security MarkingDevice Drivers --->
Generic Driver Options --->
(/sbin/hotplug) path to uevent helper
[*] Select only drivers that don't need compile-time externa│
[*] Prevent firmware from being built
{*} Userspace firmware loading support
<*> Memory Technology Device (MTD) support --->
-*- MTD partitioning support
-*- Plug and Play support --->
-*- ISA Plug and Play support
[*] Plug and Play BIOS support (EXPERIMENTAL)
[*] Plug and Play BIOS /proc interface
[*] Block devices --->
<M> Loopback device support
<M> Packet writing on CD/DVD media
(8) Free buffers for data gathering
<*> ATA/ATAPI/MFM/RLL support --->
<M> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
<M> Include IDE/ATA-2 DISK support
[*] Use multiple sector mode for Programmed Input/Output
<M> Include IDE/ATAPI CDROM support
<M> Include IDE/ATAPI TAPE support (EXPERIMENTAL)
<M> Include IDE/ATAPI FLOPPY support
[*] IDE ACPI support
[*] legacy /proc/ide/ support
<M> generic/default IDE chipset support
<M> Platform driver for IDE interfaces
[*] Sharing PCI IDE interrupts support
<M> Generic PCI IDE Chipset Support
<M> VIA82CXXX chipset support ### CIPSETAS --> lshw
[*] Network device support --->
<M> Dummy net driver support
[*] Ethernet (10 or 100Mbit) --->
{M} Generic Media Independent Interface device support
[*] EISA, VLB, PCI and on board controllers
<M> RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support
<M> VIA Rhine support
[*] Use MMIO instead of PIO
[*] Use Rx Polling (NAPI)
{M} I2C support --->
<M> I2C device interface
I2C Algorithms --->
-M- I2C bit-banging interfaces
I2C Hardware Bus support --->
<M> VIA VT82C596/82C686/82xx and CX700
<*> Hardware Monitoring support --->
<M> VIA VT8231
Graphics support --->
<*> /dev/agpgart (AGP Support) --->
<M> VIA chipset support
< > Direct Rendering Manager (XFree86 4.1.0 and higher DRI #pas mane xorg
<*> Support for frame buffer devices --->
<*> VGA 16-color graphics support
[M] VESA VGA graphics support
< > nVidia Framebuffer Support
[*] Enable DDC Support
[*] Support for backlight control
Sound --->
<*> Sound card support
Advanced Linux Sound Architecture --->
<*> Advanced Linux Sound Architecture
<M> Sequencer support
<M> Sequencer dummy client
<M> OSS Mixer API
<M> OSS PCM (digital audio) API
[*] OSS PCM (digital audio) API - Include plugin system
[*] OSS Sequencer API
[*] Support old ALSA API
[*] Verbose procfs contents
PCI devices --->
<M> VIA 82C686A/B, 8233/8235 AC97 Controller
[*] HID Devices --->
{*} Generic HID support
[*] HID debugging support
<M> USB Human Interface Device (full HID) support
[*] /dev/hiddev raw HID device support
USB HID Boot Protocol drivers --->
<M> USB HIDBP Keyboard (simple Boot) support
<M> USB HIDBP Mouse (simple Boot) support
[*] USB support --->
<*> Support for Host-side USB
[*] USB device filesystem
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD support
<M> USB Printer support
<M> USB Mass Storage support
[*] DMA Engine support --->
<M> Userspace I/O drivers ---> Svarbu! Failų sistemos tvarkyklė, kurioje randasi paruoštas branduolys, turi būti įkompiliuota į monolitą
File systems --->
<*> Second extended fs support
[*] Ext2 extended attributes
[*] Ext2 POSIX Access Control Lists
<*> Ext3 journalling file system support
[*] Ext3 extended attributes
[*] Ext3 POSIX Access Control Lists
<*> XFS filesystem support
... toliau patys...Manau jau pakanka.. Skaitykit patys
- Išsaugojame nuostatas .config byloje
Kompiliavimas ir įdiegimas
make make modules make modules_install cp arch/i386/boot/bzImage /boot/mano
Redaguojame /boot/grub/menu.lst jeigu kieto disko jungtis ide disko vardas yra hd*, čia yra problemėlė, nes „šiuo metu“ visi diskai vadinami sd*. Tai priklauso nuo branduolio iniciavimo būdo. Geriau savo parametrus rašyti virš bendro bloko.
title mano root (hd0,0) kernel /boot/mano root=/dev/hda1 ro
taip pat teks ir /etc/fstab UUID***** pervadint į tikrus /dev vardus. Tai taikoma tik / ir swap, bet man patinka sena tvarka šiuo atžvilgiu.
#UUID=991782d7-d9a1-4dc3-b46e-e2e0791ec7d2 / ext3 defaults 0 1 /dev/hda1 / ext3 defaults 0 1 #UUID=a197341c-3ecf-461e-8288-1c3f9a71468e swap swap defaults 0 0 /dev/hda2 swap swap defaults 0 1 #UUID=be0a9b74-3e08-490c-9e1c-67a0d714c948 /home xfs defaults 0 1 /dev/hda3 /home xfs nobarrier 0 1
tokiu būdu nesikraus distros branduolys. Tai pataisoma redaguojant /boot/grub/menu.lst Iš:
title Arch Linux root (hd0,0) kernel /boot/vmlinuz26 root=/dev/disk/by-uuid/991782d7-d9a1-4dc3-b46e-e2e0791ec7d2 ro initrd /boot/kernel26.img
Į :
title Arch Linux root (hd0,0) kernel /boot/vmlinuz26 root=/dev/sda1 ro initrd /boot/kernel26.img
keistai atrodo
reboot
Pabaigai
Nebėda jeigu pamiršote kokią tvarkyklę. Pridėjus kaip modulį, paties branduolio perkompiliuot nereikės. Aš niekad nelaikau branduolio išeities tekstų /usr/src kataloge Visada darau nuorodą, kad nereiktų siustis OS perdiegimo atveju, ar galų gale neužimtų vietos, ar neprarasčiau .config bylos. Bei baigus diegti tvarkykles, kadangi pagal susitarimą tai veikiančio branduolio katalogas, diegimo skriptai žiūri būtent ten, nuorodą paprasta ištrinti.
cd /usr/src ln -s /home/mevvis/Sistemai/linux-2.6.27.4 linux
Jeigu distribiucijos branduolio numeris sutaps su Jūsų visi pakeitimai bus perrašyti „ant viršaus“. Jeigu neveikia koks nors įrenginys, visada galima rinktis kiek senesnę branduolio versija, arba tikrai verta bandyti kompiliuoti distribiucijos pateikiamus branduolio išeities tekstus, nes jie bus modifikuoti ir pritaikyti butent tai distribiucijai. Kompiliuojant vanilla branduolį tvarkykles teks taip pat naudoti „vanilines“, nors negarantuoju kad taip bus be išimties.
P.S. Strapsnelis nebūtinai turi sutapti su Jūsų nuomone, taip pat nepretenduoja į branduolio kompiliavimo vadovą. Pastebėjimai, papildymai visada laukiami!