Instalacija linux kernela. Konfiguriranje i kompajliranje Linux kernela. Raspakiranje izvora kernela

Dobar dan, čitatelji i gosti. U nastavku prošlog posta o, danas vam želim reći, kako izgraditi i konfigurirati vlastiti kernel.

Iz prethodnog posta to već znamo Linux kernel ima minimalne mogućnosti i hardversku podršku, ali ako je potrebno, možemo proširiti mogućnosti kernela kernel moduli. Što bi moglo biti potrebno izgradnja ili ponovna izgradnja vlastitog kernela? Na primjer, za omogućavanje/onemogućavanje novih značajki ili staro ažuriranje kernela na noviji s podrškom za nove značajke ili samo za eksperimente, kao u našem primjeru.

Dobivanje izvora kernela i priprema za konfiguraciju

Može se izvesti na nekoliko načina dobiti izvore:

    1. Nabavite izvorne arhive koda iz Linux Kernel Archives, kao gzip ili bzip2 arhive, pomoću naredbe:
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. Nabavite izvore iz distribucijskih repozitorija (na primjer: , CentOS i386) kao binarni deb ili rpm paket (src.rpm) sa zakrpama od proizvođača distribucije. Na primjer: kernel-server:/tmp/123# apt-cache search source | grep linux ketchup - uslužni program za ažuriranje za izvore linux-kernela linux-patch-grsecurity2 - grsecurity kernel patch - nova glavna uzvodna verzija linux-wlan-ng-source - linux-wlan-ng drajver linuxdoc-tools - pretvaranje LinuxDoc SGML izvora u druge formate linux-patch-lustre - zakrpa jezgre Linuxa za datotečni sustav Luster libcorelinux-dev - temeljne klase, obrasci dizajna, IPC i niti libcorelinux-doc - temeljne klase, obrasci dizajna, IPC i niti libcorelinux-examples - temeljne klase, obrasci dizajna, IPC i Threads libcorelinuxc2a - Temeljne klase, obrasci dizajna, IPC i niti linux-patch-openswan - IPSEC Linux kernel podrška za Openswan selinux-policy-src - Izvor SELinux referentne politike za prilagodbu user-mode-linux-doc - User-mode Linux (Dokumentacija) linux-patch-xenomai - Linux kernel zakrpe za Xenomai linux-patch-debian-2.6.26 - Debian zakrpe za verziju 2.6.26 Linux kernela linux-source-2.6.26 - Linux kernel izvor za verziju 2.6 .26 s Debian zakrpama linux-tree-2.6.26 - Izvorno stablo Linux kernela za izgradnju slika Debian kernela Print-server:~# apt-get install linux-source-2.6.26 Čitanje popisa paketa... Gotovo Izgradnja stabla ovisnosti Čitanje informacije o statusu... Gotovo Sljedeći dodatni paketi bit će instalirani: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev make Predloženi 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 instaliranje: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev linux-source-2.6.26 make update 0, instalirano 13 novih paketa, 0 paketa označenih za uklanjanje i 5 paketa nije ažurirano. Morate preuzeti arhive od 50,2 MB/63,2 MB. Nakon ove operacije, količina zauzetog prostora na disku će se povećati za 89,4 MB. Želite li nastaviti [Y/N]? y Dohvaćeno:1 http://ftp.debian.org lenny/main linux-libc-dev 2.6.26-26 Dohvaćeno:2 http://ftp.debian.org lenny/main linux-source-2. 6.26 2.6.26-26 Dobio 50.2MB u 1min49s (460kB/s) Odabir prethodno neodabranog binutils paketa. (Čitanje baze podataka... trenutno instaliranih 16621 datoteka i direktorija.) Raspakiranje binutils paketa (iz datoteke.../binutils_2.18.1~cvs20080103-7_i386.deb)... Odabir prethodno neodabranog bzip2 paketa. ..... Make paket je raspakiran (iz datoteke.../archives/make_3.81-5_i386.deb)... Man-db okidači se obrađuju ... Binutils paket (2.18.1~cvs20080103-7 ) je konfiguriran. .. ..... Postavljanje linux-source-2.6.26 (2.6.26-26) ... Postavljanje make (3.81-5) ... kernel-server:~# ls /usr /src/ linux -source-2.6.26.tar.bz2

Htio bih istaknuti da naziv izvorne arhive ili paket, izgleda otprilike ovako: linux-source-2.6.26 ili kernel-source-2.6.18. Iz listinga drugog primjera vidljivo je da nam kod instaliranja izvora iz repozitorija apt nudi instalaciju drugih povezanih paketa, bez kojih se kernel ne može izgraditi.

Tako. Nakon dobivanje izvora na jedan od gore navedenih načina (kopiranje arhive (u prvom slučaju) i instaliranje paketa (u drugom slučaju)) dolazimo u imenik /usr/src/- istoimena arhiva linux-source-2.6.26.tar.bz2. Zatim moramo raspakirati melon arhivu naredbom: tar -xjf linux .tar.bz2. Kao rezultat, dobivamo stablo izvornih direktorija jezgre smješteno u /usr/src/linux-2.6.36.1/ direktoriju. Također se preporučuje stvaranje simboličke veze /usr/src/linux na gornji direktorij:

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. pro. 3 16:31 linux -> linux-2.6.36.1 -rw-r--r-- 1 root src 70236745 3 pro 15:57 linux-2.6.36.1.tar.bz2

Prije pokušaja izgradnje i konfiguracije, morate pregledati datoteku Promjene nalazi se u direktoriju Dokumentacija. Sadrži, između ostalog, popis paketa potrebnih za izgradnju kernela, s brojevima verzija. Provjerite jesu li ti paketi instalirani (ako ste izvore instalirali pomoću upravitelja paketa, najvjerojatnije su potrebni paketi već instalirani).

Raspakirano stablo poddirektorija sadrži datoteku Makefile. makefile sadrži različite ciljeve izgradnje za konfiguriranje opcija kernela, izgradnju kernela i njegovih modula, instaliranje modula i izgradnju RPM ili deb paketa. Najnovije verzije izvora kernela omogućuju vam korištenje make pomoći za dobivanje kratke pomoći za svaki cilj. Na starijim sustavima bilo je potrebno konzultirati dokumentaciju ili pogledati makefile. Ispod je dio rezultata make pomoći:

Kernel-server:/usr/src/linux-2.6.36.1# make help Ciljevi čišćenja: čisto - Ukloni većinu generiranih datoteka, ali zadrži konfiguraciju i dovoljnu podršku za izgradnju za izgradnju vanjskih modula mrproper - Ukloni sve generirane datoteke + konfiguraciju + razne sigurnosne kopije distclean - mrproper + uklonite datoteke sigurnosne kopije i zakrpe uređivača Ciljevi konfiguracije: config - Ažuriranje trenutne konfiguracije korištenjem linijski orijentiranog programa nconfig - Ažuriranje trenutne konfiguracije korištenjem programa temeljenog na izborniku ncurses menuconfig - Ažurirajte trenutnu konfiguraciju korištenjem programa temeljenog na izborniku xconfig - Ažurirajte trenutnu konfiguraciju upotrebom sučelja temeljenog na QT-u gconfig - Ažuriranje trenutne konfiguracije korištenjem sučelja temeljenog na GTK-u oldconfig - Ažuriranje trenutne konfiguracije korištenjem dostavljenog .configa kao baze .......

Nadalje, ako je iz nekog razloga potrebno primijeniti zakrpu na kernel, tada je treba preuzeti unaprijed i staviti u direktorij /usr/src. Ako ne trebate zakrpati kernel, možete sigurno nastaviti s konfiguracijom. Jezgra je zakrpana na sljedeći način:

Kernel-poslužitelj: /usr/src/linux-2.6.36# gzip -cd ../patch-2.6.xx.gz | patch -p1 #ili Print-server:/usr/src/linux-2.6.36# bzip2 -dc ../patch-2.6.xx.bz2 | zakrpa-p1

Konfiguracija

Trenutna konfiguracija kernela pohranjena je u datoteci .config. Ova datoteka se formira pomoću jednog od ciljeva konfiguracije (cilj je, jednostavnim rječnikom, naredba izvršena u obliku napraviti cilj):

