Jedro Linuxa je najnovejše. Priročnik za gradnjo jedra Linuxa iz izvorne kode

Jedro(Angleščina) jedro) je tisto, okoli česar je zgrajeno vse ostalo. Temu se reče Linux. Zdaj se beseda Linux v vsakdanjem življenju imenuje operacijski sistem, zgrajen na njem, čeprav se na dober način imenuje GNU / Linux (jedro Linuxa in programska oprema iz projekta GNU, ki se razvija že več desetletij).

Ubuntu uporablja jedro z velikim številom popravkov, od katerih nekateri dodajajo nestabilne in eksperimentalne funkcije.

Vsaka izdaja Ubuntuja ima svojo različico jedra. Izdaje LTS od 10.04 so lahko nadgradile jedro na različice, vključene v novejše izdaje.

Različica UbuntuRazličica jedra
4.10 2.6.9
5.04 2.6.11
5.10 2.6.13
6,06LTS 2.6.15
6.10 2.6.18
7.04 2.6.19
7.10 2.6.20
8,04LTS 2.6.24
8.10 2.6.27
9.04 2.6.28
9.10 2.6.31
10,04LTS 2.6.32
10.10 2.6.35
11.04 2.6.38
11.10 3.0.4
12,04LTS 3.2
12.10 3.5
13.04 3.8
13.10 3.11
14,04LTS 3.13
14.10 3.16
15.04 3.19

vilice

Oštevilčevanje različic jedra Ubuntu in na spletnem mestu kernel.org se ne ujemata, saj razvijalci Canonical dodajo mikro različico, ki označuje dodane popravke. Na primer, različica 3.2.0-23 bi pomenila, da jedro temelji na veji 3.2, ki ima 23 popravkov.

V repozitoriju Ubuntu so podprte naslednje vrste jeder:

jedro generic-pae omogoča 32-bitnemu sistemu uporabo do 64 GB celotnega RAM-a, pri čemer za potrebe določenega procesa ne dodeli več kot 4 GB, medtem ko preprosto generično jedro deluje z največ 4 GB RAM-a.

64-bitno jedro omogoča naslavljanje do 1TB pomnilnika, ki ga porabijo procesi.

Če morate posodobiti jedro na novejšo glavno različico (običajno je to posledica dejstva, da nove različice dodajo podporo za novo strojno opremo, odpravijo regresije), lahko uporabite uradno podprt arhiv http://kernel.ubuntu.com/ ~kernel-ppa/mainline/ .

Prevajanje jedra

Gradnja jedra iz izvorne kode zahteva nekaj spretnosti in znanja o delovanju OS.

Preden začnete graditi jedro, morate namestiti naslednje pakete:

Build-essential fakeroot ncurses-dev libssl-dev

Vsa nadaljnja dejanja je treba izvesti v imenu superuporabnika:

sudo su

Pridobivanje izvorne kode

Izvorno kodo za jedro, ki ga uporablja Ubuntu, lahko dobite z namestitvijo paketa linux-source:

apt-get namestite vir linux

Po namestitvi v imenik /usr/src tam bo arhiv z naslovom linux-source-verify_kernels.tar.bz2.

Prav tako lahko prenesete arhiv z izvorno kodo jedra s spletnega mesta kernel.org.

Ko prenašate jedro s spletnega mesta kernel.org, boste morali nanj namestiti popravke

Konfiguracija

Razpakirajte nastali arhiv in za udobje ustvarite simbolično povezavo do nastalega imenika:

cd / usr/ src tar xjf ./ linux-source-3.2.0.tar.bz2 ln -s ./ linux-source-3.2.0 ./ linux cd ./ linux

Za poenostavitev postopka konfiguracije jedra lahko kopirate nastavitve trenutnega jedra.

V tem vodniku po korakih se boste naučili, kako pravilno zgraditi in namestiti jedro veje >2.6 v družino OS Ubuntu.

1. korak: pridobite izvorno kodo jedra

Izvore jedra Ubuntu lahko dobite na dva načina:

    Z namestitvijo arhiva iz repozitorija, s samodejnim prekrivanjem najnovejših uradnih popravkov. S tem boste v trenutno mapo prenesli ~150 MB paket. Če želite pridobiti izvorno različico jedra, katerega različica je nameščena v računalniku, zaženite ukaz: apt-get source linux-image-`uname -r`

    Lahko pa namesto `uname -r` podate določeno različico izmed tistih, ki so na voljo v repozitoriju.

Seznam različic, ki so na voljo v repozitoriju, si lahko ogledate tako, da vnesete ukaz: “apt-get source linux-image-” in, ne da bi pritisnili Enter, dvakrat pritisnete tipko Tab.

Ne pozabite omogočiti skupne rabe vira v repozitoriju (Sistemske nastavitve → Programi in posodobitve → Programska oprema Ubuntu → Izvorna koda). To lahko storite s konzole tako, da odkomentirate vrstice, ki se začnejo z deb-src v datoteki /etc/apt/sources.list, in nato posodobite z ukazom: “sudo apt-get update”.

    Najnovejša različica jedra je na voljo pri git. Velikost prenesenega paketa je ~500-800 Mb. git klon git://kernel.ubuntu.com/ubuntu/ubuntu- .git

    Kje - ime izdaje, na primer:

    Git klon git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git

Druga jedra

Obstajajo tudi jedra, za katera ni zajamčeno, da bodo delovala pod Ubuntujem. Na primer, obstaja znana težava s številnimi priljubljenimi sistemskimi aplikacijami (zlasti gonilniki NVidia, VirtualBox), ki se po namestitvi prevedejo za nameščeno jedro. Če jih želite namestiti v jedro, ki ni standardno za to različico Ubuntuja (na primer, Ubuntu 16.04 ima jedro 4.4.0), lahko zahtevajo ločeno ročno prevajanje ali posebne popravke in aplikacija morda ne podpira najnovejše različice kernel.org sploh.

    Arhiv iz osnovne različice brez popravkov, tj. npr. "4.8.0", "4.8.10": sudo apt-get install linux-source

Razpakirajte nastali arhiv z ukazi:

Cd ~/ tar -xjf linux-2.6.x.y.tar.bz2

