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

Mano Tux

Turinys

  1. Mano Tux
      1. Pasiruošimas darbui
      2. Konfigūravimas
      3. Kompiliavimas ir įdiegimas
      4. Pabaigai
      5. Panašūs puslapiai

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 scheduler

Pasirenkame 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) support

Power 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 binaries

Networking  --->
        Networking options  --->  
                <*> Packet socket
                <*> Unix domain sockets
                [*] TCP/IP networking
                {M}   Large Receive Offload (ipv4/tcp)
                <M>   INET: socket monitoring interface
                [*] Security Marking

Device 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 ;)

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!

Panašūs puslapiai

  1. ManoTux
  2. Straipsniai
  3. Straipsniai/FtpServerisSuProftpd
  4. Straipsniai/PagrindinėsKomandos