Konfiguracijski cilj koristi sučelje naredbenog retka da odgovori na mnoga pitanja o stvaranju ili ažuriranju .config datoteke. Po mom mišljenju, u usporedbi sa svrhom korištenja izbornika - vrlo nezgodan komad.

cloneconfig

Kopirajte trenutne postavke kernela u .config datoteku. Ovaj cilj je zastario i u novijim je kernelima zamijenjen . (zgodno za dodavanje novih značajki trenutnoj jezgri)

Cilj menuconfig koristi program vođen izbornicima izgrađen na ncurses za stvaranje ili ažuriranje .config datoteke. Morate odgovoriti samo na pitanja za stavke koje želite promijeniti. Ovaj pristup je zamijenio staru konfiguraciju. Pokreće se u prozoru terminala udaljeno ili lokalno.

Cilj nconfig koristi program vođen izbornicima izgrađen na ncurses za stvaranje ili ažuriranje .config datoteke. Ova verzija se temelji na ali ima moderniji izgled. Dodano nakon izdanja Linux kernela 2.6.35. Morate odgovoriti samo na pitanja za stavke koje želite promijeniti. Pokreće se u prozoru terminala udaljeno ili lokalno.

Cilj xconfig koristi grafički sustav izbornika temeljen na QT sučelju koje koristi KDE desktop.

Cilj gconfig koristi grafički sustav izbornika temeljen na sučelju GTK-a koje koristi radna površina GNOME.

oldconfig

Cilj oldconfig omogućuje vam stvaranje konfiguracije koristeći postojeću .config datoteku koju ste izradili ranije ili iz drugog sustava. Na primjer, možete kopirati konfiguracijsku datoteku za vaš sustav iz /lib/modules/$(uname -r)/build/.config u /usr/src/linux. Nakon što to učinite, možete upotrijebiti jedan od ciljeva izbornika konfiguracije za izmjene ako je potrebno. Također, prilikom izvođenja ove naredbe, ako je novoj jezgri dodano puno novih značajki, postavljat će se mnoga pitanja o postavljanju novih parametara. (zgodno za dodavanje novih značajki trenutnoj jezgri)

Opet, popis svih ciljeva naredbi može se vidjeti upisivanjem pomoći. Dakle, počnimo konfigurirati. Najprikladnije za konzolu, IMHO - .

Nakon pokretanja naredbe, dobio sam strašnu poruku:

Kernel-server:/usr/src/linux-2.6.36.1# make menuconfig *** Ne mogu pronaći ncurses biblioteke ili *** potrebne datoteke zaglavlja. *** "make menuconfig" zahtijeva ncurses biblioteke. *** *** Instalirajte ncurses (ncurses-devel) i pokušajte ponovno. *** napraviti: *** Greška 1 napraviti: *** Greška 2

Nešto nedostaje, pomisli Stirlitz (C) ... Vjerojatno paket s imenom npsuje a pošto su to biblioteke, onda najvjerojatnije paket počinje sa lib. Ušao sam u spremište:

Kernel-server:/usr/src/linux-2.6.36.1# apt-cache search ncurses | grep ^lib libcunit1-ncurses-dev - Biblioteka za testiranje jedinica za C (ncurses) -- razvojne datoteke libcunit1-ncurses - Biblioteka za testiranje jedinica za C (ncurses) libncurses-gst - Ncurses povezivanja za GNU Smalltalk libkaya-ncurses-dev - Ncurses povezivanja za kaya libkaya-ncursesw-dev - Ncurses povezivanje za kaya libcurses-perl - Curses sučelje za Perl libcurses-widgets-perl - Curses widget sučelje za Perl libruby-extras - paket dodatnih biblioteka za Ruby libruby1.8-extras - paket dodatnih biblioteka za Ruby 1.8 libtexttools-dev - Ada i C++ biblioteka za pisanje konzolnih aplikacija libtexttools2.0.5 - Ada i C++ biblioteka za pisanje konzolnih aplikacija libncurses-ruby1.8 - ruby ​​​​Proširenje za ncurses C biblioteku libncurses-ruby1.9 - ruby ​​Proširenje za ncurses C biblioteku libncurses-ruby - ruby ​​​​Proširenje za ncurses C biblioteku lib64ncurses5-dev - razvojne biblioteke za ncurses (64-bit) lib64ncurses5 - zajedničke biblioteke za rukovanje terminalom (64-bit) libncurses5-dbg - biblioteke za ispravljanje pogrešaka/profiliranje za ncurses libncurses5-dev - biblioteke i dokumenti programera za ncurses libncursesw5-dbg - biblioteke za ispravljanje pogrešaka/profiliranje za ncurses libncursesw5-dev - biblioteke programera za ncursesw libcurses-ocaml-dev - OCaml povezivanja za biblioteku ncurses libcurses- ocaml - OCaml povezivanja za biblioteku ncurses libggi-target-terminfo - Općenito grafičko sučelje TermInfo cilj prikaza libncurses5 - dijeljene biblioteke za kontrolu terminala libncursesw5 - biblioteke za kontrolu terminala (podrška za dvobajtne znakove)

Ova linija: libncurses5-dev - razvojne biblioteke i dokumenti za ncurses činilo mi se potrebnim. Instalirajmo:

Kernel-server:/usr/src/linux-2.6.36.1# apt-get install libncurses5-dev Čitanje popisa paketa... Gotovo Izgradnja stabla ovisnosti Čitanje informacija o statusu... Gotovo NOVI paketi za instaliranje: libncurses5-dev 0 ažurirano , 1 novi paket instaliran, 0 paketa označenih za uklanjanje i 5 paketa nije ažurirano. Potrebno je preuzeti 1546kB arhive. Nakon ove operacije, količina zauzetog prostora na disku će se povećati za 6599kB. Primljeno:1 http://ftp.debian.org lenny/main libncurses5-dev 5.7+20081213-1 Primljeno 1546kB u 4s (344kB/s) Odabir prethodno neodabranog paketa libncurses5-dev. (Čitanje baze podataka... Trenutno instalirano 18098 datoteka i direktorija.) Raspakiranje libncurses5-dev paketa (iz datoteke.../libncurses5-dev_5.7+20081213-1_i386.deb)... Obrada man-db okidača ... Paket libncurses5-dev (5.7+20081213-1) se konfigurira ...

Gotovo, pokušajmo :

hura! Vidimo željeni konfiguracijski izbornik jezgre. Sljedeće prikazuje različite opcije koje vam omogućuju uključivanje komponenti u kernel ili stvaranje modula. Kada je opcija označena, možete koristiti razmaknicu za navigaciju kroz opcije za tu komponentu. Za aktiviranje opcije pritisnite g onemogućiti -- n za izradu, ako je moguće, modula, kliknite m. Izlaz iz izbornika: Esc Esc.

  • [*] Komponenta će biti uključena u kernel.
  • Komponenta neće biti uključena u kernel.
  • [M] Komponenta će biti oblikovana kao modul.
  • < >Komponenta neće biti uključena u jezgru, ali se može pakirati kao modul.

U nastavku ću dati opis glavnih odjeljaka konfiguracije promjene (dopunjavat će se s vremenom):