Ali v primeru linux-source:

Cd /usr/src tar -xjf linux-source-2.6.x.y.tar.bz2

2. korak: Pridobivanje paketov, potrebnih za gradnjo

Ta korak je potreben le, če se jedro v računalniku gradi prvič.

Zaženite naslednje ukaze za namestitev osnovnih paketov:

sudo apt-get posodobitev sudo apt-get build-dep linux sudo apt-get namestitev kernel-package

    konfiguracija- tradicionalni način konfiguracije. Program enega za drugim prikaže konfiguracijske parametre in vas pozove, da za vsakega od njih nastavite drugo vrednost. Ni priporočljivo za neizkušene uporabnike.

    oldconfig- konfiguracijska datoteka se ustvari samodejno na podlagi trenutne konfiguracije jedra. Priporočljivo za začetnike.

    defconfig- konfiguracijska datoteka se ustvari samodejno na podlagi privzetih vrednosti.

    menuconfig- psevdografični vmesnik za ročno konfiguracijo, ne zahteva zaporednega vnosa vrednosti parametrov. Priporočljivo za uporabo v terminalu.

    xconfig- grafični (X) vmesnik za ročno konfiguracijo, ne zahteva zaporednega vnosa vrednosti parametrov.

    gconfig- grafični (GTK+) vmesnik za ročno konfiguracijo, ne zahteva zaporednega vnosa vrednosti parametrov. Priporočljivo za uporabo v okolju GNOME.

    localmodconfig- samodejno ustvarjena konfiguracijska datoteka, ki vključuje samo tisto, kar je potrebno za to posebno napravo. Ko pokličete ta ukaz, bo večina jedra modulirana

V primeru, da želite uporabiti konfiguracija, oldconfig, defconfig, localmodconfig oz localyesconfig, ne potrebujete več dodatnih paketov. V primeru preostalih treh možnosti je treba namestiti tudi dodatne pakete.

menuconfig zaženite naslednji ukaz:

sudo apt-get namestite libncurses5-dev

Za namestitev paketov, potrebnih za uporabo gconfig zaženite naslednji ukaz:

sudo apt-get namestite libgtk2.0-dev libglib2.0-dev libglade2-dev

Za namestitev paketov, potrebnih za uporabo xconfig zaženite naslednji ukaz:

Pred Ubuntu 12.04: sudo apt-get install qt3-dev-tools libqt3-mt-dev

sudo apt-get namestite libqt4-dev

Korak 3. Uporaba obližev

Ta korak ni obvezen.

Uradni popravki so bili že uporabljeni za vire, če je bilo jedro pridobljeno z zgoraj opisanim ukazom:

apt-get source linux-image-`uname -r`

Če še nikoli niste uporabljali popravkov za izvorno kodo, zaženite naslednji ukaz:

namestitveni popravek sudo apt-get

Ta ukaz bo namestil program popravkov, ki je potreben za, morda ugibate, uporabo popravkov. Zdaj prenesite datoteko popravka v mapo, kjer ste razpakirali jedro. To je lahko arhivska datoteka (npr. Bzip2 ali Gzip) ali nestisnjena datoteka popravka.

Na tej točki se domneva, da ste datoteko že shranili v mapo, kjer ste predhodno razpakirali jedro in namestili program popravkov.
Če je bila datoteka, ki ste jo prenesli, v formatu Gzip (*.gz), zaženite naslednji ukaz, da izvlečete vsebino arhiva:

Gunzip popravek-2.6.x.y.gz

Če je bila datoteka, ki ste jo prenesli, v formatu Bzip2 (*.bz2), zaženite naslednji ukaz, da izvlečete vsebino arhiva:

Bunzip2 popravek-2.6.x.y.bz2

kjer je 2.6.x.y različica popravka jedra. Ustrezni ukazi bodo datoteko popravka razpakirali v izvorno mapo jedra. Pred namestitvijo popravka se morate prepričati, da bo deloval brez napak. Če želite to narediti, zaženite ukaz:

Popravek -p1 -i popravek-2.6.x.y --dry-run

kjer je 2.6.x.y različica popravka jedra. Ta ukaz bo simuliral uporabo popravka brez spreminjanja samih datotek.

Če med njegovim izvajanjem ne pride do napak, se lahko spremembe varno izvajajo v samih datotekah. Če želite to narediti, zaženite ukaz:

Popravek -p1 -i popravek-2.6.x.y

kjer je 2.6.x.y različica popravka jedra. Če ni bilo napak, je bil popravek uspešno uporabljen za izvorno kodo.

Pozor! Preden uporabite popravek, naredite naslednje: 1. Prenesite s http://www.kernel.org popravek iste različice kot vaši viri. 2. Zaženite naslednji ukaz: patch -p1 -R

kjer je 2.6.x.y različica popravka in vaših virov

Korak 4. Konfiguracija prihodnje gradnje jedra

Z zagonom ukaza se pomaknite do mape, v katero ste razpakirali jedro

Cd ~/linux-2.6.x.y

kjer je 2.6.x.y različica jedra, ki ste ga prenesli.

