Construirea și instalarea kernel-urilor Linux personalizate
Reconstrucțiile kernelului nu sunt recomandate și nici acceptate pentru Rocky Linux. Înainte de a încerca să construiți un nucleu personalizat, vă rugăm să luați în considerare următoarele:
- Este disponibilă funcționalitatea de care aveți nevoie instalând un modul kernel de la elrepo ?
- Funcționalitatea de care aveți nevoie este disponibilă ca modul separat de nucleul însuși?
- Rocky Linux și majoritatea celorlalte derivate EL au fost proiectate să funcționeze ca un mediu complet. Înlocuirea componentelor critice poate afecta modul în care acționează sistemul.
- Majoritatea utilizatorilor nu mai trebuie să-și construiască propriul nucleu. Este posibil să aveți nevoie pur și simplu de un modul/driver de kernel sau poate să vă construiți propriul modul de kernel (kmod/dkms)
Ca ultim avertisment: dacă rupeți nucleul, sunteți responsabil pentru remedierea problemelor rezultate din sistemul dumneavoastră.
Nucleul
Cel mai adesea, când oamenii spun Linux , de obicei se referă la o „ distribuție Linux ” – de exemplu, Rocky Linux și Debian sunt tipuri de distribuție Linux. O distribuție cuprinde tot ceea ce este necesar pentru ca Linux să existe ca sistem de operare funcțional. Distribuțiile folosesc cod din diferite proiecte open source care sunt independente de Linux.
Linux este nucleul. Nucleul se află literalmente în centrul problemei [sistemului de operare].
Singurul lucru mai fundamental decât nucleul este hardware-ul sistemului în sine. Deși nucleul este o mică parte a unei distribuții Linux complete, este de departe cel mai critic element. Dacă nucleul eșuează sau se blochează, restul sistemului merge cu el.
Codul sursă al nucleului
Distribuția Rocky Linux are codul sursă pentru versiunea specifică de kernel pe care o acceptă, disponibil într-o formă sau alta. Acestea ar putea fi sub forma unui binar compilat ( *.src.rpm
), a unui RPM sursă ( *.srpm
) sau altele asemenea.
Dacă trebuie să descărcați o versiune diferită (posibil mai nouă) decât cea oferită de distribuția dvs. specifică Rocky Linux, primul loc pentru a căuta codul sursă este pe site-ul web oficial al nucleului:
Acest site menține o listă de site-uri web care reflectă sursa kernel-ului, precum și o mulțime de alte software-uri open source, distribuții și utilitare de uz general.
Lista oglinzilor este menținută la:
Sfat
Majoritatea descărcărilor, configurării și compilării nucleului Linux efectuate în următoarele secțiuni pot/ar trebui să fie efectuate ca utilizator neprivilegiat. Cu toate acestea, pașii finali care necesită instalarea efectivă sau modificarea fișierelor de sistem și a fișierelor binare trebuie să fie efectuate cu privilegii ridicate.
Suntem capabili să facem cea mai mare parte a muncii ca utilizator neprivilegiat, deoarece vom folosi o opțiune specială de construire a nucleului, care ne permite să specificăm un director de lucru sau de ieșire personalizat. Mai exact, vom folosi O=~/build/kernel
opțiunea pentru toate invocările aplicabile de make.
Unde ~/build/kernel
este echivalent cu /home/$USER/build/kernel
sau$HOME/build/kernel
Versiunile kernelului și convențiile de denumire
Lista de site-uri web a nucleelor disponibile va conține foldere pentru v1.0, v2.5, v2.6, v3.0, v3.x, v4.x, v5.x, v6.x și așa mai departe. Înainte de a vă urma înclinația naturală de a obține cea mai recentă versiune, asigurați-vă că înțelegeți cum funcționează sistemul de versiune a nucleului Linux.
Convenția actuală este de a numi și numerota noile versiuni majore de kernel ca „Linux 5.x” (numite și nuclee vanilla sau mainline). Astfel, prima din această serie va fi versiunea Linux 5.0 (la fel ca 5.0.0), următoarea va fi versiunea Linux 5.1 (la fel ca 5.1.0), urmată de versiunea Linux 5.2 și așa mai departe.
Orice modificări minore sau actualizări în cadrul fiecărei versiuni de lansare majoră vor fi reflectate prin incremente până la a treia cifră. Acestea sunt denumite în mod obișnuit eliberări punctuale stabile. Astfel, următoarea lansare punct stabilă pentru nucleul din seria 5.0.0 va fi versiunea Linux 5.0.1, urmată de versiunea 5.0.2 și așa mai departe. Un alt mod de a afirma acest lucru este de a spune, de exemplu, că versiunea Linux 5.0.4 este a patra versiune stabilă bazată pe seria Linux 5.0.0.
Instalarea instrumentelor și bibliotecilor necesare
O sursă obișnuită de eșec întâlnită în timpul procesului de construire a nucleului poate fi cauzată de lipsa tuturor software-ului necesar pentru compilarea și construirea liniei principale de kernel Linux. Instrumentele și bibliotecile lipsă pot fi instalate folosind managerul de pachete DNF pe o distribuție Rocky Linux. Ne vom ocupa de asta în această secțiune.
- Pe o distribuție Rocky Linux, puteți obține rapid instalate majoritatea instrumentelor de dezvoltare necesare executând această comandă:
sudo dnf -y groupinstall 'C Development Tools and Libraries'
Dacă obțineți „Modulul sau grupul „Unelte și biblioteci de dezvoltare C” nu este disponibil.” eroare comanda de mai jos este echivalentă cu cea de mai sus:
sudo dnf -y groupinstall 'Development Tools'
- Unele alte biblioteci, fișiere antet și aplicații pot fi, de asemenea, obținute prin instalarea următoarelor pachete. Tip:
sudo dnf -y install ncurses-devel openssl-devel elfutils-libelf-devel python3
- În continuare, avem nevoie de alte utilități disponibile numai în unele depozite terță parte acceptate. Unul dintre astfel de depozite este depozitul Powertools. Să activăm acel repo pe sistemul nostru Rocky. Tip:
sudo dnf config-manager --set-enabled powertools
- În cele din urmă, să instalăm unul dintre pachetele necesare din depozitul Powertool. Tip:
sudo dnf -y install dwarves
Asta este tot pentru pachetele de precondiții necesare pentru construirea reală a Kernel-ului!
Descărcarea și despachetarea kernelului Linux
Versiunea nucleului pe care o vom construi în următoarea secțiune este versiunea 6.5.7 , care este disponibilă la:
www.kernel.org/pub/linux/kernel/v6.x/linux-6.5.7.tar.xz
Să începem procesul.
- Mai întâi, descărcați sursa kernelului în directorul de lucru curent folosind următoarea
curl
comandă. Tip:curl -L -o linux-6.5.7.tar.xz \ https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.5.7.tar.xz
- Sursa kernel-ului pe care o veți descărca de pe Internet este un fișier care a fost comprimat și tarnat. Prin urmare, trebuie să decomprimați și să detașați fișierul sursă pentru a utiliza sursa.Asigurați-vă că vă aflați în directorul în care descărcați tarball-ul Kernel. Utilizați comanda tar pentru a despacheta și decomprima fișierul, rulând:
tar xvJf linux-6.*.tar.xz
Construirea Kernel-ului
În această secțiune, vom revizui procesul de configurare și construire a unui nucleu. Acest lucru este în contrast cu sistemele de operare bazate pe macOS sau Windows, care vin preconfigurate și, prin urmare, conțin suport pentru multe funcții pe care le doriți sau nu.
Filosofia de proiectare Linux permite individului să decidă asupra părților importante ale nucleului. Acest design individualizat are avantajul important de a vă permite să reduceți lista de caracteristici, astfel încât Linux să poată rula cât mai eficient posibil.
Acesta este, de asemenea, unul dintre motivele pentru care este posibil să personalizați Linux pentru a rula în diverse configurații hardware, de la sisteme low-end, la sisteme încorporate, la sisteme high-end.
Sunt necesari doi pași principali în construirea unui nucleu:
- configurarea
- compilarea
Primul pas în construirea nucleului este configurarea caracteristicilor acestuia. De obicei, lista de caracteristici dorite se va baza pe orice hardware pe care trebuie să îl suportați. Acest lucru, desigur, înseamnă că veți avea nevoie de o listă cu acel hardware.
Pe un sistem care rulează deja Linux, puteți rula comenzi precum – lspci
și lshw
așa mai departe pentru a vă ajuta să afișați informații detaliate despre configurarea exactă a hardware-ului pe sistemul dumneavoastră. În distribuțiile bazate pe RPM, aceste utilitare sunt furnizate de pachetele pciutils*.rpm
și lshw*.rpm
.
O mai bună înțelegere a ceea ce constituie hardware-ul dvs. de bază vă poate ajuta să determinați mai bine de ce aveți nevoie în kernel-ul personalizat. Sunteți gata să începeți configurarea nucleului.
Igienizarea mediului de construcție
Putem începe configurația reală cu o idee aproximativă despre tipurile de hardware și caracteristici pe care noul nostru nucleu trebuie să le suporte. Dar mai întâi, câteva informații de fundal.
Arborele sursă al nucleului Linux conține mai multe fișiere numite Makefile (un makefile este pur și simplu un fișier text cu directive și, de asemenea, descrie relațiile dintre fișierele dintr-un program). Aceste fișiere make ajută la lipirea miilor de alte fișiere care alcătuiesc sursa kernel-ului. Ceea ce este mai important pentru noi aici este că makefile-urile conțin și ținte. Țintele sunt comenzile, sau directivele, care sunt executate de programul make.
avertisment: Evitați upgrade-urile inutile ale kernelului
Rețineți că, dacă aveți un sistem care funcționează stabil și bine comportat, există puține motive pentru a actualiza nucleul, cu excepția cazului în care una dintre aceste condiții este valabilă pentru dvs.:
- O securitate sau o remediere a erorilor vă afectează sistemul și trebuie aplicată
- Aveți nevoie de o funcție nouă specifică într-o versiune stabilă
În cazul unei remedieri de securitate, decideți dacă riscul vă afectează cu adevărat – de exemplu, dacă problema de securitate este găsită într-un driver de dispozitiv pe care nu îl utilizați, atunci este posibil să nu existe niciun motiv pentru a face upgrade. În cazul unei lansări de remediere a erorilor, citiți cu atenție notele de lansare și decideți dacă erorile vă afectează cu adevărat – dacă aveți un sistem stabil, actualizarea nucleului cu patch-uri pe care nu le utilizați niciodată poate fi inutilă.
Pe sistemele de producție, nucleul nu ar trebui să fie pur și simplu actualizat doar pentru a avea „cel mai recent nucleu”; ar trebui să aveți un motiv cu adevărat convingător pentru a face upgrade.
Makefile din rădăcina arborelui sursă a nucleului conține ținte specifice care pot fi utilizate în pregătirea mediului de construire a nucleului, configurarea nucleului, compilarea nucleului, instalarea nucleului și așa mai departe. Unele dintre obiective sunt discutate mai detaliat aici:
make mrproper
- Această țintă curăță mediul de construcție a oricăror fișiere învechite și dependențe care ar fi putut fi rămase dintr-o construcție anterioară a nucleului. Toate configurațiile anterioare ale nucleului vor fi curățate (șterse) din mediul de construcție.
make clean
- Această țintă nu face o treabă la fel de minuțioasă ca ținta mrproper. Acesta șterge doar majoritatea fișierelor generate. Nu șterge fișierul de configurare a kernelului (.config).
make menuconfig
- Această țintă invocă o interfață de editor bazată pe text cu meniuri, liste de opțiuni și casete de dialog bazate pe text pentru configurarea nucleului.
make xconfig
- Acest instrument/țintă de configurare a nucleului bazat pe GUI se bazează pe bibliotecile de dezvoltare grafică Qt. Aplicațiile bazate pe KDE/Plasma folosesc aceste biblioteci.
make gconfig
- Acesta este, de asemenea, un instrument/țintă de configurare a nucleului bazat pe GUI, dar se bazează pe setul de instrumente GTK+. Acest set de instrumente GTK+ este utilizat intens în lumea desktop-ului GNOME.
make olddefconfig
- Această țintă utilizează fișierul .config existent în directorul de lucru curent, actualizează dependențele și setează automat simboluri noi la valorile lor implicite.
make help
- Această țintă vă va arăta toate țintele posibile și va servi ca un sistem de ajutor online rapid.
Vom folosi doar una dintre ținte pentru a configura nucleul în această secțiune. În special, vom folosi comanda make menuconfig. Editorul de configurare a nucleului menuconfig este un utilitar de configurare simplu și popular, bazat pe text, care constă din meniuri, liste de butoane radio și casete de dialog.
Are o interfață simplă și curată, care poate fi navigată cu ușurință cu tastatura și este aproape intuitiv de utilizat.
Trebuie să schimbăm ( cd
) în directorul sursă al nucleului, după care putem începe configurarea nucleului. Dar înainte de a începe configurarea propriu-zisă a nucleului, ar trebui să curățați (pregătiți) mediul de construire a nucleului folosind comanda make mrproper:
cd linux-6.*
make O=~/build/kernel mrproper
Configurația kernelului
În continuare, vom începe configurarea unui nucleu din seria Linux 6.*. Pentru a explora unele din interiorul acestui proces, vom activa suportul unei caracteristici specifice despre care vom pretinde că este o caracteristică NECESARĂ pe sistem. Odată ce ați înțeles cum funcționează acest lucru, puteți aplica aceeași procedură pentru a adăuga suport pentru orice funcție nouă de kernel dorită. Mai exact, vom activa suportul pentru sistemul de fișiere NTFS în nucleul nostru personalizat.
Cele mai multe distribuții Linux moderne sunt livrate cu un fișier de configurare a nucleului pentru nucleul care rulează, disponibil pe sistemul de fișiere local ca fișier comprimat sau obișnuit. Pe exemplul nostru de sistem Rocky, acest fișier se află în /boot
director și este de obicei numit ceva de genul config-*
.
Fișierul de configurare conține o listă a opțiunilor și caracteristicilor care au fost activate pentru nucleul specific pe care îl reprezintă. Un fișier de configurare similar cu acesta este ceea ce ne propunem să creăm prin procesul de configurare a nucleului. Singura diferență între fișierul pe care îl vom crea și cel gata făcut este că vom adăuga personalizări minore suplimentare la al nostru.
Sfat
Utilizarea unui fișier de configurare preexistent cunoscut ca cadru pentru crearea propriului fișier personalizat ne ajută să ne asigurăm că nu pierdem prea mult timp duplicând eforturile pe care alți oameni le-au depus deja pentru a găsi ce funcționează și ce nu funcționează!
Următorii pași acoperă modul de configurare a nucleului. Vom folosi un utilitar de configurare a nucleului bazat pe text, care vă va permite să urmăriți în terminalul dvs. indiferent dacă utilizați un mediu desktop GUI sau nu.
- Pentru a începe, vom copia și redenumi fișierul de configurare preexistent din
/boot
director în mediul nostru de construire a nucleului:cp /boot/config-`uname -r` ~/build/kernel/.config
Folosim
uname -r
aici pentru a ne ajuta să obținem fișierul de configurare pentru nucleul care rulează. Comandauname -r
imprimă lansarea nucleului care rulează. Folosirea acestuia ne ajută să ne asigurăm că obținem exact versiunea pe care o dorim, doar în cazul în care sunt prezente alte versiuni.Nota
Editorul de configurare a nucleului Linux începe să caute în mod explicit și generează un fișier numit
.config
(pronunțat „configurație punct”) la rădăcina arborelui sursă a nucleului. Acest fișier este ascuns. - Lansați utilitarul de configurare a nucleului grafic:
make O=~/build/kernel menuconfig
Va apărea un ecran similar cu acesta:
- Ecranul de configurare a nucleului care apare este împărțit în aproximativ trei zone. Partea de sus prezintă informații utile, comenzi rapide de la tastatură și legende pentru a vă ajuta să navigați în aplicație. Corpul principal al ecranului arată o listă extinsă, structurată în arbore, a opțiunilor generale configurabile ale nucleului. Puteți detalia în continuare elementele cu săgeți în părinte pentru a vizualiza și/sau configura elementele submeniului (sau secundare). În cele din urmă, partea de jos a ecranului afișează acțiunile/opțiunile pe care utilizatorul le poate alege.
- În continuare, vom adăuga suport pentru NTFS în nucleul nostru personalizat în scopuri demonstrative.În ecranul principal de configurare, utilizați tastele săgeți pentru a naviga și a evidenția elementul Sisteme de fișiere. Cu Sisteme de fișiere selectate, apăsați Enter pentru a vizualiza submeniul sau elementele secundare pentru Sisteme de fișiere.
În secțiunea Sisteme de fișiere, utilizați tastele săgeți pentru a naviga la Sisteme de fișiere DOS/FAT/NT. Apăsați enter pentru a vedea elementele secundare pentru sistemele de fișiere DOS/FAT/NT.
- În secțiunea Sisteme de fișiere DOS/FAT/NT, navigați la suport pentru sistemul de fișiere NTFS.Tastați M(majuscule) pentru a permite modulelor să accepte sistemul de fișiere NTFS.
Utilizați tastele săgeți pentru a naviga în jos la suport pentru depanare NTFS (NOU) și apoi apăsați y pentru a-l include.
Utilizați tastele săgeți pentru a naviga în jos la suport de scriere NTFS și apoi apăsați Ypentru a-l include. Când ați terminat, litera
M
sau simbolul asterisc (*
) ar trebui să apară lângă fiecare opțiune, ca cele prezentate aici:
-
Sfat
Pentru fiecare dintre opțiunile configurabile, în utilitarul de configurare a nucleului, parantezele unghiulare goale, <>, indică faptul că caracteristica în cauză este dezactivată. Litera
M
din paranteze unghiulare,, indică faptul că caracteristica urmează să fie compilată ca modul.Și simbolul asterisc din paranteze unghiulare, <*>, indică faptul că suportul pentru caracteristică va fi integrat direct în nucleu. De obicei, puteți comuta printre toate opțiunile posibile folosind bara de spațiu de pe tastatură.
- Navigați înapoi la ecranul părinte Sisteme de fișiere apăsând tasta esc de două ori de pe tastatură în ecranul Sisteme de fișiere DOS/FAT/NT. Reveniți la ecranul principal de configurare a nucleului apăsând din nou esc de două ori pe tastatură.
- În cele din urmă, salvați modificările aduse fișierului .config în rădăcina arborelui sursă a nucleului și părăsiți aplicația de configurare a nucleului după salvarea fișierului apăsând din nou esc de două ori pe tastatură.
- Va apărea o casetă de dialog care vă solicită să salvați noua configurație. Asigurați-vă că este selectat Da și apoi apăsați Enter.
- După ce utilitarul de configurare a nucleului iese, veți fi aruncat înapoi în shell-ul dvs. în arborele sursă a nucleului. Ești aproape gata să-ți construiești nucleul!
- Trebuie să realizăm câteva personalizări suplimentare în distribuția noastră Rocky. Tip:
sed -ri '/CONFIG_SYSTEM_TRUSTED_KEYS/s/=.+/=""/g' ~/build/kernel/.config
Sfat
Pentru a vedea rezultatele unora dintre modificările pe care le-ați făcut folosind instrumentul menuconfig, utilizați utilitarul grep pentru a vizualiza fișierul .config pe care l-ați salvat direct. De exemplu, pentru a vedea efectul suportului sistemului de fișiere NTFS pe care l-am activat anterior, tastați următoarele:
$ grep NTFS ~/build/kernel/.config CONFIG_NTFS_FS=m CONFIG_NTFS_DEBUG=y CONFIG_NTFS_RW=y
O notă rapidă despre modulele Kernel
Suportul pentru module încărcabile este o caracteristică a nucleului Linux care permite încărcarea (sau eliminarea) dinamică a modulelor nucleului.
Modulele kernel sunt bucăți de cod compilat care pot fi inserate dinamic în nucleul care rulează, mai degrabă decât să fie încorporate permanent în nucleu. Funcțiile care nu sunt utilizate adesea pot fi astfel activate, dar nu vor ocupa nicio cameră în memorie atunci când nu sunt utilizate.
Din fericire, nucleul Linux poate determina automat ce să încarce și când. Desigur, nu toate caracteristicile sunt eligibile pentru a fi compilate ca modul. Nucleul trebuie să cunoască câteva lucruri înainte de a putea încărca și descărca module, cum ar fi cum să acceseze hard disk-ul și să analizeze sistemul de fișiere în care sunt stocate modulele care pot fi încărcate. Unele module kernel sunt, de asemenea, denumite în mod obișnuit drivere.
Compilarea Kernel-ului
În secțiunea precedentă, am parcurs procesul de creare a unui fișier de configurare pentru nucleul personalizat pe care dorim să-l construim. În această secțiune, vom realiza construirea propriu-zisă a nucleului. Dar înainte de a face acest lucru, vom adăuga o personalizare mai simplă întregului proces.
Personalizarea finală va fi adăugarea unei informații suplimentare utilizate în numele final al nucleului nostru. Acest lucru ne va ajuta să putem diferenția acest nucleu de orice alt nucleu cu același număr de versiune. Vom adăuga eticheta „personalizat” la informațiile despre versiunea kernelului. Acest lucru se poate face prin editarea Makefile-ului principal și adăugând eticheta pe care o dorim la variabila EXTRAVERSION.
Etapa de compilare a procesului de construire a nucleului este de departe cea mai ușoară, dar necesită și cel mai mult timp. Tot ceea ce este necesar în acest moment este pur și simplu să executați comanda make, care va genera apoi automat și se va ocupa de orice probleme de dependență, va compila nucleul în sine și va compila toate caracteristicile (sau driverele) care au fost activate ca module încărcate.
Din cauza cantității de cod care trebuie compilat, fiți pregătit să așteptați câteva minute, cel puțin, în funcție de puterea de procesare a sistemului dumneavoastră. Să cercetăm pașii specifici necesari pentru compilarea noului tău nucleu.
- Mai întâi, vom adăuga o piesă suplimentară la șirul de identificare pentru nucleul pe care urmează să-l construim. În timp ce suntem încă în rădăcina arborelui sursă a nucleului, vom folosi utilitarul
sed
pentru a edita Makefile-ul. Variabila pe care vrem să o schimbăm este aproape de partea de sus a fișierului. Vrem să schimbăm linia din fișier care arată astfel:EXTRAVERSION =
La aceasta:
EXTRAVERSION = -custom
Utilizați următoarea
sed
comandă pentru a efectua modificarea. Tip:sed -i 's/^EXTRAVERSION.*/EXTRAVERSION = -custom/' Makefile
Desigur, puteți utiliza și orice editor de text cu care vă simțiți confortabil pentru a face schimbarea. Nu uitați să salvați modificările în fișier!
- Transmiteți ținta kernelversion la comanda make pentru a vedea versiunea completă a nucleului pe care tocmai ați personalizat-o:
make O=~/build/kernel kernelversion
Sfat
Puteți profita de toată puterea de procesare suplimentară (CPU-uri, nuclee și așa mai departe) pe majoritatea sistemelor moderne și puteți accelera foarte mult operațiunile care necesită mult CPU, cum ar fi compilarea nucleului. Pentru a face acest lucru, puteți trece un parametru la comanda make care specifică numărul de joburi de rulat simultan. Numărul specificat de joburi sunt apoi distribuite și executate simultan pe fiecare nucleu CPU. Sintaxa pentru comandă este:
```bash make -j N ``` where N is the number of jobs to run simultaneously. For example, if you have a octa (8) core–capable CPU, you can type: ```bash make -j 8 ```
- Singura comandă care este necesară aici pentru a compila nucleul este comanda make:
$ make O=~/build/kernel make[1]: Entering directory '/home/super/build/kernel' SYNC include/config/auto.conf.cmd GEN Makefile HOSTCC scripts/kconfig/conf.o HOSTLD scripts/kconfig/conf GEN Makefile ...<OUTPUT TRUNCATED>… LD [M] sound/usb/usx2y/snd-usb-usx2y.ko LD [M] sound/x86/snd-hdmi-lpe-audio.ko LD [M] sound/xen/snd_xen_front.ko LD [M] virt/lib/irqbypass.ko make[1]: Leaving directory '/home/super/build/kernel'
- Produsul final al acestei comenzi (adică nucleul) este destul de bine și așteaptă în cale:
~/build/kernel/arch/x86/boot/bzImage
- Trebuie să instalăm modulele deoarece am compilat porțiuni din kernel ca module (de exemplu, modulul NTFS). Introduceți următoarele:
sudo make O=~/build/kernel modules_install
Pe sistemul nostru Rocky, această comandă va instala toate modulele nucleului compilate în
/lib/modules/<new_kernel-version>
director. Această cale se va traduce/lib/modules/6.5.7-custom/
în acest exemplu. Aceasta este calea de pe care nucleul va încărca toate modulele încărcate, după cum este necesar.Sfat
Amprenta (dimensiunea) modulelor nucleului instalate prin intermediul
make modules_install
poate deveni destul de semnificativă, deoarece modulele includ simboluri de depanare. Ca rezultat, puteți ajunge cu ușurință la un/lib/modules/6.5.7-custom/
director care este aproape de 5 GB!Pentru acest ghid evităm această dimensiune mare prin includerea opțiunii în invocarea
INSTALL_MOD_STRIP=1
noastră .make modules_install
Puteți reduce dimensiunea totală cu ordine de mărime (De exemplu, mai puțin de 200 MB!!) prin eliminarea acestor simboluri de depanare.Acest lucru se poate face prin includerea
INSTALL_MOD_STRIP=1
opțiunii lamake modules_install
comandă.
Instalarea Kernel-ului
Presupunând că aveți un computer și lucrați din ~/build/kernel/
director, nucleul compilat care a fost creat în exercițiul anterior va fi localizat în această cale – <kernel-build-dir>/arch/x86/boot/bzImage
sau, pentru a fi mai precis, în exemplul nostru ~/build/kernel/arch/x86/boot/bzImage
.
Fișierul de hartă corespunzător pentru aceasta va fi localizat la ~/build/kernel/System.map
. Veți avea nevoie de ambele fișiere pentru faza de instalare.
Fișierul System.map
este util atunci când nucleul se comportă greșit și generează mesaje „Oops”. Un „Oops” este generat pentru unele erori de kernel din cauza erorilor nucleului sau a hardware-ului defect.
Această eroare este asemănătoare cu Ecranul albastru al morții (BSOD) din Microsoft Windows. Aceste mesaje includ multe detalii despre starea curentă a sistemului, inclusiv câteva numere hexazecimale.
System.map
permite Linux să transforme acele numere hexazecimale în nume care pot fi citite, facilitând depanarea. Deși acest lucru este în principal în beneficiul dezvoltatorilor, poate fi util atunci când raportați o problemă.
Să parcurgem pașii necesari pentru a instala noua imagine de kernel.
- În timp ce vă aflați în rădăcina directorului de compilare a nucleului, copiați și redenumiți fișierul
bzImage
în/boot
directorul:sudo cp ~/build/kernel/arch/x86/boot/bzImage \ /boot/vmlinuz-<kernel-version>
Aici
<kernel-version>
este numărul versiunii nucleului. Numele de fișier pentru exemplul de kernel pe care îl folosim în acest ghid estevmlinuz-6.5.7-custom
. Deci, iată comanda exactă pentru acest exemplu:sudo cp ~/build/kernel/arch/x86/boot/bzImage \ /boot/vmlinuz-6.5.7-custom
Nota
Decizia de a numi imaginea nucleului
vmlinuz-6.5.7-custom
este oarecum arbitrară. Este convenabil, deoarece imaginile nucleului sunt denumite în mod obișnuit vmlinuz, iar sufixul numărului de versiune este util atunci când aveți mai multe nuclee disponibile sau nuclee care oferă o funcționalitate specifică (De exempluvmlinuz-6.50.0-ws
). - Acum că imaginea nucleului este la locul său, copiați și redenumiți
System.map
fișierul corespunzător în/boot
director folosind aceeași convenție de denumire:sudo cp -v ~/build/kernel/System.map \ /boot/System.map-6.5.7-custom
- Cu nucleul pe loc, cu
System.map
fișierul pe loc și cu modulele pe loc, acum suntem pregătiți pentru pasul final. Sintaxa pentru comanda necesară este:kernel-install add <kernel-version> <kernel-image>
Aici
<kernel-version>
este numărul versiunii (și numele) nucleului. Și<kernel-image>
este calea către noua imagine a nucleului compilată.Pentru exemplul nostru, tastați:
sudo kernel-install \ add 6.5.7-custom /boot/vmlinuz-6.5.7-custom
Comanda kernel-install
este un script shell ingenios. Este posibil să nu fie disponibil în fiecare distribuție Linux, dar este disponibil în distribuțiile mai noi Fedora, RHEL, CentOS. Acest instrument automatizează multe dintre lucrurile manuale finale pe care trebuie să le facem de obicei pentru a configura sistemul pentru a porni noul kernel pe care tocmai l-am construit.
În special, instrumentul face următoarele:
- Acesta creează imaginea inițială a sistemului de fișiere RAM adecvată (imaginea initramfs – adică fișierul
/boot/initramfs-<kernel-version>.img
). Pentru a face acest lucru manual pe sistemele în carekernel-install
nu este disponibil, utilizațimkinitramfs
comanda. - Rulează
depmod
comanda (care creează o listă de dependențe ale modulelor). - Actualizează configurația bootloader-ului.
Pentru sistemele care rulează versiunile mai noi de GRUB2, fișierul va fi /boot/grub2/grub.cfg
. Pentru sistemele bazate pe EFI /boot/efi/<distro>/fedora/grub.cfg
este, de asemenea, actualizat.
Și pentru sistemele care rulează versiunile vechi ale GRUB, acesta va fi fișierul /boot/grub/grub.conf
sau /boot/grub/menu.lst
. Și pentru distribuțiile foarte noi care au implementat noua specificație de încărcare de încărcare (BLS), o nouă intrare de încărcare de pornire va fi adăugată în /boot/loader/entries/
director sau în orice director la care este indicat variabila numită blsdir
.
Pe serverul nostru demo Rocky bazat pe EFI care rulează GRUB 2 utilizând BLS, o nouă intrare de pornire este creată în fișierul de încărcare de pornire situat aici:/boot/loader/entries/6fa25ca775f64accb0d3e53f0e4e6e92-6.5.7-custom.conf
$ sudo cat /boot/loader/entries/6fa25ca775f64accb0d3e53f0e4e6e92-6.5.7-custom.conf
title Rocky Linux (6.5.7-custom) 8.5 (Green Obsidian)
version 6.5.7-custom
linux /vmlinuz-6.5.7-custom
initrd /initramfs-6.5.7-custom.img $tuned_initrd
options $kernelopts $tuned_params
id rocky-20220212013135-6.5.7-custom
grub_users $grub_users
grub_arg --unrestricted
grub_class kernel
Nota
Majoritatea distribuțiilor au mai multe grub2-*
utilitare disponibile care pot fi utilizate pentru a efectua diverse sarcini de întreținere GRUB2 și bootloader. De exemplu, puteți utiliza grub2-set-default
comanda pentru a schimba sau a seta nucleul implicit care să fie pornit la pornirea sistemului.
Pornirea kernelului personalizat
Următoarea etapă este testarea nucleului pentru a vă asigura că sistemul poate porni cu el.
- Presupunând că ați făcut totul așa cum v-a prescris medicul și că totul a funcționat exact așa cum a spus medicul, puteți reporni sistemul în siguranță și puteți selecta noul nucleu din meniul încărcător de pornire în timpul pornirii sistemului:
sudo reboot
- După ce sistemul pornește, puteți folosi comanda uname pentru a afla numele nucleului curent:
$ uname -r 6.5.7-custom
- Vă veți aminti că una dintre caracteristicile pe care le-am adăugat noului nostru nucleu este capacitatea de a suporta sistemul de fișiere NTFS. Asigurați-vă că noul nucleu are într-adevăr suport pentru NTFS, afișând informații despre modulul NTFS:
[rockstar ~]$ modinfo ntfs filename: /lib/modules/6.5.7-custom/kernel/fs/ntfs/ntfs.ko license: GPL version: 2.1.32 description: NTFS 1.2/3.x driver - Copyright ….. ...OUTPUT TRUNCATED...