Poglavlje parametar Opis
Opća postavka Ovaj odjeljak vam omogućuje dodavanje identifikacijskog niza u vašu jezgru, kao i niz atributa koji nisu povezani ni s jednim odjeljkom, ali ih ipak treba opisati.
Omogući podršku modula koji se mogu učitavati Ovaj odjeljak sadrži opcije za određivanje hoće li vaša jezgra podržavati module i hoće li se oni automatski učitavati i ispuštati. Trebala bi biti omogućena opcija "Omogući podršku modula za učitavanje".
Vrsta i karakteristike procesora Ovaj odjeljak sadrži opcije konfiguracije specifične za ovu vrstu procesora. Ovdje možete odabrati procesor i obitelj procesora koje će vaš kernel podržavati. Možete omogućiti ili onemogućiti podršku kernela za različite značajke koje nudi ovaj procesor. Provjerite jeste li omogućili podršku za simetričnu višestruku obradu ako vaš sustav ima više od jednog procesora ili ako procesor podržava hipernitnost. Osim toga, za bolje performanse grafičkog podsustava u sustavima s AGP ili PCI video karticama, podrška za MTRR bi trebala biti omogućena.
Mogućnosti upravljanja napajanjem Ovaj odjeljak sadrži opcije vezane uz upravljanje napajanjem. Posebno su važni za prijenosna računala. Osim praćenja statusa napajanja, tamo možete pronaći alate za kontrolu i praćenje parametara kao što su temperatura ili status ventilatora za hlađenje.
Opcije sabirnice (PCI itd.) Ovaj odjeljak sadrži opcije za računalne sabirnice koje podržava vaš sustav, kao što su PCI, PCI Express i PC Card. Ovdje možete omogućiti podršku za datotečni sustav /proc/pci, koji se može koristiti zajedno s često korištenom naredbom lspci.
Formati izvršnih datoteka / Emulacije Ovaj odjeljak sadrži opcije koje se tiču ​​podrške za različite formate binarnih datoteka. Treba omogućiti podršku za "ELF binary". Osim toga, možete omogućiti podršku za DOS binarne datoteke da ih pokrećete pod DOSEMU, kao i druge binarne datoteke koje podržavaju odgovarajući omoti, kao što su Java™, Python, Emacs-Lisp, itd. Konačno, za 64-bitne sustave koji podržavaju 32-bitne bitne emulacije, možda ćete htjeti omogućiti podršku za 32-bitne aplikacije.
umrežavanje Odjeljak koji se odnosi na mrežne postavke prilično je velik. Ovdje možete omogućiti osnovnu podršku za socket, TCP/IP umrežavanje, filtriranje mrežnih paketa, usmjeravanje i premošćivanje, kao i podršku za razne protokole kao što su IPV6, IPX, Appletalk i X.25. Osim toga, možete omogućiti podršku za bežični, infracrveni i amaterski radio.
upravljački programi uređaja Ovaj dio je također vrlo velik. Ovdje možete omogućiti podršku za velik broj hardverskih uređaja, uključujući IDE/ATAPI ili SCSI pogone ili flash pogone. Omogućite DMA za svoje IDE uređaje; inače će raditi u sporijem PIO modu. Ako želite imati podršku za više uređaja kao što su RAID ili LVM, odgovarajuće opcije također moraju biti omogućene. Ovdje također možete omogućiti podršku za paralelni port za rad s pisačem putem ovog sučelja. Ovdje konfigurirate širok raspon podržanih mrežnih uređaja za različite mrežne protokole koje smo konfigurirali ranije. Osim toga, ovdje ćete pronaći opcije za podršku uređajima za snimanje zvuka i videa, USB i IEEE 1384 (Firewire) uređajima, kao i raznim vrstama uređaja za nadzor hardvera. U odjeljku Character Devices možda ćete htjeti omogućiti ispis na paralelnom portu i podršku za izravno iscrtavanje.
Upravljački programi firmvera Ovaj odjeljak sadrži nekoliko opcija povezanih s instalacijom i ažuriranjem BIOS-a, kao što je korištenje značajki Dell System Management na nekim Dell sustavima.
Datotečni sustavi Ovaj odjeljak služi za konfiguriranje datotečnih sustava koje želite podržati u svom kernelu, kompajlirani kao moduli ili ne. Ovdje također možete pronaći datotečne sustave za prijenosne diskove (diskete, CD i DVD) kao i mrežne datotečne sustave kao što su NFS, SMB ili CIFS. Podrška za razne vrste odjeljaka i nacionalnih kodiranja Podrška za materinji jezik također se nalazi u ovom odjeljku.
Hakiranje kernela Ovaj odjeljak vam omogućuje da omogućite način otklanjanja pogrešaka jezgre i odaberete koje će dodatne značajke biti omogućene.
sigurnosne mogućnosti Ovaj odjeljak služi za konfiguriranje sigurnosnih opcija i omogućavanje i konfiguriranje SELinuxa (Linux poboljšane sigurnosti).
Kriptografske mogućnosti U ovom odjeljku možete konfigurirati podršku za razne algoritme šifriranja kao što su MD4, DES i SHA256.
knjižnične rutine Ovdje možete odrediti broj algoritama za izračun kontrolne sume (CRC) koji će biti uključeni u kernel ili kompajlirani kao moduli.

Dao sam vrlo kratak opis odjeljaka konfiguracije jezgre. Konkretno, o izboru postavki, vjerojatno ću napraviti zaseban post, jer je trenutni narastao do ogromne veličine. Najbolji opis make menuconfig postavki pronašao sam ovdje Gentoo Handbook. Od sebe ću reći da bi bilo logično izvršiti make oldconfig (time kopirati current.config instaliranog OS-a), a zatim pokrenuti make menuconfig i onemogućiti sve nepotrebne funkcije (recimo da sam onemogućio podršku za WiFi, jfs datoteku sustavi koji mi ne trebaju itd.). I općenito, pristaša sam mišljenja da je potrebno baviti se optimizacijom kernela u vrlo ekstremnim slučajevima, kada performanse OS-a počivaju na mogućnostima hardvera. U skladu s tim, smanjenjem veličine kernela (onemogućavanje nepotrebnih modula, uključujući ih u kernel + onemogućavanje nepotrebnih značajki), možete dodati 1-2% performansama. A na modernim poslužiteljima, mislim da ovo (rekonfiguracija kernela) nije osobito relevantno.

Izgradnja kernela

Sada kada smo konfigurirali kernel, spremni smo za njegovu izgradnju. Ako ne znate kakvo je stanje stabla izgradnje, pokrenite make clean prije nego počnete konfigurirati novi kernel. Za temeljitije čišćenje, pokrenite make mrproper (ovo će ukloniti .config datoteku kao i neke druge datoteke korištene u procesu izgradnje, make mrproper).

Kao dio probne konfiguracije, preporučljivo je novom kernelu dati poseban naziv koji će vam omogućiti da ga lako prepoznate. Da biste to učinili, morate postaviti vrijednost lokalne verzije i aktivirati opciju Automatski dodaj informacije o verziji u niz verzije u odgovarajućem retku odjeljka Opće postavke.

U principu, za izgradnju kernela nisu potrebne nikakve root dozvole, iako instaliranje novog kernela ove ovlasti su potrebne.

Za početak izgradnje kernela 2.6, morate pokrenuti make .

Za početak izgradnje 2.4 kernela morate pokrenuti 3 naredbe:
napraviti dep
napraviti bzImage
napraviti module
Prvi stvara potrebne datoteke ovisnosti. Drugi skuplja jezgru. A posljednji skuplja module.

Instaliranje novog kernela

Nakon što je kernel izgrađen, mora se instalirati. Prije instalacije morate pokrenuti make modules_install da biste instalirali module kernela u novi poddirektorij /lib/modules. Nakon instaliranja modula, morate pokrenuti make install da instalirate novi kernel i početni RAM disk (početni RAM disk) u /boot direktoriju i ažurirate konfiguraciju bootloadera.

Želio bih vam skrenuti pozornost na činjenicu da se potrebni početni RAM disk (početni RAM disk ili initrd) automatski stvara tijekom procesa izgradnje. Ako ga trebate izraditi ručno, to možete učiniti pomoću naredbe mkinitrd.

Nakon izvođenja make install, konfiguracijska datoteka bootloadera trebala bi se ažurirati. Ali iz nekog razloga mi je ažuriran nakon naredbe update-grub.

Na ovom ću završiti. To je jako velik članak. U bliskoj budućnosti pokušat ću ga stisnuti.

Ponekad ćete možda morati sastaviti svoj vlastiti Linux kernel. Razlozi za to mogu biti sljedeći:

  • potreban vam je čist kernel, bez zakrpa za distribuciju;
  • želite primijeniti vlastite zakrpe (kojih ima jako puno);
  • želite sastaviti kernel za svoju hardversku konfiguraciju, izbaciti višak iz njega i/ili ga izoštriti za određene zadatke;
  • želite uključiti eksperimentalni upravljački program ili datotečni sustav u kernel koji nije u kernelu "vanilija" jezgra (npr. ZFS ili Dizač 4);