Na tej točki bi se morali že odločiti za način konfiguracije jedra (če ne, jih preverite v razdelku Pridobivanje potrebnih paketov za gradnjo. Glede na to zaženite naslednji ukaz, da zaženete način konfiguracije po vaši izbiri:

    konfiguracija- tradicionalni način konfiguracije. Program enega za drugim prikaže konfiguracijske parametre in vas pozove, da za vsakega od njih nastavite drugo vrednost. Pokliče ga ukaz make config

    oldconfig- konfiguracijska datoteka se ustvari samodejno na podlagi trenutne konfiguracije jedra. Priporočljivo za začetnike. Pokliče ga ukaz make oldconfig

    defconfig- konfiguracijska datoteka se ustvari samodejno na podlagi privzetih vrednosti za to posebno arhitekturo. Pokliče ga ukaz make defconfig

    menuconfig- psevdografični vmesnik za ročno konfiguracijo, ne zahteva zaporednega vnosa vrednosti parametrov. Priporočljivo za uporabo v terminalu. Pokličite: make menuconfig

    gconfig in xconfig- grafični konfiguratorji za ročno konfiguracijo. Pokliči: make gconfig

    Naredite xconfig

    oz

    localmodconfig in localyesconfig- avtomatski konfiguratorji. Konfiguracija je ustvarjena na podlagi trenutno klicanih modulov in delujočega jedra. Razlika med tema dvema konfiguratorjema je v številu modulov. V prvem primeru bo vsaj 50% jedra, v drugem pa ne več kot 2 modula. Pokliči: make localmodconfig

    Naredite localyesconfig

    oz

Po klicu se zažene ustrezen konfiguracijski program. Izvedite potrebne nastavitve glede na vaše potrebe, shranite konfiguracijsko datoteko in nadaljujte z naslednjim korakom.

Korak 5 Gradnja jedra

Priprave so torej končane. Zdaj lahko začnete postopek gradnje jedra. Če želite to narediti, zaženite ukaz:

Fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers #-j<количество ядер процессора>+1

Gradnja jedra lahko traja od 20 minut do nekaj ur, odvisno od konfiguracije jedra in tehničnih parametrov računalnika. Gradnja na večjedrnem procesorju je lahko nekajkrat hitrejša

6. korak Namestitev slik in glav jedra

Ko je gradnja jedra končana, se bosta v domači mapi prikazala dva paketa deb. Treba jih je namestiti. Če želite to narediti, zaženite ukaze:

Cd ~/ sudo dpkg -i linux-image-2.6.x.y-custom_2.6.x.y-custom-10.00.Custom_arc.deb sudo dpkg -i linux-headers-2.6.x.y-custom_2.6.x.y-custom-10.00. Custom_arc.deb

kjer je 2.6.x.y različica vgrajenega jedra, arc je arhitektura procesorja (i386 - 32-bit, amd64 - 64-bit).
Če ne poznate točnega imena paketa, navedite datoteke v domačem imeniku z ukazom

in poiščite prav ta dva paketa.

7. korak Ustvarite začetni disk RAM

Ubuntu za pravilno delovanje potrebuje začetno sliko diska RAM. Če ga želite ustvariti, zaženite ukaz:

sudo update-initramfs -c -k 2.6.x.y-custom

kjer je 2.6.x.y različica jedra za gradnjo.

Korak 8 Posodabljanje konfiguracije zagonskega nalagalnika GRUB

Če želite, da je nova različica jedra na voljo za izbiro, ko se računalnik zažene, zaženite naslednji ukaz:

sudo update-grub

Datoteka menu.lst (za različico GRUB 1) ali grub.cfg (za različico GRUB 2) bo posodobljena, da bo odražala nameščene operacijske sisteme in slike jedra.

Korak 9 Preverjanje jedra

Prevajanje in namestitev jedra uspešno zaključena! Zdaj znova zaženite računalnik in poskusite zagnati sistem z novim jedrom. Če želite zagotoviti, da je sistem zagnan z novim jedrom, zaženite ukaz

Uname -r

Prikazala bo uporabljeno različico jedra.

Če ste naredili pravilno, lahko izbrišete izvorne arhive in celoten imenik linux-2.6.x.y v domači mapi. S tem boste sprostili približno 5 GB na trdem disku (velikost sproščenega prostora je odvisna od možnosti gradnje).

S tem je postopek sestavljanja in namestitve zaključen, čestitamo!

Že dolgo sem si želel napisati članek o tem, kako zgraditi jedro Linuxa. In zdaj je prišel ta trenutek.

Pravzaprav, zakaj bi gradili jedro, če distribucija ponuja popolnoma uporabno jedro?

Na primer, če želite uporabiti najnovejše gonilnike in rešitve, ki so na voljo v novem jedru, ko je iz distribucije na voljo samo stara veja. Tudi, na primer, da ga prilagodite svoji strojni opremi in malo pospešite delo. 3.11 sem naredil zase, ker vsebuje komplet popravkov, ki izboljšajo delo z grafičnimi karticami ATI, in sem lastnik ene od njih.

O sestavljanju jedra je bilo napisanih veliko člankov, zato se ne bom spuščal v podrobnosti, ampak bom napisal samo, kako sam sestavim jedro.

Najprej morate dobiti arhiv z izvornimi kodami želene različice jedra Linuxa.

Na spletnem mestu https://www.kernel.org/ lahko prenesete želeno različico. Postopek gradnje in namestitve bom opisal na primeru različice 3.11.0.

Priporočljivo je, da jedro zgradite v imeniku, ki je posebej ustvarjen za ta namen, pod neprivilegiranim uporabnikom. Sestavljam v mapo ~src/linux/linux-različica

Pred prevajanjem se morate prepričati, da so nameščene vse odvisnosti, potrebne za gradnjo, in da je v imeniku za prevajanje približno 3 GB prostega prostora.

Tukaj je seznam paketov za uspešno prevajanje (za Debian/Ubuntu):

gcc, narediti- Potrebno orodje za montažo in povezovanje. Po možnosti ena od najnovejših razpoložljivih različic gcc.

libncurses5-dev- potrebno za delovanje menuconfig

ccache- omogoča hitrejše ponovno sestavljanje

Če želite uporabljati grafični konfigurator jedra, morate namestiti tudi pakete za razvoj QT, npr. libqt4-dev, g++, pkg-config.

Lzop, lz4c- če vas zanimajo alternativni mehanizmi stiskanja jedra in initramfs.

Predpostavlja se, da je trenutni imenik imenik nepakiranega jedra.

Ko je okolje za gradnjo pripravljeno, je treba ustvariti konfiguracijo jedra. Trenutno konfiguracijo si lahko ogledate takole:

Cat /boot/config-`uname -r`

Zcat /proc/config.gz

Načeloma lahko uporabite trenutno konfiguracijo tako, da jo uredite v enem od konfiguracijskih programov. Kopirajte ga v imenik, kjer je razpakiran arhiv z jedrom, in ga preimenujte v .config

cp /boot/config-`uname -r` .config

Všeč mi je xconfig, zdi se mi najbolj priročen.

Naredite xconfig

Predhodno kopirano se naloži samodejno .config, ki nam služi kot osnova za konfiguracijo. Nasvetov za nastavitev jedra je veliko, priporočam le izbiro različice procesorja, onemogočanje gonilnikov strojne opreme, ki jih ni, lahko izberete tudi dodatne module, kot je zram in algoritem stiskanja, jaz sem izbral lz4 kot najhitrejšega.

Ko shranite konfiguracijo, lahko začnete s prevajanjem.

Če ste preleni za ročno konfiguriranje jedra, je možno samodejno konfiguriranje z uporabo informacij o naloženih modulih: make localmodconfig

Zdaj je drugi glavni korak prevajanje jedra in modulov. Izvedeno v enem ukazu:

Naredi -j4 CC="ccache gcc" module bzImage

Kje -j4 ustreza številu procesorskih jeder v vaši konfiguraciji.

Prevajanje ne bo trajalo dolgo, če je strojna oprema dovolj zmogljiva in se ne uporablja konfiguracija distribucijskega jedra. Na mojem prenosnem računalniku s procesorjem AMD Phenom P820 in šestimi gigabajti RAM-a prevajanje traja približno pol ure.

Zadnji korak je namestitev jedra in modulov.

Sudo sed -i.bak "s/MODULES=most/MODULES=dep/" /etc/initramfs-tools/initramfs.conf

To je potrebno za zmanjšanje velikosti datoteke initrd z vključitvijo samo modulov, potrebnih za nalaganje.

Namestitev lahko izvedete tudi z enim ukazom:

sudo make modules_install namestite

Ali pa vse namestite ročno. Najprej moduli

sudo make modules_install

Nato jedro

Različica=`awk "NR<=3 {printf "%s.",$NF}" < Makefile | sed "s/\.$//"`

tako dobimo različico jedra iz datoteke Makefile

sudo cp arch/`uname -m`/boot/bzImage /boot/vmlinuz-$version sudo cp .config /boot/config-$version sudo cp System.map /boot/System.map-$version sudo update-initramfs - c -k $različica sudo update-grub

Nazadnje prilagam skript za avtomatizacijo postopka.

Med konfiguracijo konfiguracije lahko postavi nekaj vprašanj, če želite privzeto odgovoriti, morate samo pritisniti Enter.

Srečno kompilacijo.

Začetniki, ki se šele začenjajo seznanjati z Linuxom, si najprej zastavijo razumno vprašanje: kako in kje prenesti Linux? Zdi se, da je to zapleteno, vendar se vprašanje vseeno poraja in mi ga pogosto postavljajo.

Odločite se za distribucijo Linuxa

Za začetek morate najverjetneje prenesti distribucijo Linuxa. Ker splošno besedo Linux lahko razumemo kot jedro Linuxa, pa tudi vsako distribucijo Linuxa. V nadaljevanju članka si bom dovolil, da včasih uporabim obe besedi kot enakovredni. Vprašanje izbire distribucije presega obseg te opombe. Distribucije Linuxa najdete v imeniku distribucij Linuxa.

Recimo, da ste izbrali distribucijo zase in jo želite prenesti. Vsako distribucijo Linuxa je običajno mogoče brezplačno prenesti v različnih formatih. Ponavadi so to datoteke ISO. Datoteka ISO je slika CD-ja ali DVD-ja. Najpogosteje se CD ali DVD različice razlikujejo le po tem, da imajo DVD različice več različne programske opreme, ki jo lahko namestite neposredno z diska, bodisi med postopkom namestitve Linuxa ali kadarkoli po namestitvi.

Kateri Linux prenesti (i386, x86_64, amd64 ...)

Linux je mogoče prenesti tudi za različne platforme. Običajno razvijalci distribucij ponujajo 32-bitne in 64-bitne različice Linuxa. Katerega boste izbrali, je odvisno predvsem od bitne globine vašega procesorja. Praviloma so vsi sodobni procesorji 64-bitni.

32-bitne različice Linuxa se običajno imenujejo i386, 64-bitne različice pa x86_64 (za procesorje Intel) in amd64 (za procesorje Amd).

Morda boste naleteli tudi na imena, kot so arm, mips, ppc in druga. To so različice Linuxa, izdelane posebej za procesorje Arm, Mips, PowerPC.

Domači računalniki in prenosniki običajno uporabljajo procesorje Intel ali Amd, zato vas bodo najverjetneje zanimali i386, x86_64, amd64.

Kje prenesti distribucijo Linuxa

Torej ste se odločili za distribucijo Linuxa. Preprosto morate iti na spletno mesto razvijalca distribucijskega kompleta in tam poiskati razdelek za prenos, imenujemo ga lahko nekaj podobnega kot Prenosi, Pridobite, Pridobite ISO, Prenesite, Naložite.

Eden najhitrejših načinov za prenos Linuxa je uporaba torrent datotek. Deluje na naslednji način. Prenesete torrent datoteko zase in uporabite torrent odjemalec, da začnete prenašati sam Linux. Torrent odjemalce za Linux najdete v imeniku programske opreme pod "Torrent Clients".

Ista različica distribucije Linuxa lahko gostuje na različnih strežnikih (zrcalih). Bližje kot vam je strežnik geografsko in večja kot je njegova pasovna širina, hitreje boste prenesli Linux. Priljubljeno rusko ogledalo, kamor lahko prenesete Linux, je ogledalo iz Yandexa: https://mirror.yandex.ru ali FTP različica ftp://mirror.yandex.ru

Tukaj je nekaj krajev, kjer lahko brezplačno prenesete priljubljene distribucije Linuxa:

DistribucijaKje lahko prenesem
ubuntu
  • Prenesite Ubuntu Desktop (glavno različico Ubuntuja za domačo uporabo)
Debian
Arch Linux
Gentoo
OpenSUSE
Fedora
  • ISO podoba Fedore (različica delovne postaje za osebno uporabo)
  • FTP ogledalo na Yandexu (za osebno uporabo izberite različico Workstation)
Slackware
In drugiImenik distribucij Linuxa (na strani vsake distribucije je povezava do uradne strani).

Kje prenesti jedro Linuxa

Vsako različico izvorne kode za jedro Linuxa lahko vedno prenesete s kernel.org.

Kako naročiti disk Linux

Če vam nobena od možnosti ne ustreza, potem lahko v vašem mestu najdete navdušence, ki se bodo strinjali, da vam dajo disk Linux. Poleg tega je zdaj veliko različnih skupnosti Linuxa.

Dober dan, bralci in gostje. V nadaljevanju zadnje objave o tem, danes vam želim povedati, kako zgraditi in konfigurirati lastno jedro.

To vemo že iz prejšnje objave Jedro Linuxa ima minimalne funkcije in strojno podporo, vendar lahko po potrebi razširimo zmogljivosti jedra z moduli jedra. Kaj bi lahko bilo potrebno gradnjo ali obnovo lastnega jedra? Na primer, da omogočite / onemogočite nove funkcije ali stara posodobitev jedra na novejšega s podporo za nove funkcije ali samo za poskuse, kot v našem primeru.

Pridobivanje izvornih kod jedra in priprava na konfiguracijo

Lahko na več načinov pridobiti vire:

    1. Pridobite izvirne arhive kode iz arhiva Linux Kernel Archives kot arhive gzip ali bzip2 z ukazom:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.1.tar.bz2 cp linux-2.6.36.1.tar.bz2 /usr/src/
  1. Pridobite vire iz distribucijskih skladišč (na primer: , CentOS i386) kot binarni paket deb ali rpm (src.rpm) s popravki proizvajalca distribucije. Na primer: kernel-server:/tmp/123# apt-cache search source | grep linux ketchup - pripomoček za posodobitev izvornih kod jedra linux linux-patch-grsecurity2 - popravek jedra grsecurity - nova večja različica navzgor linux-wlan-ng-source - gonilnik linux-wlan-ng linuxdoc-tools - pretvori izvor SGML LinuxDoc v druge formate linux-patch-lustre - popravek jedra Linuxa za datotečni sistem Lustre libcorelinux-dev - temeljni razredi, načrtovalni vzorci, IPC in niti libcorelinux-doc - temeljni razredi, načrtovalni vzorci, IPC in niti libcorelinux-examples - temeljni razredi, načrtovalni vzorci, IPC in niti libcorelinuxc2a - osnovni razredi, vzorci oblikovanja, IPC in niti linux-patch-openswan - podpora za jedro IPSEC Linux za Openswan selinux-policy-src - vir referenčne politike SELinux za prilagajanje user-mode-linux-doc - uporabniški način Linux (Dokumentacija) linux-patch-xenomai - popravki jedra Linuxa za Xenomai linux-patch-debian-2.6.26 - popravki Debian na različico 2.6.26 jedra Linux linux-source-2.6.26 - Vir jedra Linuxa za različico 2.6 .26w ith Debian popravki linux-tree-2.6.26 - Izvorno drevo jedra Linuxa za izdelavo slik jedra Debian Print-server:~# apt-get install linux-source-2.6.26 Branje seznamov paketov ... Končano Gradnja drevesa odvisnosti Branje informacij o stanje... Končano Nameščeni bodo naslednji dodatni paketi: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev make Predlagani paketi: binutils-doc bzip2-doc cpp-doc gcc-4.3 -locales gcc-multilib manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc gcc-4.3-multilib libmudflap0-4.3-dev gcc-4.3-doc libgcc1-dbg libgomp1-dbg libmudflap0-dbg glibc-doc libncurses-dev ncurses -dev kernel-package libqt3-mt-dev make-doc NOVI paketi za namestitev: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev linux-source-2.6.26 make updated 0 , nameščenih je 13 novih paketov, 0 paketov je označenih za odstranitev in 5 paketov ni posodobljenih. Prenesti morate 50,2 MB/63,2 MB arhive. Po tej operaciji se bo količina zasedenega prostora na disku povečala za 89,4 MB. Ali želite nadaljevati [Y/N]? y Pridobljeno:1 http://ftp.debian.org lenny/main linux-libc-dev 2.6.26-26 Pridobljeno:2 http://ftp.debian.org lenny/main linux-source-2. 6.26 2.6.26-26 Prejel 50,2 MB v 1 min 49 s (460 kB/s) Izbira predhodno neizbranega paketa binutils. (Branje baze podatkov ... trenutno nameščenih 16621 datotek in imenikov.) Razpakiranje paketa binutils (iz datoteke .../binutils_2.18.1~cvs20080103-7_i386.deb) ... Izbiranje predhodno neizbranega paketa bzip2. ..... Paket make je razpakiran (iz datoteke.../archives/make_3.81-5_i386.deb)... Sprožilci Man-db so obdelani ... Paket binutils (2.18.1~cvs20080103-7 ) je konfiguriran. .. ..... Nastavitev linux-source-2.6.26 (2.6.26-26) ... Nastavitev make (3.81-5) ... kernel-server:~# ls /usr /src/ linux -source-2.6.26.tar.bz2

Rad bi poudaril, da ime izvornega arhiva ali paket, izgleda nekako takole: linux-source-2.6.26 oz kernel-source-2.6.18. Iz izpisa drugega primera je razvidno, da nam apt pri namestitvi izvornih kod iz repozitorija ponudi namestitev drugih povezanih paketov, brez katerih jedra ni mogoče zgraditi.

torej. Po pridobivanje virov enega od zgornjih načinov (kopiranje arhiva (v prvem primeru) in namestitev paketa (v drugem primeru)), dobimo v imeniku /usr/src/- arhiv z istim imenom linux-source-2.6.26.tar.bz2. Nato moramo razpakirati arhiv melon z ukazom: tar -xjf linux .tar.bz2. Kot rezultat dobimo drevo izvornih imenikov jedra, ki se nahaja v imeniku /usr/src/linux-2.6.36.1/. Priporočamo tudi, da ustvarite simbolično povezavo /usr/src/linux do zgornjega imenika:

Kernel-server:~# cd /usr/src/ kernel-server:/usr/src# ln -s linux-2.6.36.1 linux kernel-server:/usr/src# ls -l lin* lrwxrwxrwx 1 root src 14. dec. 3 16:31 linux -> linux-2.6.36.1 -rw-r--r-- 1 root src 70236745 3. dec 15:57 linux-2.6.36.1.tar.bz2

Preden poskušate zgraditi in konfigurirati, morate pregledati datoteko Spremembe ki se nahaja v imeniku Dokumentacija. Med drugim vsebuje seznam paketov, potrebnih za gradnjo jedra, s številkami različic. Prepričajte se, da so ti paketi nameščeni (če ste izvorne kode namestili z upraviteljem paketov, so najverjetneje potrebni paketi že nameščeni).

Nepakirano drevo podimenikov vsebuje datoteko Makefile. makefile vsebuje različne cilje gradnje za konfiguriranje možnosti jedra, gradnjo jedra in njegovih modulov, namestitev modulov in gradnjo paketov RPM ali deb. Najnovejše različice izvorne kode jedra vam omogočajo, da uporabite pomoč za izdelavo, da dobite kratko pomoč za vsak cilj. Pri starejših sistemih si je bilo treba ogledati dokumentacijo ali pogledati makefile. Spodaj je del rezultatov pomoči za izdelavo:

Kernel-server:/usr/src/linux-2.6.36.1# make help Cilji čiščenja: čisto - Odstranite večino ustvarjenih datotek, vendar ohranite konfiguracijo in zadostno podporo gradnje za izdelavo zunanjih modulov mrproper - Odstranite vse ustvarjene datoteke + konfiguracijo + različne varnostne kopije distclean - mrproper + odstranite datoteke varnostne kopije in popravkov urejevalnika Cilji konfiguracije: config - Posodobite trenutno konfiguracijo z uporabo vrstično usmerjenega programa nconfig - Posodobite trenutno konfiguracijo z uporabo programa, ki temelji na meniju ncurses menuconfig - Posodobite trenutno konfiguracijo z uporabo programa, ki temelji na meniju xconfig - Posodobite trenutno konfiguracijo z uporabo front-end gconfig, ki temelji na QT - Posodobite trenutno konfiguracijo z uporabo front-end oldconfig, ki temelji na GTK - Posodobite trenutno konfiguracijo z uporabo priloženega .configa kot osnove .......

Poleg tega, če je iz nekega razloga treba uporabiti popravek za jedro, ga je treba vnaprej prenesti in vnesti v imenik /usr/src. Če vam ni treba popraviti jedra, lahko varno nadaljujete s konfiguracijo. Jedro je popravljeno na naslednji način:

Strežnik jedra: /usr/src/linux-2.6.36# gzip -cd ../patch-2.6.xx.gz | popravek -p1 #ali Print-server:/usr/src/linux-2.6.36# bzip2 -dc ../patch-2.6.xx.bz2 | obliž-p1

Konfiguracija

Trenutna konfiguracija jedra je shranjena v datoteki .config. Ta datoteka je oblikovana z uporabo enega od ciljev konfiguracije (cilj je, preprosto povedano, ukaz, izveden v obliki narediti tarčo):

Cilj konfiguracije uporablja vmesnik ukazne vrstice za odgovore na številna vprašanja o ustvarjanju ali posodabljanju datoteke .config. Po mojem mnenju je v primerjavi z namenom uporabe menija - zelo neprijeten kos.

cloneconfig

Kopirajte trenutne nastavitve jedra v datoteko .config. Ta cilj je bil opuščen in ga je v novejših jedrih nadomestil . (priročno za dodajanje novih funkcij v trenutno jedro)

Cilj menuconfig uporablja menijski program, zgrajen na vrhu ncurses, za ustvarjanje ali posodobitev datoteke .config. Odgovoriti morate le na vprašanja za elemente, ki jih želite spremeniti. Ta pristop je nadomestil staro konfiguracijo. Zažene se v oknu terminala na daljavo ali lokalno.

Tarča nconfig uporablja menijski program, zgrajen na vrhu ncurses, za ustvarjanje ali posodobitev datoteke .config. Ta različica temelji na vendar ima bolj moderen videz. Dodano po izdaji jedra Linuxa 2.6.35. Odgovoriti morate le na vprašanja za elemente, ki jih želite spremeniti. Zažene se v oknu terminala na daljavo ali lokalno.

Cilj xconfig uporablja sistem grafičnega menija, ki temelji na vmesniku QT, ki ga uporablja namizje KDE.

Cilj gconfig uporablja sistem grafičnega menija, ki temelji na vmesnem delu GTK, ki ga uporablja namizje GNOME.

oldconfig

Cilj oldconfig vam omogoča, da ustvarite konfiguracijo z uporabo obstoječe datoteke .config, ki ste jo ustvarili prej ali iz drugega sistema. Konfiguracijsko datoteko za vaš sistem lahko na primer kopirate iz /lib/modules/$(uname -r)/build/.config v /usr/src/linux. Ko to storite, lahko po potrebi uporabite enega od ciljev konfiguracijskega menija za spremembe. Poleg tega bo pri izvajanju tega ukaza, če je bilo v novo jedro dodanih veliko novih funkcij, postavljenih veliko vprašanj o nastavitvi novih parametrov. (priročno za dodajanje novih funkcij v trenutno jedro)

Spet lahko seznam vseh ciljev ukazov vidite s tipkanjem pomagati. Torej, začnimo s konfiguracijo. Najbolj priročno za konzolo, IMHO - .

Po zagonu ukaza sem dobil grozno sporočilo:

Kernel-server:/usr/src/linux-2.6.36.1# make menuconfig *** Ni mogoče najti knjižnic ncurses ali *** zahtevanih datotek glave. *** "make menuconfig" zahteva knjižnice ncurses. *** *** Namestite ncurses (ncurses-devel) in poskusite znova. *** znamka: *** Napaka 1 znamka: *** Napaka 2

Nekaj ​​manjka, je pomislil Stirlitz (C) ... Verjetno paket z imenom ncurses in ker so to knjižnice, se najverjetneje paket začne z lib. Prišel sem v skladišče:

Kernel-server:/usr/src/linux-2.6.36.1# apt-cache search ncurses | grep ^lib libcunit1-ncurses-dev - Knjižnica za testiranje enot za C (ncurses) -- razvojne datoteke libcunit1-ncurses - Knjižnica za testiranje enot za C (ncurses) libncurses-gst - Vezave Ncurses za GNU Smalltalk libkaya-ncurses-dev - Vezava Ncurses za kaya libkaya-ncursesw-dev - vezava Ncurses za kaya libcurses-perl - vmesnik Curses za Perl libcurses-widgets-perl - vmesnik pripomočka Curses za Perl libruby-extras - sveženj dodatnih knjižnic za Ruby libruby1.8-extras - sveženj dodatnih knjižnic za Ruby 1.8. - ruby ​​Razširitev za ncurses C knjižnico libncurses-ruby - ruby ​​​​Razširitev za ncurses C knjižnico lib64ncurses5-dev - razvijalske knjižnice za ncurses (64-bit) lib64ncurses5 - deljene knjižnice za terminalsko rokovanje (64-bit) libncurses5-dbg - razhroščevanje ging/profiliranje knjižnic za ncurses libncurses5-dev - razvijalske knjižnice in dokumenti za ncurses libncursesw5-dbg - odpravljanje napak/profiliranje knjižnic za ncurses libncursesw5-dev - razvijalske knjižnice za ncursesw libcurses-ocaml-dev - OCaml vezave za knjižnico ncurses libcurses-ocaml - Povezave OCaml za knjižnico ncurses libggi-target-terminfo - splošni grafični vmesnik TermInfo cilj prikaza libncurses5 - knjižnice v skupni rabi za nadzor terminala libncursesw5 - knjižnice za nadzor terminala (podpora za dvobajtne znake)

Ta vrstica: libncurses5-dev - razvijalske knjižnice in dokumenti za ncurses se mi je zdelo potrebno. Namestimo:

Kernel-server:/usr/src/linux-2.6.36.1# apt-get install libncurses5-dev Branje seznamov paketov ... Končano Gradnja drevesa odvisnosti Branje informacij o stanju ... Končano NOVI paketi za namestitev: libncurses5-dev 0 posodobljeno , nameščen je 1 nov paket, 0 paketov je označenih za odstranitev in 5 paketov ni posodobljenih. Prenesti morate 1546 kB arhivov. Po tej operaciji se bo količina zasedenega prostora na disku povečala za 6599 kB. Prejeto:1 http://ftp.debian.org lenny/main libncurses5-dev 5.7+20081213-1 Prejeto 1546kB v 4s (344kB/s) Izbor predhodno neizbranega paketa libncurses5-dev. (Branje baze podatkov ... Trenutno nameščenih 18098 datotek in imenikov.) Razpakiranje paketa libncurses5-dev (iz datoteke .../libncurses5-dev_5.7+20081213-1_i386.deb) ... Obdelava sprožilcev man-db ... Paket libncurses5-dev (5.7+20081213-1) se konfigurira ...

Končano, poskusimo :

Hura! Vidimo želeni konfiguracijski meni jedra. Sledi prikaz različnih možnosti, ki vam omogočajo vključitev komponent v jedro ali ustvarjanje modulov. Ko je možnost označena, lahko s preslednico krmarite po možnostih za to komponento. Za aktiviranje možnosti pritisnite l onemogočiti -- nČe želite ustvariti modul, kliknite m. Izhod iz menija: Esc Esc.

  • [*] Komponenta bo vključena v jedro.
  • Komponenta ne bo vključena v jedro.
  • [M] Komponenta bo oblikovana kot modul.
  • < >Komponenta ne bo vključena v jedro, lahko pa je pakirana kot modul.

Spodaj bom podal opis glavnih razdelkov konfiguracije spremembe (sčasoma se bo dopolnjeval):

Odsek parameter Opis
Splošna nastavitev Ta razdelek vam omogoča, da svojemu jedru dodate identifikacijski niz, pa tudi številne atribute, ki niso povezani z nobenim razdelkom, vendar jih je vseeno treba opisati.
Omogoči podporo za nalaganje modulov Ta razdelek vsebuje možnosti za določitev, ali bo vaše jedro podpiralo module in ali se bodo samodejno nalagali in razlagali. Možnost "Omogoči podporo za nalaganje modulov" mora biti omogočena.
Vrsta in značilnosti procesorja Ta razdelek vsebuje konfiguracijske možnosti, specifične za to vrsto procesorja. Tukaj lahko izberete procesor in družino procesorjev, ki jih bo podpiralo vaše jedro. Podporo za jedro lahko omogočite ali onemogočite za različne funkcije, ki jih ponuja ta procesor. Prepričajte se, da ste omogočili podporo za simetrično večprocesno obdelavo, če ima vaš sistem več kot en procesor ali če procesor podpira hipernitnost. Poleg tega mora biti za boljše delovanje grafičnega podsistema v sistemih z video karticami AGP ali PCI omogočena podpora za MTRR.
Možnosti upravljanja porabe energije Ta razdelek vsebuje možnosti, povezane z upravljanjem porabe energije. Še posebej so pomembni za prenosnike. Poleg spremljanja stanja napajanja lahko tam najdete orodja za nadzor in spremljanje parametrov, kot sta temperatura ali stanje hladilnega ventilatorja.
Možnosti vodila (PCI itd.) Ta razdelek vsebuje možnosti za računalniška vodila, ki jih podpira vaš sistem, kot so PCI, PCI Express in PC Card. Tukaj lahko omogočite podporo za datotečni sistem /proc/pci, ki se lahko uporablja v povezavi s pogosto uporabljenim ukazom lspci.
Formati izvedljivih datotek / Emulacije Ta razdelek vsebuje možnosti glede podpore za različne oblike binarnih datotek. Podpora za "ELF binary" mora biti omogočena. Poleg tega lahko omogočite podporo za binarne datoteke DOS, da jih izvajate pod DOSEMU, kot tudi druge binarne datoteke, ki jih podpirajo ustrezni ovoji, kot so Java™, Python, Emacs-Lisp itd. Končno, za 64-bitne sisteme, ki podpirajo 32-bitne bitne emulacije, boste morda želeli omogočiti podporo za 32-bitne aplikacije.
mreženje Razdelek o omrežnih nastavitvah je precej velik. Tukaj lahko omogočite osnovno podporo za vtičnice, omrežno povezovanje TCP/IP, filtriranje omrežnih paketov, usmerjanje in premoščanje ter podporo za različne protokole, kot so IPV6, IPX, Appletalk in X.25. Poleg tega lahko omogočite podporo za brezžični, infrardeči in amaterski radio.
gonilniki naprav Tudi ta del je zelo velik. Tukaj lahko omogočite podporo za veliko število naprav strojne opreme, vključno s pogoni IDE/ATAPI ali SCSI ali bliskovnimi pogoni. Omogočite DMA za vaše naprave IDE; drugače bodo delovali v počasnejšem načinu PIO. Če želite imeti podporo za več naprav, kot sta RAID ali LVM, morajo biti omogočene tudi ustrezne možnosti. Tukaj lahko omogočite tudi podporo za vzporedna vrata za delo s tiskalnikom prek tega vmesnika. Tukaj konfigurirate široko paleto podprtih omrežnih naprav za različne omrežne protokole, ki smo jih konfigurirali prej. Poleg tega boste tukaj našli možnosti za podporo naprav za zajem zvoka in videa, naprav USB in IEEE 1384 (Firewire) ter različnih vrst naprav za nadzor strojne opreme. V razdelku Znakovne naprave boste morda želeli omogočiti podporo za tiskanje z vzporednimi vrati in podporo za neposredno upodabljanje.
Gonilniki vdelane programske opreme Ta razdelek vsebuje več možnosti, povezanih z namestitvijo in posodabljanjem BIOS-a, kot je uporaba funkcij Dell System Management v nekaterih sistemih Dell.
Datotečni sistemi Ta razdelek je namenjen konfiguriranju datotečnih sistemov, ki jih želite podpirati v svojem jedru, ne glede na to, ali so prevedeni kot moduli ali ne. Tukaj lahko najdete tudi datotečne sisteme za izmenljive diskovne naprave (diskete, CD-je in DVD-je) ter omrežne datotečne sisteme, kot so NFS, SMB ali CIFS. Podpora za različne vrste odsekov in nacionalnih kodiranj Podpora za materni jezik se nahaja tudi v tem razdelku.
Vdor v jedro Ta razdelek vam omogoča, da omogočite način za odpravljanje napak jedra in izberete, katere dodatne funkcije bodo omogočene.
varnostne možnosti Ta razdelek je namenjen konfiguriranju varnostnih možnosti ter omogočanju in konfiguriranju SELinux (Security Enhanced Linux).
Kriptografske možnosti V tem razdelku lahko konfigurirate podporo za različne algoritme šifriranja, kot so MD4, DES in SHA256.
knjižnične rutine Tukaj lahko določite število algoritmov za izračun kontrolne vsote (CRC), ki bodo vključeni v jedro ali prevedeni kot moduli.

Podal sem zelo kratek opis razdelkov konfiguracije jedra. Natančneje glede izbire nastavitev bom verjetno naredil ločeno objavo, ker je trenutna zrasla v ogromno velikost. Najboljši opis nastavitev make menuconfig sem našel tukaj Gentoo Handbook. Od sebe bom rekel, da bi bilo logično izvesti make oldconfig (s tem kopirati current.config nameščenega OS), nato pa zagnati make menuconfig in onemogočiti vse nepotrebne funkcije (recimo, da sem onemogočil podporo za WiFi, datoteko jfs sistemi, ki jih ne potrebujem itd.). In na splošno sem zagovornik mnenja, da se je treba v zelo skrajnih primerih ukvarjati z optimizacijo jedra, ko je zmogljivost OS odvisna od zmogljivosti strojne opreme. V skladu s tem lahko z zmanjšanjem velikosti jedra (onemogočanje nepotrebnih modulov, vključno z njimi v jedru + onemogočanje nepotrebnih funkcij) povečate zmogljivost za 1-2%. In na sodobnih strežnikih mislim, da to (rekonfiguracija jedra) ni posebej pomembno.

Gradnja jedra

Zdaj, ko smo jedro konfigurirali, smo ga pripravljeni sestaviti. Če ne veste, kakšno je stanje gradbenega drevesa, zaženite make clean, preden začnete konfigurirati novo jedro. Za temeljitejše čiščenje zaženite make mrproper (s tem boste odstranili datoteko .config kot tudi nekatere druge datoteke, uporabljene v procesu gradnje, make mrproper).

Kot del preskusne konfiguracije je priporočljivo, da daste novemu jedru posebno ime, ki vam bo omogočilo preprosto prepoznavanje. Če želite to narediti, morate nastaviti vrednost lokalne različice in aktivirati možnost Samodejno pripni informacije o različici v niz različice v ustrezni vrstici razdelka Splošne nastavitve.

Načeloma za izdelavo jedra niso potrebna nobena korenska dovoljenja, čeprav namestitev novega jedra ta pooblastila so potrebna.

Če želite začeti graditi jedro 2.6, morate zagnati make.

Če želite začeti graditi jedro 2.4, morate zagnati 3 ukaze:
narediti dep
naredi bzImage
naredi module
Prvi ustvari potrebne datoteke odvisnosti. Drugi zbira jedro. In zadnji zbira module.

Namestitev novega jedra

Ko je jedro zgrajeno, ga je treba namestiti. Pred namestitvijo morate zagnati make modules_install, da namestite module jedra v nov podimenik /lib/modules. Po namestitvi modulov morate zagnati make install, da namestite novo jedro in začetni disk RAM (začetni disk RAM) v imeniku /boot ter posodobite konfiguracijo zagonskega nalagalnika.

Rad bi vas opozoril na dejstvo, da je potreben začetni RAM disk (začetni RAM disk ali initrd) samodejno ustvarjen med gradnjo. Če ga morate ustvariti ročno, lahko to storite z ukazom mkinitrd.

Po izvedbi make install je treba konfiguracijsko datoteko zagonskega nalagalnika posodobiti. Toda iz neznanega razloga se mi je posodobil po ukazu update-grub.

Na tem bom končal. To je zelo velik članek. V bližnji prihodnosti ga bom poskusil stisniti.