Nema ništa teško u sastavljanju kernela. Važno je samo razumjeti zašto se to radi, a također ne dirati one parametre koje ne razumijete. U ovoj bilješci opisat ću dva primjera izgradnje kernela Temeljen na Debianu distribucije. U prvom primjeru, pokazat ću kako je lako izgraditi čistu, ono što se zove "vanilija" kernel (kao što je izdano od strane Linus Torvalds), au drugom - kako primijeniti vlastite zakrpe i optimizirati kernel. Odmah ću napisati dva upozorenja:
  • morat ćete ponovno izgraditi kernel svaki put kada ga ažurirate (preuzmite "update patch", primijenite ga i izgradite kernel);
  • obnovljena jezgra možda neće raditi ako se neki hakovi koriste u vašem sustavu kako bi se osigurala operativnost jedne ili druge opreme;
  • ako je kernel pogrešno konfiguriran, posebno u slučaju nepismenog ili nepromišljenog krpanja, možete ili dobiti sustav koji usporava do užasa, ili ga potpuno izgubiti.
SVE RADNJE RADITE NA VLASTITU ODGOVORNOST!

Jednostavna izgradnja kernela bez krpanja.

Izvorni kod za Linux kernel nalazi se na kernel.org. Postoje također "ažuriraj zakrpe". Što trebamo? Preuzimanje sa stranice tarball(arhiva) s najnovijom stabilnom verzijom kernela (u vrijeme pisanja ovo je verzija 4.3 ). Preuzimamo na bilo koji prikladan način. Zatim su nam potrebni alati za montažu:

sudo apt install build-essential gcc kernel-package patch
sudo apt-get build-dep linux

Nakon što su instalirani svi potrebni alati, otpakirajte arhivu s kodom kernela u bilo koji prikladan direktorij. Neka bude /pocetna/korisnik/KERNEL, Gdje "korisnik"- korisničko ime sustava. Zatim otvorite terminal i idite tamo:

cd /home/user/KERNEL

Ostaje izgraditi kernel:

fakeroot make-kpkg -j 3 --initrd --append-to-version=-prilagođena kernel_image kernel_headers #-j 3

Broj 3 poslije j- ovo je broj jezgri vašeg procesora + 1. To jest, za dual-core je 3, za 4-core je 5, i tako dalje.
-prilagođen- ovdje možete odrediti prikladno ime za kernel kako biste ga lakše razlikovali od distribucijskog.
kernel_image I kernel_headers su sam kernel i njegove datoteke zaglavlja. zaglavlja neophodni za izgradnju upravljačkih programa i kernel modula, kao i za neke druge svrhe. Nakon izvršavanja ove naredbe počet će se pojavljivati ​​nekoliko pitanja o konfiguraciji jezgre. Budući da sve ostavljamo po zadanom, samo pritisnite Enter dok izrada ne počne. Ovisno o snazi ​​vašeg računala, sastavljanje može trajati od 15-20 minuta do nekoliko sati. Nakon montaže, u imenik /dom/korisnik bit će dva deb paket: jezgra i zaglavlja. Instalirajte ih naredbom:

sudo dpkg -i linux-image-4.3*deb linux-headers-4.3*deb
sudo update-grub

I ponovno pokrenite. U izborniku GRUB sada će biti moguće odabrati drugu jezgru za pokretanje sustava.

Izgradnja kernela pomoću zakrpa i dodatne konfiguracije.

Ovaj put ćemo sastaviti optimiziranu jezgru za rad sa zvukom i videom, kao i za veću brzinu odziva sustava. Da bismo to učinili, primijenit ćemo dvije zakrpe: takozvanu zakrpu u stvarnom vremenu ( PREPREMITI RT) i zakrpa kompilatora GCC za dodavanje dodatnih opcija za optimizaciju procesora. Prvo, što je zakrpa? Zakrpa je tekstualna datoteka koju stvara program dif, koji sadrži izmjene koda u određenim dijelovima, koje se prilikom primjene zakrpe unose na prava mjesta. Jer RT flaster izlazi s velikim zakašnjenjem, njegova najnovija verzija je za kernel 4.1. Međutim, to i nije toliko važno. Na isti način preuzimamo kernel 4.1 s kernel.org i raspakiramo ga u direktorij /početna/korisnik/KERNEL-CUSTOM. Sada preuzmite zakrpe. PREEMPT_RT i GCC zakrpa. Iz preuzetih arhiva potrebne su nam datoteke s ekstenzijom .patch koje se moraju smjestiti u izvorni direktorij kernela. Odnosno u /početna/korisnik/KERNEL-CUSTOM. Prije primjene zakrpa, morate biti sigurni da neće biti pogrešaka. Otvori terminal:

cd /home/user/KERNEL-CUSTOM
patch -p1 -i patch-4.1.13-rt15.patch --dry-run


Opcija --testno pokretanje omogućuje vam simulaciju primjene zakrpe, bez izmjena datoteka. Ako nisu pronađene pogreške (pogledajte snimak zaslona) - primijenite zakrpu bez opcije --testno pokretanje. Učinite isto s drugom zakrpom. Nemojte stavljati više od jednog flastera istovremeno! Sada moramo konfigurirati naš kernel. Imamo sljedeće opcije za odabir:

makeconfig- pitanja o konfiguraciji jednog ili drugog podsustava jezgre bit će prikazana na terminalu jedno po jedno. Izuzetno dug i naporan proces. Zaboravimo na to :)
napravi staru konfiguraciju- koristit će se konfiguracija trenutno pokrenutog kernela. Budući da sami gradimo od nule, ova je metoda također beskorisna.
napraviti defconfig- slično prethodnom, samo će vrijednosti biti zadane. Način na koji su to postavili programeri kernela. Analog prve metode montaže.
napraviti menuconfig- pseudo-grafičko sučelje temeljeno na knjižnici Npsuje. Na ekranu će se prikazati sučelje s prikladnim hijerarhijskim izbornikom. Kontrole s tipkama za smjer, razmaknicom i tipkom TAB. Preporuča se ako kompajlirate kernel na sustavu koji nema grafičku ljusku.
napraviti gconfig GTK, preporučuje se u GNOME, Mate, Xfce, Cinnamon, Unity i drugim okruženjima koja koriste GTK.
napraviti xconfig- GUI temeljen Qt. Preporučeno u KDE-u. Budući da moj sustav koristi KDE, koristit ću ovu metodu. Osim toga, postoji još nekoliko metoda, ali njihova primjena se ne razlikuje. Dakle, nakon nanošenja flastera, trčite napraviti xconfig a ovo je ono što imamo pred sobom:


Prvo ugasi dyntics. Za ovo idemo Podsustav mjerača vremena i izabrati Periodički mjerač vremena otkucava


Sada najukusnije. Idemo Vrste i značajke procesora, traži predmet Obitelj procesora i navedite svoju seriju procesora. Na primjer, ako imate Intel Core i5-4xxx, navedite Hasswell(4. generacija procesora). Ako niste sigurni točno, možete odabrati stavku Izvorne optimizacije koje GCC automatski otkriva. U tom slučaju, prilikom izgradnje, kompajler će odrediti što vaš procesor podržava i uključiti sve njegove značajke.


Idite dolje i uključite opciju Potpuni preemptibilni kernel (RT). Teški način rada u stvarnom vremenu.


Pomaknite se ispod i u odlomku Učestalost mjerača vremena postavite frekvenciju prekida sustava na 1000 Hz


Potpuno isključite svaku uštedu energije. To je važno! S lijeve strane tražimo predmet Upravljanje napajanjem i ACPI opcije i isključite ACPI. Također isključite štednju energije procesora.

To je sve. Ako želite (i pažljivo proučite dokumentaciju), možete napraviti dodatne promjene u konfiguraciji (onemogućiti nepotrebne upravljačke programe, omogućiti dodatne podsustave i tako dalje). Sada spremite konfiguraciju putem Datoteka-Spremi, zatvorite konfigurator i izgradite kernel:

fakeroot make-kpkg -j 3 --initrd --append-to-version=-rt-custom kernel_image kernel_headers #-j 3
sudo update-grub

Na mom računalu s procesorom Intel Core i3-550 (3,2 GHz), poboljšanje performansi bilo je prilično vidljivo. Ali što je najvažnije, kada radite u LMMS I Kdenlive, periodično zastajkivanje, desinkronizacija audio i video zapisa, kao i zamrzavanje pod velikim opterećenjem na tvrdom disku su nestali. Zaključak - radi! Na kraju ću opisati dvije modificirane jezgre koje su vrlo popularne u Linux krugovima:

PF-jezgra- najpopularniji skup zakrpa Ukrajinca Aleksandra Natalenka (aka post-factum) . Ovo je skup zakrpa koje nisu uključene u glavnu jezgru, ali pružaju povećanu reakciju sustava, pružaju alternativni hibernacijski podsustav koji je brži od glavnog, a također smanjuju korištenje memorije korištenjem iste tehnike spajanja stranica. Set uključuje:

  • BFS planer procesa Con Kolivasa s dodatnim popravcima Alfreda Chena;
  • BFQ I/O Scheduler Paolo Valente, Arianna Avanzini i Mauro Marinoni;
  • hibernacijski podsustav TuxOnIce Nigela Cunninghama;
  • implementacija iste tehnike spajanja stranica u UKSM od Nai Xia;
  • zakrpa od Grayskyja koja proširuje popis procesora za optimizaciju kernela pomoću kompajlera (onaj koji smo primijenili gore)
Izmijenjeno spremište kernela. Službena stranica .

zen-jezgra- drugi najpopularniji, ali prvi skup po broju zakrpa. Zen Kernel koristi kombinaciju više projekata, ažurira kod putem git repozitorija i ima nekoliko stvari specifičnih za Zen kojima je cilj zadovoljiti većinu korisničkih potreba u jednoj jezgri. Neke značajke zakrpa: drm-next, bežično testiranje, odabir CPU planera (CFS/BFS), BFQ I/O planer, aufs, unionfs, reiser4, tuxonice, PHC i mnoge druge stvari koje su izvrsne za optimizaciju stolnih računala ili prijenosnih računala. Sve je to dostupno kao jedan flaster za jezgru vanilije. Službena stranica . GIT repozitorij. Paketi za Debian/Ubuntu.

Za danas, možda, sve. Više informacija možete pronaći u poveznicama na članak. Sve što je opisano u članku sam testirao na mnogim konfiguracijama.

Jezgra(Engleski) zrno) je ono oko čega se sve ostalo gradi. To je ono što se zove Linux. Sada se riječ Linux u svakodnevnom životu naziva operativnim sustavom izgrađenim na njemu, iako se na dobar način naziva GNU / Linux (Linux kernel i softver iz GNU projekta, koji se razvijao desetljećima).

Ubuntu koristi kernel s velikim brojem zakrpa, od kojih neke dodaju nestabilne i eksperimentalne značajke.

Svako izdanje Ubuntua ima svoju verziju kernela. LTS izdanja od 10.04 mogu nadograditi kernel na verzije uključene u novija izdanja.

Ubuntu verzijaVerzija kernela
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,04 LTS 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,04 LTS 3.13
14.10 3.16
15.04 3.19

vilice

Numeriranje verzija Ubuntu kernela i na web stranici kernel.org ne podudara se, budući da Canonical programeri dodaju mikro verziju kako bi označili dodane zakrpe. Na primjer, verzija 3.2.0-23 bi značila da se kernel temelji na grani 3.2, koja ima 23 zakrpe.

Sljedeće vrste kernela podržane su u Ubuntu repozitoriju:

generic-pae kernel omogućuje 32-bitnom sustavu korištenje do 64 GB ukupnog RAM-a, alocirajući ne više od 4 GB za potrebe određenog procesa, dok jednostavni generički kernel radi s najviše 4 GB RAM-a.

64-bitni kernel omogućuje adresiranje do 1TB memorije koju troše procesi.

Ako trebate ažurirati kernel na noviju glavnu verziju (obično je to zbog činjenice da nove verzije dodaju podršku za novi hardver, eliminiraju regresije), možete koristiti službeno podržanu arhivu http://kernel.ubuntu.com/ ~kernel-ppa/mainline/ .

Kompajliranje kernela

Izgradnja kernela iz izvora zahtijeva neke vještine i znanje o tome kako OS radi.

Prije nego počnete graditi kernel, trebate instalirati sljedeće pakete:

Build-essential fakeroot ncurses-dev libssl-dev

Sve daljnje radnje moraju se izvršiti u ime superkorisnika:

sudo su

Dobivanje izvornog koda

Izvorni kod za kernel koji koristi Ubuntu može se dobiti instaliranjem paketa linux-source:

apt-get instalacija linux izvora

Nakon instalacije u imenik /usr/src bit će arhiva tzv linux-source-verify_kernels.tar.bz2.

Također možete preuzeti arhivu s izvornim kodom kernela sa stranice kernel.org.

Prilikom preuzimanja kernela sa stranice kernel.org, morat ćete na njega primijeniti zakrpe

Konfiguracija

Raspakirajte dobivenu arhivu i, radi praktičnosti, stvorite simboličku vezu na rezultirajući direktorij:

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

Kako biste pojednostavili proces konfiguracije kernela, možete kopirati postavke trenutnog.

Nedavno se prilično često objavljuju nove verzije kernela. Svakih nekoliko mjeseci postoji stabilno izdanje. Pa, nestabilni kandidati za izdanje izlaze još češće. Linus Torvalds i mnogi programeri diljem svijeta neprestano rade na poboljšanju novih kernela i dodavanju im sve više i više funkcionalnosti.

Sa svakom novom verzijom, Linux kernel dodaje podršku za nekoliko novih uređaja, kao što su novi procesori, video kartice ili čak zasloni osjetljivi na dodir. Nedavno je podrška za novi hardver znatno poboljšana. Također, novi datotečni sustavi uključeni su u kernel, mrežni stog je poboljšan, greške i bugovi su ispravljeni.

Ako trebate više informacija o promjenama u određenoj verziji kernela, pogledajte njen Changelog na kernel.org, au ovom ćemo članku pokriti ažuriranje Linux kernela na najnoviju verziju. Pokušat ću ne vezati upute za određenu verziju kernela, nove kernele izdaju se prilično često i bit će relevantne za svaku od njih.

Razmislite o ažuriranju Ubuntu i CentOS kernela. Prvo, pogledajmo kako ažurirati kernel u Ubuntu 16.04.

Prvo da vidimo koji ste kernel instalirali. Da biste to učinili, otvorite terminal i pokrenite:

Na primjer, trenutno koristim verziju 4.3 i mogu nadograditi na najnoviju verziju. Programeri Ubuntua već su se pobrinuli da njihovi korisnici ne grade kernel ručno i prave deb pakete nove verzije kernela. Mogu se preuzeti sa službene Canonical web stranice.

Mogao sam dati wget naredbi za preuzimanje ovdje da je verzija kernela bila poznata, ali u našem slučaju bilo bi bolje koristiti preglednik. Idite na http://kernel.ubuntu.com/~kernel-ppa/mainline/. Ovdje je sve što je sastavio Ubuntu kernel tim. Kerneli se grade kako za specifične distribucije, s kodnim nazivom distribucije, tako i za općenite. Štoviše, kerneli iz Ubuntu 16.10 najvjerojatnije će raditi u 16.04, ali od 9.04 na Ubuntu 16.04 ne biste trebali instalirati kernel.

Pomaknite se do dna, tamo se nalaze novije verzije kernela:

Osim toga, na samom vrhu nalazi se dnevna/trenutna mapa, koja sadrži najnovije, noćne verzije kernela. Odaberite željenu verziju kernela i preuzmite dvije datoteke linux-headers i linux-image za svoju arhitekturu:

Nakon što je preuzimanje završeno, možete nastaviti s instalacijom. Da biste to učinili, pokrenite sljedeće u terminalu:

Dođite do mape s instalacijskim paketima, na primjer, ~/Preuzimanja:

Pokrenite instalaciju:

Ako ova naredba nije uspjela, možete ići drugim putem. Instalirajte uslužni program gdjebi:

sudo apt-get install gdjebi

Zatim ga upotrijebite za instalaciju kernela:

sudo gdebi linux-headers*.deb linux-image-*.deb

Kernel je instaliran, ostaje ažurirati bootloader:

sudo update-grub

Sada možete ponovno pokrenuti računalo i vidjeti što se dogodilo. Nakon ponovnog pokretanja, provjerite je li ažuriranje Linux kernela na najnoviju verziju bilo uspješno:

Kao što vidite, kernel je uspješno instaliran i radi. Ali nemojte žuriti s uklanjanjem stare verzije kernela, preporučljivo je imati nekoliko verzija kernela u sustavu kako biste u slučaju problema mogli pokrenuti sustav sa stare radne verzije.

Automatsko ažuriranje jezgre Linuxa u Ubuntuu

Gore smo pogledali kako ručno instalirati željenu verziju kernela. Ubuntu je nekada imao PPA za dnevne nadogradnje kernela, ali sada je zatvoren. Stoga možete ažurirati kernel samo preuzimanjem deb paketa i njegovim instaliranjem. Ali sve se to može pojednostaviti posebnom skriptom.

Instaliranje skripte:

cd /tmp
$ git klon git://github.com/GM-Script-Writer-62850/Ubuntu-Mainline-Kernel-Updater
$ bash Ubuntu-Mainline-Kernel-Updater/install

Provjera ažuriranja:

KernelUpdateChecker -r jakkety

Opcija -r omogućuje vam da odredite granu distribucije za koju tražite kernele. Za xenial, kerneli više nisu izgrađeni, ali kerneli iz sljedeće verzije ovdje će dobro raditi. Dodatno, opcija -no-rc može reći uslužnom programu da ne koristi kandidate za izdanje, a opcija -v navodi točnu verziju kernela koja će se instalirati. Ako vam je svejedno za koju distribuciju je kernel, sve dok je najnoviji, koristite opciju --any-release. Skripta će dati sljedeći rezultat:

Prije instaliranja kernela, možete vidjeti detalje otvaranjem datoteke /tmp/kernel-update:

Ovdje možemo vidjeti da je izvršena pretraga za yakkety, a trenutno je dostupna verzija kernela 4.7-rc6. Možemo ugraditi:

sudo /tmp/kernel-update

Skripta će nam pokazati verziju trenutnog kernela, kao i verziju kernela koja će biti instalirana, njegov datum izgradnje i druge detalje. Također ćete biti upitani trebate li voditi dnevnik promjena. Slijedi instalacija:

Stare kernele, za svaki slučaj, nemojte brisati (n):

Gotovo, ažuriranje kernela na najnoviju verziju je završeno, sada ponovno pokrenite računalo (y):

Provjera radi li ažuriranje Ubuntu kernela:

Štoviše, skripta je dodana u automatsko učitavanje i sada će automatski provjeravati ažuriranja 60 sekundi nakon prijave. Prečac za automatsko učitavanje nalazi se u datoteci:

vi ~/.config/autostart/KernelUpdate.desktop

Možete ga promijeniti kako želite ili izbrisati. Ako želite potpuno ukloniti skriptu iz sustava, pokrenite:

rm ~/.config/autostart/KernelUpdate.desktop
$ sudo rm /usr/local/bin/KernelUpdate(Checker,ScriptGenerator)

Ne preuzima se

Ako je došlo do bilo kakvih pogrešaka tijekom instalacije ili je kernel neispravno ažuriran i sada se sustav ne pokreće s novim kernelom, možete koristiti stari kernel. Također, sustav se možda neće pokrenuti ako koristite vlasnički upravljački program za NVIDIA video karticu; u tom slučaju nemojte žuriti s preuzimanjem najnovije verzije kernela, koristite samo stabilne kernele, u pravilu postoji podrška za ovaj modul već im je dodano.

A za vraćanje sustava odaberite stavku Napredne opcije za Ubuntu u izborniku Grub:

I pokrenite prethodni pokrenuti kernel:

Nakon preuzimanja ostaje ukloniti neispravno instalirani kernel i ponovno ažurirati Grub, zamijeniti željenu verziju kernela umjesto 4.7:

sudo apt uklanjanje linux-header-4.7* linux-image-4.7*

sudo update-grub

Vaš sustav sada se vratio u svoje prethodno stanje. Možete pokušati instalirati stariju verziju kernela ili pokušati ponovno.

Nadogradnja Linux kernela na 4.4 na CentOS-u

A sada pogledajmo kako ažurirati najnoviju verziju Linux kernela u CentOS-u. Upute su testirane na CentOS 7, ali najvjerojatnije će raditi na RedHat 7, Fedora i drugim sličnim distribucijama.

U pravilu, novi kerneli nisu uključeni u službena repozitorija CentOS-a, pa ćemo za dobivanje najnovije stabilne verzije morati dodati ERLepo repozitorij. Ovo je repozitorij komercijalnih paketa (Enterprise Linux Packages) i također se održava na RedHat i Fedora.

Da biste dodali spremište, slijedite ove korake:

Prvo morate uvesti ključ:

rpm --uvoz https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

Dodajte repozitorij i potrebne komponente u RHEL/Scientific Linux/CentOS-7:

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

yum instalirajte yum-plugin-fastestmirror

Na Fedori 22 i novijoj verziji:

Dostupne informacije o izgradnji kernela uvelike variraju, pa ćemo opisati izradu kernela posebno za Ubuntu. Pokušajmo. tako da nema grešaka u naredbama napisanim u ovom članku. Kada opisujemo proces kompilacije, nećemo se zaustaviti samo na dobivanju kernela. Nije dovoljno dobiti kernel koji radi. Za vlasnike nVidia kartica, ovdje će biti opis kako dobiti sustav s radnom grafikom na novoj jezgri. Štoviše, grafika će raditi iu staroj i u novoj jezgri.

1. Instaliranje izvora kernela

Prvo nam trebaju izvorni kodovi kernela. Za Ubuntu 7.04 oni su već u repozitoriju, morate pronaći paket linux-source-waste(u našem slučaju bit će linux-source-2.6.20), i instalirajte ga (sve to možete učiniti putem Sinaptički). Nakon instaliranja ovog pakta, u direktoriju /usr/src datoteka pod nazivom linux-source-2-6-20.tar.bz2.

Radimo ispod sudo naredba

chmod 777 /usr/src

Prijavite se kao običan korisnik /usr/src i raspakirajte ovu datoteku

tar -jxvf linux-source-2-6-20.tar.bz2

Pojavit će se izvorni direktorij. /usr/src/linux-source-2-6-20. Brišemo arhivsku datoteku (bit će potrebna root prava).

2. Instaliranje pratećih paketa

Potrebno je više paketa za izgradnju kernel-paket, libncurses5-dev, lažni korijen. Instalirajte ih putem Sinaptički. Naravno, kompilator također mora biti instaliran na sustavu. gcc I dev-paketi za sistemske biblioteke, kao što su libc6-dev.

3. Stvaranje konfiguracijske datoteke jezgre

Sada nam je potrebna konfiguracija kernela s kojom je izgrađena jezgra ubunte. Idi na katalog /čizma, i vidimo datoteku poput config-2.6.20-15-generički. On je ono što nam treba. Kopirajte ga u izvorni direktorij /usr/src/linux-source-2-6-20 i preimenujte ga u .config. Imajte na umu da naziv datoteke počinje s točkom, ovo nije greška pri upisu.

Sada, biti u imeniku /usr/src/linux-source-2-6-20, dajemo naredbu kao običan korisnik

ovo će pokrenuti tekstualno sučelje konfiguracije jezgre. Također možete pokrenuti postavljanje u grafičkom načinu

U oba slučaja otvorit će se sučelje s potvrdnim okvirima preko kojih konfiguriramo kernel. Čini se da je datoteka otvorena prema zadanim postavkama .config, koji trenutno sadrži standardnu ​​konfiguraciju Ubuntu kernela.

Što želite konfigurirati - razmislite sami, na Internetu postoji mnogo dokumentacije na ruskom jeziku o ovom pitanju. Svrha ovog članka je samo opisati korake uključene u kompajliranje Ubuntu kernela.

Na kraju konfiguracije odaberite stavku "Spremi konfiguraciju konfiguracije", navedite naziv datoteke koji se razlikuje od .config, Na primjer .config_my_01. Odlazimo.

Sada preimenuj .config V .config_ubuntu. I dobijete dvije datoteke - .config_ubuntu I .config_my_01. Razlike između zadane i vaše konfiguracije možete vidjeti ovako

diff .config .config_my_01

Sada kopirajte svoju konfiguraciju .config_my_01 pod imenom .config. Oni. dobit ćete 3 konfiguracijske datoteke. Kompilacija će koristiti datoteku .config. Datoteke .config_ubuntu I .config_my_01 bit će nam pomoći u budućnosti za novu kompilaciju. Ovo je samo u slučaju da se ispostavi da novi kernel ne radi ili ima greške.

4. Kompilacija

Prije kompajliranja svakako provjerite dostupnost slobodnog prostora (na particiji gdje se nalaze izvori). Bilo bi lijepo označiti 4-5 Gb(!) u rezervi. Prilikom prevođenja, veličina izvornog direktorija može narasti do 3,5 Gb. Slobodni prostor možete provjeriti naredbom

Sada, biti pod normalnim korisnikom u imeniku /usr/src/linux-source-2-6-20, dajemo naredbu koja će obrisati u izvoru objektne datoteke koje je netko kompilirao, a koje su ostale od prethodne kompilacije i bile su u arhivi.

Zatim kroz sudo dobivamo root prava i započinjemo kompilaciju.

make-kpkg --initrd --revision=mybuild.1.0 kernel_image kernel_headers

Gdje umjesto " mybuild.1.0" napišite ono što vam je potrebno. Dopuštena su engleska slova, brojevi, točke. Nisu dopuštene podvlake i crtice.

Zapravo, na prijateljski način, kompilacija kernela bi se trebala obaviti pod pravima običnog korisnika. Formalno, stvaranje binarne datoteke jezgre ne razlikuje se od kompajliranja binarne datoteke bilo kojeg drugog programa. Ali kompilaciju ne radimo u ručnom načinu rada (putem naredbi poput napraviti bzImage module), i u poluautomatskom (kroz napraviti-kpkg). I ovaj će program, nakon prevođenja, pokrenuti program ispod sebe dpkg-deb Dobiti deb kernel paket. U ovom trenutku potrebna su root prava.

Sada da vidimo što gornja naredba radi. Počinje kompajlirati kernel, a zatim stvara deb-nazvani paket linux-image-version.deb, koji će sadržavati binarni kernel i kernel module (ovo će biti učinjeno zahvaljujući cilju kernel_image). Također će se stvoriti deb-nazvani paket linux-headers-version.deb, sadržavat će datoteke zaglavlja kernela (to će biti učinjeno zahvaljujući cilju kernel_headers). Rezultirajući paketi bit će u imeniku /usr/src.

Pogledajte koje su datoteke u njima deb-paketi, mogu u osvajač(u Kubuntu) desnim klikom na onu koja vas zanima deb-datoteka i odabir " Izbornik Kubuntu paketa" -> "Prikaži informacije o paketu". Informacije će se formirati prilično sporo, oko minute, jer su paketi veliki.

5. Instaliranje kernela

Sada instalirajte kernel. Biti s pravima superkorisnika u imeniku /usr/src, dajte naredbu

dpkg -i linux-image-version.deb

nakon čega vaš kernel (datoteka vmlinuz-2.6.20.3-ubuntu1) bit će smješteni u imenik /čizma(ni svi prethodni kerneli neće nikamo otići, ostat će na svojim mjestima), iu imeniku /lib/moduli, pokraj direktorija s regularnim modulima jezgre (in Ubuntu 7.04 nazvao /lib/modules/2.6.20-15-generic) pojavit će se direktorij s modulima vaše nove jezgre (u našem slučaju to će biti /lib/modules/2.6.20.3-ubuntu1). Automatski će se pisati u novi kernel /boot/grub/menu.lst.

U principu, već se možete ponovno pokrenuti i na zaslonu za učitavanje Grub pojavit će se nova stavka s vašom jezgrom. Nova jezgra pojavit će se na vrhu popisa. Ali ne žuri nam se, nego ćemo dati drugu zapovijed

dpkg -i linux-headers-version.deb

koji će instalirati zaglavlja kernela u direktorij /usr/src/linux-headers-version, u našem slučaju to će biti imenik /usr/src/linux-headers-2.6.20.3-ubuntu1. Ova će nam zaglavlja trebati, na primjer, za ponovno kompajliranje upravljačkih programa nVidia za novi kernel.

6. Ponovno pokretanje

Ponovno podizanje sustava i u izborniku Grub vidjet ćete dvije nove stavke - normalno podizanje s vašim kernelom i pokretanje u minimalnom načinu rada konzole. Odaberite prvu stavku. Ako jezgra nije odmah pala u Kernel panika, to je dobar znak. Pričekajte kraj preuzimanja. Ako imate sreće, Ubuntu će se pokrenuti u grafičkom načinu rada i prikazati grafički upit za prijavu. U ovom slučaju ne možete dalje čitati.

Ali za korisnike kartica nVidia, koji su koristili upravljačke programe instalirane putem "Proprietary Driver Manager" ili koristili upravljačke programe iz paketa nvidia-glx(ili tamo nvidia-glx-novo), dajem 99% garanciju da nećete imati sreće! I nećete vidjeti grafiku pod novim kernelom!

7. Instaliranje nVidia upravljačkih programa s nvidia.com

Da biste radili s x-ovima pod novim kernelom, prva stvar koja vam pada na pamet je instalirati upravljačke programe s nvidia.com pod novim kernelom. A ovo je pogrešna odluka! Čim se ogrjevno drvo instalira pod novim kernelom, grafika u vašem starom testiranom kernelu prestat će raditi (zbog činjenice da su datoteke upravljačkog programa nVidia usko povezane s verzijom i nazivom kernela). A budući da još niste stvarno testirali performanse novog kernela, možete dobiti sustav "s nativnim kernelom, ali bez grafike" i "jezgru s greškama, ali s grafikom". Mislim da se nikome ne sviđa ova situacija.

U popularnom članku "Nuklearna fizika za kućanice" postoje preporuke kako dobiti grafiku ispod obje jezgre. Predlaže se sljedeći način - da imate spreman instalacijski paket drva za ogrjev s nvidia.com, a ako se želite dignuti pod određenim kernelom, prvo se morate dignuti u konzolnom modu ovog kernela, instalirati drva za ogrjev, a zatim se dignuti normalno . Mislim da ni ovakvim pristupom nitko neće biti zadovoljan.

Pobrinut ćemo se da grafika radi i u starom i u novom kernelu, a za to neće biti potrebno svaki put pokretati instalaciju (kompilaciju) drva za ogrjev. Da bismo to učinili, morat ćemo ispuniti samo jedan uvjet - da grafičko drvo za ogrjev pod različitim jezgrama bude iste verzije.

Kratki akcijski plan- stavljamo drva za ogrjev s mjesta nvidia.com za standardni kernel u cijelosti. Osiguravamo da rade. Zatim iz istog paketa instaliramo drva za ogrjev za vlastitu jezgru, ali u načinu rada "samo grafički modul".

8. Instaliranje nVidia drajvera za regularni kernel

Sve što je napisano u nastavku također je prikladno za one koji su upravo odlučili instalirati nove nVidia upravljačke programe za standardni kernel!

Preuzimanje sa stranice nvidia.com ogrjev pod linuxom. Skinuo sam verziju drva za vatru 96.43 . Datoteka se zove nvidia-linux-x86-96.43.01-pkg1.run. Ali možete isprobati druga stabilna izdanja koja su prisutna na web mjestu. nVidia.

Za instalaciju kreirajte u imeniku /usr/src poddirektorij pod nazivom nvidia, kopirajte ovu datoteku tamo. Budući da se nalazimo u ovom poddirektoriju, datoteci dajemo dopuštenje za izvođenje

chmod 777 NVIDIA-Linux-x86-96.43.01-pkg1.run

Sve, na ovom radu u grafičkom sučelju završava neko vrijeme. Prije izlaska iz načina grafikona, pokrenite Sinaptički i uvjerite se da imate

  • sposobnost. Ovo je prednji omot preko upravitelja paketa za tekstualni način rada.
  • linux-headers-2.6.20-15. Ovo su datoteke zaglavlja (zaglavlja) vašeg standardnog kernela.
  • linux-headers-2.6.20-15-generički. Neću točno reći čemu dovraga služi ovaj paket, ali neka bude.

Dobar savjet je ispisati tekst ovog članka na papir ili ga spremiti u tekstualnu datoteku koja se može pregledavati iz tekstualnog načina rada.

Ponovno se pokrećemo u konzolnom načinu običnog kernela (in Grub postoji takva točka). U ubuntu automatski ćete dobiti root prava, čak ne morate unijeti lozinku. Sada moramo ukloniti drvo nVidia koji su u sustavu. Ako ste instalirali drva za ogrjev kroz "Proprietary Driver Manager" (ili instaliranjem paketa nvidia-glx ili nvidia-glx-novo), zatim paket nvidia-glx/nvidia-glx-novo mora se ukloniti iz sustava, i ne samo deinstalirati, već deinstalirati u načinu rada čistiti.

Ja sam prilično glup korisnik, i umjesto da se bavim opcijama dpkg, u konzoli koristim program sposobnost. Nazovi tim

i naći ćete se u ljusci, koja podsjeća na Sinaptički. Na vrhu će biti ključni savjet. Za pristup izborniku pritisnite ctrl+t(neugodno, ali što učiniti). Na jelovniku
strelice i tipke Unesi pronađi i odaberi " pronaći". Pišemo niz za pretraživanje - nvidia-glx. Svjetlo će pasti na željeni paket. Ponovno pozivamo izbornik i pronalazimo stavku " Čišćenje". Pritisnemo ga, a paket na kojem se nalazi flash bit će označen za potpunu deinstalaciju svih njegovih datoteka iz sustava (sam paket će ostati u predmemoriji, može se ponovno instalirati ako je potrebno). Pojavit će se savjet ispod - " e - Ispitati, ! - ukloniti". Pritisnite " e" - i pogledajte koji će paketi biti uklonjeni. Ako iz nvidia-glx paketi ovise o njima, oni će također biti deinstalirani. Ovo je obično paket. nvidia-glx-dev. U redu je ako i on ode.

Sada pritisnemo " ! "(za posebno nadarene - pomak+1), ovime se slažemo s našim izmjenama. Zatim pritisnemo " q" (izlaz). Prilikom izlaska program će ukloniti pakete koje smo označili.

Sada je takav trenutak. Sada smo na nivou init 1(samo konzola, puno servisa ne radi). Ako pokrenete instalaciju upravljačkog programa nVidia, onda će se ona zakleti da možda nisi započeo službu devfs, koji obično počinje na razini 3 . Stoga dajemo zapovijed

telinit 3

i sustav će završiti učitavanje potrebnih servisa, a istovremeno će izaći iz jednokorisničkog načina rada (pojavit će se nekoliko konzola koje se mogu mijenjati tipkama ALT+F1...ALT+F6). Za daljnji rad potrebne su nam samo dvije konzole. Usput, sustav će pokušati učitati grafiku, ali neće uspjeti, jer. upravo smo deinstalirali drajver. I ona će ostati 7 konzolu s praznim ekranom. Bez panike, guraj ALT+F1, vidimo prvu konzolu, tamo unosimo prijavu, lozinka je ista kao kod grafičkog unosa (samo nakon prijave i lozinke pritisnemo Unesi ali ne TAB).

Nakon prijave, zovemo mc pod superuserom

Idi na katalog /usr/src/nvidia

./NVIDIA-Linux-x86-96.43.01-pkg1.run -e

opcija " -e" omogućit će nam da vidimo izvješće o radnjama i vidimo sukobljene datoteke. Započnimo instalaciju. Slažemo se s licencom. ftp nvidia. Govorimo u redu da ćemo module izraditi mi. Za pitanja o unosu staza, samo kliknite Unesi.

Na kraju, prije same instalacije, prikazat će se popis datoteka koje će biti instalirane. I na početku ovog popisa (ako se pronađe) pojavit će se sukobljene datoteke. Bit će napisano " sigurnosna kopija datoteke..."- to su oni. U mom slučaju to su bili dosjei

/usr/lib/xorg/modules/extensions/libGLcore.so
/usr/lib/xorg/modules/extensions/libglx.so
/usr/lib/libGL.so
/usr/lib/libGL.so.1
/usr/lib/libGL.so.1.2
/lib/modules/2.6.20-15-generic/volatile/nvidia.ko
/usr/include/GL/glext.h
/usr/include/gl/gl.h
/usr/include/GL/glxext.h
/usr/include/GL/glx.h

Ovo su datoteke iz paketa nvidia-ograničeni-moduli. Činjenica je da ako jednostavno uklonite ovaj paket, onda zajedno s ovim datotekama, sve datoteke za nVidia- čipseti ( nVidia uostalom, ne proizvodi samo video kartice). Također ćete morati ukloniti zavisne pakete. linux-ograničeni-moduli-2.6.20-15-generički, linux-ograničeni-moduli-generički I linux generički. Stoga je nepoželjno ukloniti ovaj paket. Stoga ćemo to učiniti drugačije.

Čim vidite takav popis, prijavite se na drugu konzolu (prijelaz - ALT+F2), trčanje

i metodički premjestite ove sukobljene datoteke negdje u zaseban direktorij u početnom direktoriju, pozivajući se na popis u prvoj konzoli. Zašto premjestiti, a ne izbrisati? Činjenica je da su nazivi datoteka u Linuxu "čovjeku čitljivi", te lako možete pogriješiti i izbrisati pogrešnu datoteku.

Nakon brisanja svih datoteka namijenjenih Sigurnosna kopija, vratite se na prvu konzolu. Prekini instalaciju ( ctrl+c) i ponovno ga pokrenite. ako " sigurnosna kopija datoteke..." više neće biti, a zatim dovršite instalaciju. Sve bi trebalo ići glatko. Možete se složiti s popravkom xorg.conf, ipak izradite datoteku sigurnosne kopije.

Sada pažnja!Što je najvažnije, u ovom trenutku nemojte se preopteretiti! I idite na datoteku /etc/default/linux-restricted-modules-common, i dodajte u opciju ONEMOGUĆENI_MODULI moduli n.v. I nvidia_novo. Ja sam to napravio ovako

DISABLED_MODULES="nv nvidia_novo"

Ako to ne učinite, sljedeći put kada učitate datoteku (koju ste izbrisali!) /lib/modules/2.6.20-15-generic/volatile/nvidia.koće automatski obnovljena iz paketa nvidia-ograničeni-moduli. I zove se vaša datoteka koju ste kompajlirali kada ste instalirali upravljačke programe /lib/modules/2.6.20-15-generic/kernel/drivers/video/nvidia.ko. I tako, pri pokretanju ksov prva datoteka će biti pronađena. I neće doći do vaše datoteke. A X-ovi se neće moći pokrenuti.

Ponovno se pokrećemo u standardni kernel u punom načinu rada. Ako je sve učinjeno kako treba, X će se pokrenuti. Radujte se, barem još uvijek imate radni sustav.

9. Instaliranje nVidia upravljačkih programa za prilagođeni kernel

Sada ostaje posljednji korak - omogućiti rad grafike u novom kernelu. Ovdje je sve vrlo jednostavno. Pokrećemo se u konzolnom načinu domaćeg kernela. Dajemo naredbu

prijavite se i u prvoj konzoli pokrenite

Idi na katalog /usr/src/nvidia i naredbom počnite postavljati drva za ogrjev

./NVIDIA-Linux-x86-96.43.01-pkg1.run -Ke

opcije " -ke" omogućuju izgradnju samo grafičkog modula nvidia.ko pod trenutnim kernelom (i datoteka će biti smještena u direktorij /lib/modules/current_kernel_name/kernel/drivers). Nema drugih dijeljenih datoteka, poput onih koje bi se smjestile u /usr/lib... kao kod kompajliranja s "-e" opcijom, neće biti kreiran.

Baš kao kod kompajliranja u standardnom kernelu, slažemo se sa stazama pritiskom na Unesi. Dolazimo do zaslona na kojem će biti navedene datoteke koje će se instalirati. Ako postoje sukobljene datoteke na početku ovog popisa " sigurnosna kopija datoteke...", prijeđite na susjednu konzolu i izbrišite (prenesite) ove datoteke.

Nakon uklanjanja sukobljenih datoteka, u prvoj konzoli prekinite instalaciju ( ctrl+c), i pokrenite ga ponovno (s opcijom " -ke"naravno). Nakon dovršetka instalacije, ponovno pokrenite sustav odabirom iz izbornika Grub na puni način rada s vašim kernelom.

X bi trebao početi. Možete se radovati drugi put - imate sustav s prilagođenom jezgrom i radnom grafikom.

U bilo kojem trenutku sada se možete dignuti pod željenim kernelom, a grafika bi trebala raditi posvuda. To je sve.