Advanced Pagina 8: Diferență între versiuni
Admin (discuție | contribuții) Fără descriere a modificării |
Admin (discuție | contribuții) Fără descriere a modificării |
||
(Nu s-a afișat o versiune intermediară efectuată de același utilizator) | |||
Linia 21: | Linia 21: | ||
Deci, ca premise, vom descărca sursa kernel-ului Linux și vom instala câteva dependențe care ne vor permite să il compilam. | Deci, ca premise, vom descărca sursa kernel-ului Linux și vom instala câteva dependențe care ne vor permite să il compilam. | ||
===Variante=== | |||
Există in principal 4 "variante" ale Linux, dupa ordinea fluxului de dezvoltare: | Există in principal 4 "variante" ale Linux, dupa ordinea fluxului de dezvoltare: | ||
Linia 32: | Linia 34: | ||
'''Release-uri LTS:''' Ultima lansare stabilă a unui anumit an este menținută pentru încă câțiva ani. Aceasta este, de obicei, o versiune mai veche, dar este menținută în mod activ cu remedieri de securitate. O versiune stabilă a Debian utilizează lansarea LTS a nucleului Linux. | '''Release-uri LTS:''' Ultima lansare stabilă a unui anumit an este menținută pentru încă câțiva ani. Aceasta este, de obicei, o versiune mai veche, dar este menținută în mod activ cu remedieri de securitate. O versiune stabilă a Debian utilizează lansarea LTS a nucleului Linux. | ||
===Pregătirea sistemului=== | |||
Deoarece nucleul Linux este scris în limbajul de programare C, aveți nevoie de cel puțin un compilator C pentru a compila nucleul Linux. Există și alte astfel de dependențe care ar putea fi sau nu prezente pe computer. | Deoarece nucleul Linux este scris în limbajul de programare C, aveți nevoie de cel puțin un compilator C pentru a compila nucleul Linux. Există și alte astfel de dependențe care ar putea fi sau nu prezente pe computer. | ||
Linia 46: | Linia 48: | ||
sudo dnf install binutils ncurses-devel /usr/include/{libelf.h,openssl/pkcs7.h} /usr/bin/{bc,bison,flex,gcc,git,gpg2,gzip,make,openssl,pahole,perl,rsync,tar,xz,zstd} | sudo dnf install binutils ncurses-devel /usr/include/{libelf.h,openssl/pkcs7.h} /usr/bin/{bc,bison,flex,gcc,git,gpg2,gzip,make,openssl,pahole,perl,rsync,tar,xz,zstd} | ||
===Descarcare kernel Linux=== | |||
Mergeți la kernel.org și pe pagină, găsiți prima versiune stabilă. | Mergeți la kernel.org și pe pagină, găsiți prima versiune stabilă. | ||
Linia 114: | Linia 116: | ||
tar -xf linux-*.tar | tar -xf linux-*.tar | ||
Procesul de construcție al | ===Compilare=== | ||
Procesul de construcție al kernel-ului Linux caută un dosar .config. După cum sugerează și numele, este un fișier de configurare care specifică fiecare opțiune de configurare posibilă pentru nucleul Linux. Este necesar să avem unul. | |||
Există două metode de a obține acest dosarul .config pentru nucleul Linux: | Există două metode de a obține acest dosarul .config pentru nucleul Linux: | ||
Linia 197: | Linia 201: | ||
Eșecul de a face acest lucru va duce la un eșec de construcție mai târziu, atunci când se ruleaza build-ul. | Eșecul de a face acest lucru va duce la un eșec de construcție mai târziu, atunci când se ruleaza build-ul. | ||
===Utilizarea unei configurații particularizate=== | |||
Puteți arunca o privire la ieșirea de "make help" pentru a vedea toate opțiunile disponibile, dar ne vom concentra pe trei tinte pentru make: | Puteți arunca o privire la ieșirea de "make help" pentru a vedea toate opțiunile disponibile, dar ne vom concentra pe trei tinte pentru make: | ||
Linia 262: | Linia 266: | ||
distclean: șterge fișiere de patch-uri. | distclean: șterge fișiere de patch-uri. | ||
===Instalare=== | |||
Odată ce nucleul Linux a fost compilat, este timpul să instalați câteva lucruri. | Odată ce nucleul Linux a fost compilat, este timpul să instalați câteva lucruri. | ||
Linia 282: | Linia 286: | ||
[Opțional] Instalarea fișierelor de cap de nucleu Linux | [Opțional] Instalarea fișierelor de cap de nucleu Linux | ||
Dacă intenționați să utilizați acest | Dacă intenționați să utilizați acest kernel cu module în afara termenului, cum ar fi ZFS sau Nvidia DKMS, sau încercați să scrieți propriile module, cel mai probabil veți avea nevoie de fișierele de antet furnizate de kernel, acestea pot fi instalate cu ajutorul headers_install: | ||
sudo make headers_install | sudo make headers_install | ||
Dacă sunteți pe x86_64, puteți sări peste acest pas! | Dacă sunteți pe x86_64, puteți sări peste acest pas! | ||
Linia 327: | Linia 327: | ||
Dacă ai încercat să alergi pe make install, s-ar putea să fi observat că ai primit o eroare. Cum ar fi următorul: | Dacă ai încercat să alergi pe make install, s-ar putea să fi observat că ai primit o eroare. Cum ar fi următorul: | ||
$ sudo make install | $ sudo make install | ||
INSTALL /boot | |||
Cannot find LILO. | Cannot find LILO. | ||
Pentru a instala de fapt nucleul Linux pe Arch Linux, trebuie să copiem manual imaginea kernel Linux. | Pentru a instala de fapt nucleul Linux pe Arch Linux, trebuie să copiem manual imaginea kernel Linux. | ||
Linia 383: | Linia 383: | ||
6.5.5-pratham | 6.5.5-pratham | ||
===Dezinstalare=== | |||
Fie distribuția Linux a expediat nucleul Linux cu versiunea pe care ați compilat-o manual, fie ați compilat un alt nucleu, mai nou și ați observat că ar trebui să dezinstalați nucleul mai vechi pentru a face spațiu pentru cel mai nou. | Fie distribuția Linux a expediat nucleul Linux cu versiunea pe care ați compilat-o manual, fie ați compilat un alt nucleu, mai nou și ați observat că ar trebui să dezinstalați nucleul mai vechi pentru a face spațiu pentru cel mai nou. | ||
Linia 398: | Linia 398: | ||
$ rm -vf /boot/{config,System,vmlinuz}-<kernel_release>-<localversion> | $ rm -vf /boot/{config,System,vmlinuz}-<kernel_release>-<localversion> | ||
===Metoda alternativa ce creeaza pachete de instalare (Ubuntu), poate fi mai elegant.=== | |||
<pre> | <pre> |
Versiunea curentă din 13 noiembrie 2024 09:20
Compilare kernel
S-ar putea să vă interesați să compilați singur nucleul Linux, din mai multe motive. S-ar putea să fie, dar nu limitat la, una dintre următoarele:
-Încercarea unui nucleu mai nou decât ceea ce oferă distribuția Linux
-Construirea unui kernel cu un set diferit de opțiuni de configurare și/sau drivere
-Curiozitatea unui elev :)
Acest ghid vă va arăta cum puteți compila singur nucleul Linux, cu comenzile pe care ar trebui să le rulați, de ce să rulați aceste comenzi și să explicați ce face.
Distribuțiile precum Ubuntu au modalități mai ușoare de a instala kernel-ul. Dar acest tutorial este despre a face lucrurile manual de la codul sursă. Veți avea nevoie de timp, răbdare și experiență bună cu linia de comandă Linux pentru acest tutorial. Este vorba mai mult despre a experimenta lucrurile la prima mână. Cu toate acestea, vă sfătuiesc să încercați această aventură într-un VM sau pe sistemul dvs. de rezervă în loc să o faceți pe sistemul dvs. principal. Pre-requisite-uri
Există două condiții prealabile pentru a construi orice (în context cu software-ul).
-Codul sursă
-Dependențele pentru build
Deci, ca premise, vom descărca sursa kernel-ului Linux și vom instala câteva dependențe care ne vor permite să il compilam.
Variante
Există in principal 4 "variante" ale Linux, dupa ordinea fluxului de dezvoltare:
linux-next: Orice cod care urmează să fie fuzionat în baza de cod Linux este mai întâi îmbinat în linux-next- Arbore. Aceasta este cea mai nouă, dar și cea mai "centr stabilă" stare de nucleu Linux. Majoritatea dezvoltatorilor și testerii de nucleu Linux folosesc acest lucru pentru a rafina calitatea codului pentru ca Linus să tragă, mai târziu.
linux-mainline. Versiunea beta a acestei versiuni se numește o versiune RC (Release Candidate). Odată ce un RC este eliberat, Linus acceptă numai bug-fixes și patch-uri legate de regresie a performanței. Linus continuă să elibereze un kernel RC în fiecare săptămână până când este mulțumit de cod (cu feedback de la utilizatori). linux-rc, urmat de un număr, este adăugat pentru a indica versiunea de lansare RC.
Release-uri stabile: Odată ce Linus simte că ultimul RC a fost stabil, el lansează eliberarea finală, "publică". O eliberare stabilă este menținută pentru încă câteva săptămâni. Iată ce folosesc distribuțiile Linux cu margini sângerânde, cum ar fi Arch Linux și Fedora Linux. Vă recomand să încercați mai întâi acest lucru linux-nextsau orice RC eliberează.
Release-uri LTS: Ultima lansare stabilă a unui anumit an este menținută pentru încă câțiva ani. Aceasta este, de obicei, o versiune mai veche, dar este menținută în mod activ cu remedieri de securitate. O versiune stabilă a Debian utilizează lansarea LTS a nucleului Linux.
Pregătirea sistemului
Deoarece nucleul Linux este scris în limbajul de programare C, aveți nevoie de cel puțin un compilator C pentru a compila nucleul Linux. Există și alte astfel de dependențe care ar putea fi sau nu prezente pe computer.
Acest ghid se va concentra pe compilarea kernel-ului Linux folosind GNU C Compiler (GCC). Dar poate într-un articol viitor (scufundându-mă în sprijinul Rust), voi acoperi folosind compilatorul Clang al LLVM ca alternativă la CCG.
Comanda pentru Debian și derivații săi (Ubuntu):
sudo apt install bc binutils bison dwarves flex gcc git gnupg2 gzip libelf-dev libncurses5-dev libssl-dev make openssl pahole perl-base rsync tar xz-utils
Comanda pentru Fedora și derivatele sale:
sudo dnf install binutils ncurses-devel /usr/include/{libelf.h,openssl/pkcs7.h} /usr/bin/{bc,bison,flex,gcc,git,gpg2,gzip,make,openssl,pahole,perl,rsync,tar,xz,zstd}
Descarcare kernel Linux
Mergeți la kernel.org și pe pagină, găsiți prima versiune stabilă. Puteți descărca marca de marcare făcând clic pe caseta galbenă mare. În timp ce vă bazați, descărcați și fișierul de semnătură PGP care se potrivește. Va fi la îndemână când vom verifica tarball într-un moment ulterior. Are extensia .tar.sign.
Verificarea autenticității tarballului
Cum îți dai seama dacă taball-ul pe care tocmai l-ai descărcat este corupt sau nu? La nivel individual, un .tar corupt vă va irosi doar ceva timp, dar dacă acest lucru se face pentru o organizație, s-ar putea să faca lucrurile mai ușoare pentru un atacator.
Pentru a verifica integritatea tarball-ului, prima data se va folosi unxz (alias pentru xz --decompress) pentru a decomprima .tar.xz in dosar.
unxz --keep linux-*.tar.xz
Odată extrase, vom aduce cheile publice GPG pe care le folosesc Linus Torvalds și Greg KH. Aceste taste sunt folosite pentru a semna tar-ul.
gpg2 --locate-keys torvalds@kernel.org gregkh@kernel.org
Ar trebui să obțineți ieșire care este similară cu ceea ce am primit pe mașina mea:
$ gpg2 --locate-keys torvalds@kernel.org gregkh@kernel.org gpg: /home/pratham/.gnupg/trustdb.gpg: trustdb created gpg: key 38DBBDC86092693E: public key "Greg Kroah-Hartman <gregkh@kernel.org>" imported gpg: Total number processed: 1 gpg: imported: 1 gpg: key 79BE3E4300411886: public key "Linus Torvalds <torvalds@kernel.org>" imported gpg: Total number processed: 1 gpg: imported: 1 pub rsa4096 2011-09-23 [SC] 647F28654894E3BD457199BE38DBBDC86092693E uid [ unknown] Greg Kroah-Hartman <gregkh@kernel.org> sub rsa4096 2011-09-23 [E] pub rsa2048 2011-09-20 [SC] ABAF11C65A2970B130ABE3C479BE3E4300411886 uid [ unknown] Linus Torvalds <torvalds@kernel.org> sub rsa2048 2011-09-20 [E]
Odată ce cheile lui Greg și Linus sunt importate, integritatea gudronului poate fi verificată folosind --verify; cum ar fi:
gpg2 --verify linux-*.tar.sign
Dacă verificarea a avut succes, ar trebui să obțineți o producție similară cu următoarea:
$ gpg2 --verify linux-*.tar.sign gpg: assuming signed data in 'linux-6.5.5.tar' gpg: Signature made Saturday 23 September 2023 02:46:13 PM IST gpg: using RSA key 647F28654894E3BD457199BE38DBBDC86092693E gpg: Good signature from "Greg Kroah-Hartman <gregkh@kernel.org>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 647F 2865 4894 E3BD 4571 99BE 38DB BDC8 6092 693E
Nota: Vă rugăm să nu continuați decât dacă vedeți un mesaj care spune gpg: Good signature!
Puteți ignora cu siguranță avertismentul care spune: AVERTISMENT: Această cheie nu este certificată cu o semnătură de încredere! Nu există niciun indiciu că semnătura aparține proprietarului.
Am adus cheile de la e-mailurile lui Linus şi Greg şi nu am nevoie să ne facem griji pentru acest avertisment.
Extragerea tarball-ului
Dacă sunteți aici, înseamnă că verificarea integrității dvs. a fost finalizată cu succes. Acum, atunci, este timpul să extragem sursa kernel-ului Linux din ea.
tar -xf linux-*.tar
Compilare
Procesul de construcție al kernel-ului Linux caută un dosar .config. După cum sugerează și numele, este un fișier de configurare care specifică fiecare opțiune de configurare posibilă pentru nucleul Linux. Este necesar să avem unul.
Există două metode de a obține acest dosarul .config pentru nucleul Linux:
-Utilizarea configurației distribuției Linux ca bază (recomandat)
-Folosind o configurație implicită, generică
Există o a treia metodă în care puteți configura fiecare opțiune, de la zero, cu 12.000+ opțiuni. Acest lucru nu este recomandat deoarece este nevoie de mult timp pentru a configura totul cu mâna și, de asemenea, suficient know-how pentru a ști ce să activeze și să dezactivați.
Utilizarea configurației furnizate de distribuție
Utilizarea configurației furnizate de distribuția Linux este un pariu sigur. Dacă urmați acest ghid doar pentru a încerca un nou nucleu decât ceea ce oferă distribuția dvs., aceasta este metoda recomandată.
Fișierul de configurare al distribuției Linux pentru kernel va fi în oricare dintre cele două locuri:
-Cele mai multe distribuții Linux, cum ar fi Debian și Fedora, și derivatele lor o vor stoca ca /boot/config-$(uname -r).
-Unele distribuții Linux, cum ar fi Arch Linux, îl au integrat în nucleul Linux în sine. Prin urmare, va fi disponibil la /proc/config.gz.
Dacă aveți ambele destinații disponibile, preferați să utilizați /proc/config.gz așa cum este pe un sistem de fișiere numai citit și, prin urmare, nemodonat.
Intră în directorul care conține tarballul extras.
cd linux-*/
Apoi, copiați fișierul de configurare al distribuției Linux:
## Debian and Fedora's derivatives: $ cp /boot/config-"$(uname -r)" .config
## Arch Linux and its derivatives: $ zcat /proc/config.gz > .config
Actualizarea configurației
Odată ce acest lucru este făcut, este timpul să "actualizați" fișierul de configurare. Vezi tu, există o mare probabilitate ca configurația pe care o oferă distribuția dvs. să fie mai veche decât nucleul Linux pe care îl construiți.
Acest lucru se aplică distribuțiilor Linux cu update continuu, cum ar fi Arch Linux și Fedora. Niciuna dintre ele nu a lansat o actualizare doar pentru că există o nouă versiune disponibilă. Ei fac niște QA, care este obligat să ia timp. Și, prin urmare, chiar și cel mai recent sâmbure oferit de distribuția dvs. va fi câteva lansări minore în urmă, în comparație cu ceea ce veți obține de la kernel.org.
Pentru a actualiza un existent .config, comanda make este folosită cu ținta olddefconfig.
Acest lucru va lua "fiserul vechi de configurare" (care este salvat în prezent ca .config ca o copie literală a configurației distribuției dvs.) și verificați pentru orice opțiuni noi de configurare care au fost adăugate la baza de cod Linux de atunci. Dacă se găsesc opțiuni noi, neconfigurate, valoarea de configurare implicită pentru opțiunea respectivă este utilizată și dosarul .config este actualizat.
Fisierul .config este redenumit în .config.old pe măsură ce backup-ul și noile modificări sunt scrise la .config.
make olddefconfig
$ file .config .config: Linux make config build file, ASCII text $ make olddefconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/confdata.o HOSTCC scripts/kconfig/expr.o LEX scripts/kconfig/lexer.lex.c YACC scripts/kconfig/parser.tab.[ch] HOSTCC scripts/kconfig/lexer.lex.o HOSTCC scripts/kconfig/menu.o HOSTCC scripts/kconfig/parser.tab.o HOSTCC scripts/kconfig/preprocess.o HOSTCC scripts/kconfig/symbol.o HOSTCC scripts/kconfig/util.o HOSTLD scripts/kconfig/conf .config:8593:warning: symbol value 'm' invalid for USB_FOTG210_HCD .config:8859:warning: symbol value 'm' invalid for USB_FOTG210_UDC # # configuration written to .config #
Pentru utilizatorii Debian și derivații săi
Debian și derivatele sale folosesc un certificat pentru a semna modulele de kernel. Acest certificat, implicit, este absent pe computer.
Vă recomand dezactivarea opțiunii care permite semnarea modulului. Se poate realiza cu următoarele comenzi:
./scripts/config --file .config --disable MODULE_SIG
Eșecul de a face acest lucru va duce la un eșec de construcție mai târziu, atunci când se ruleaza build-ul.
Utilizarea unei configurații particularizate
Puteți arunca o privire la ieșirea de "make help" pentru a vedea toate opțiunile disponibile, dar ne vom concentra pe trei tinte pentru make:
defconfig: Configurația implicită. allmodconfig: În funcție de starea actuală a sistemului, construiți elemente ca module încărcabile (în loc de încorporat) atunci când este posibil. tinyconfig: Un mic kernel Linux.
La tinyconfig, timpii de construcție sunt în mod natural mai rapizi.
Modificarea configurației
Ai creat un dosar .config folosind o metodă de mai sus. Fie ai folosit-o pe cea pe care a folosit-o și la distribuirea Linux-ului, fie ai creat-o folosind defconfig.
Oricum ar fi, căutați cum să o modificați. Cel mai fiabil mod de a face acest lucru este prin intermediul menuconfig sau nconfig.
Ambele ținte fac același lucru, dar au o interfață diferită, nconfig este un pic mai intuitiv în căutarea opțiunilor.
$ make menuconfig HOSTCC scripts/kconfig/mconf.o HOSTCC scripts/kconfig/lxdialog/checklist.o HOSTCC scripts/kconfig/lxdialog/inputbox.o HOSTCC scripts/kconfig/lxdialog/menubox.o HOSTCC scripts/kconfig/lxdialog/textbox.o HOSTCC scripts/kconfig/lxdialog/util.o HOSTCC scripts/kconfig/lxdialog/yesno.o HOSTLD scripts/kconfig/mconf
Eticheta kernel-ului nostru poate fi configurată utilizând următoarea comandă:
./scripts/config --file .config --set-str LOCALVERSION "-pratham"
Setează CONFIG_LOCALVERSION în dosarul .config.
Acum, să construim kernel-ul în sine.
make -j$(nproc)
Acest lucru este suficient pentru 99% dintre utilizatori.
În funcție de arhitectura computerului dvs., numele imaginii de kernel Linux care se construiește (care este stocată în /boot) va varia.
Pentru x86_64, numele imaginii nucleului Linux este bzImage. Deci, dacă doriți să construiți doar nucleul Linux în scopul de a-l porni, puteți specifica bzImage ca ţintă, aşa:
## For x86_64 $ make bzImage ## x86_64 $ make -s image_name arch/x86/boot/bzImage ## AArch64 $ make -s image_name arch/arm64/boot/Image.gz ## RISC-V $ make -s image_name arch/riscv/boot/Image.gz
Și acum, pentru a construi doar imaginea de kernel Linux, puteți face acest lucru:
make $(make -s image_name | awk -F '/' '{print $4}')
Nota: În cazul în care doriți să curățați artefactele comenzii make, puteți utiliza oricare dintre următoarele ținte pentru a atinge ceea ce doriți:
clean: Îndepărtați aproape orice, cu excepția .config. mrproper: șterge si .config. distclean: șterge fișiere de patch-uri.
Instalare
Odată ce nucleul Linux a fost compilat, este timpul să instalați câteva lucruri.
Există părți ale nucleului Linux care nu sunt necesare în timpul pornirii. Aceste piese sunt construite ca module loadabile (adică încărcate și descărcate atunci când este necesar).
Să instalăm aceste module. Acest lucru se poate realiza cu make modules_install. Utilizarea de către sudo este necesara, deoarece modulele vor fi instalate în /lib/modules/<kernel_release>-<localversion>Și că directorul este deținut de root, nu şi utilizatorul tău.
Acest lucru nu numai că va instala modulele kernel, ci și le va semna. Aşa că va dura ceva timp. Vestea bună este că puteți paraleliza acest lucru folosind cu -j$(nproc)
sudo make modules_install -j$(nproc)
Notă pentru dezvoltatori: Puteți specifica o cale diferită în cazul în care sunt stocate modulele Linux (în loc de /lib/modules/<kernel_release>-<localversion>) folosind INSTALL_MOD_PATHvariabilă ca și astfel:
sudo make modules_install INSTALL_MOD_PATH=<path>
O altă notă pentru dezvoltatori: Puteți utiliza INSTALL_MOD_STRIPvariabil pentru a specifica dacă modulele ar trebui să fie deposedat de simbolurile de depanator sau nu. Simbolurile de depanarea nu sunt dezbrăcate dacă nu sunt definite. Când este setat la 1, ele sunt dezbrăcate folosind --strip-debugopţiunea, care este apoi trecută la strip(sau llvm-stripDacă Clang este utilizat) utilitate.
[Opțional] Instalarea fișierelor de cap de nucleu Linux
Dacă intenționați să utilizați acest kernel cu module în afara termenului, cum ar fi ZFS sau Nvidia DKMS, sau încercați să scrieți propriile module, cel mai probabil veți avea nevoie de fișierele de antet furnizate de kernel, acestea pot fi instalate cu ajutorul headers_install:
sudo make headers_install
Dacă sunteți pe x86_64, puteți sări peste acest pas!
Dacă ați construit pentru ARM sau RISC-V, este foarte probabil ca alergare makeDe asemenea, a construit binarele dispozitiv-axi-tree. Puteți cauta fisiere .dtb în arch/<machine_architecture>/boot/dts. Am un hack pentru a verifica acest lucru: ## For AArch32 $ find arch/arm/boot/dts -name "*.dtb" -type f | head -n 1 > /dev/null && echo "DTBs for ARM32 were built" ## For AArch64 $ find arch/arm64/boot/dts -name "*.dtb" -type f | head -n 1 > /dev/null && echo "DTBs for ARM64 were built" ## For RISC-V $ find arch/riscv/boot/dts -name "*.dtb" -type f | head -n 1 > /dev/null && echo "DTBs for RISC-V were built" Dacă primești un mesaj pe care scria "DTB-uri pentru <arh> au fost construite", continuați cu instalarea DTB-urilor. Asta se face cu dtbs_install- Ţintă. Utilizarea de către sudoeste necesar, deoarece acest lucru va fi instalat în /boot/dtb-<kernel_release>-<localversion>care este deținută de root. . sudo make dtbs_install
În cele din urmă, instalăm kernel-ul Linux în sine!
sudo make install
Utilizarea de către sudo este necesara aici pentru că sâmburele Linux se instalează în /boot pe care utilizatorul dvs. normal nu are permisiunea de a scrie.
În general, obiectivul de instalare va actualiza, de asemenea, încărcătorul de boot, dar dacă nu reușește, înseamnă că probabil aveți un bootloader neacceptat. Dacă nu utilizați GRUB ca bootloader, vă rugăm să citiți manualul bootloaderului dvs.
Notă pentru dezvoltatori: De data aceasta; variabila INSTALL_PATH este utilizată pentru a specifica unde este instalat nucleul Linux, în loc de calea implicită care se află /boot.
Pentru utilizatorii Arch Linux
Dacă ai încercat să alergi pe make install, s-ar putea să fi observat că ai primit o eroare. Cum ar fi următorul:
$ sudo make install INSTALL /boot Cannot find LILO.
Pentru a instala de fapt nucleul Linux pe Arch Linux, trebuie să copiem manual imaginea kernel Linux.
Acest lucru se poate face cu următoarea comandă: sudo install -Dm644 "$(make -s image_name)" /boot/vmlinuz-<kernel_release>-<localversion> Din moment ce a, compilat nucleul de 6.5, voi rula următoarea comandă, o voi regla conform nevoilor dumneavoastră: sudo install -Dm644 "$(make -s image_name)" /boot/vmlinuz-6.5.5-pratham Nu este necesar, dar trebuie să copiați și un fișier numit System.mapȘi în timp ce sunteți la ea, copiați .configFile de asemenea ;) sudo cp -vf System.map /boot/System.map-<kernel_release>-<localversion> sudo cp -vf .config /boot/config-<kernel_release>-<localversion> Generează ramdisk inițial S-ar putea să fi întâlnit o utilitară numită mkinitcpio când ai instalat Arch Linux. O vom folosi pentru a crea ramdik-ul inițial. Pentru a face acest lucru, avem nevoie de o presetată mai întâi. Faceți acest lucru prin adăugarea următorului conținut la /etc/mkinitcpio.d/linux-<localversion>.preset. Înlocuiti <kernel_release> Și <localversion> După cum este necesar. ALL_config="/etc/mkinitcpio.conf" ALL_kver="/boot/vmlinuz-<kernel_release>-<localversion>" PRESETS=('default' 'fallback') default_image="/boot/initramfs-<kernel_release>-<localversion>.img" fallback_options="-S autodetect" Odată ce faceți acest lucru, rulați următoarea comandă pentru a genera ramdisk-ul inițial: sudo mkinitcpio -p linux-<localversion> Urmează ieșirea de pe computerul meu, a ta ar trebui să fie și a ta similară! $ sudo mkinitcpio -p linux-pratham ==> Building image from preset: /etc/mkinitcpio.d/linux-pratham.preset: 'default' ==> Using configuration file: '/etc/mkinitcpio.conf' -> -k /boot/vmlinuz-6.5.5-pratham -c /etc/mkinitcpio.conf -g /boot/initramfs-6.5.5-pratham.img ==> Starting build: '6.5.5-pratham' -> Running build hook: [base] (...) Actualizare GRUB sudo grub-mkconfig -o /boot/grub/grub.cfg Actualizarea GRUB nu va face ca nucleul mai nou să nu intre în mod implicit. Vă rugăm să-l selectați din meniul de boot în timpul bootarii. Puteți selecta versiunea mai nouă a nucleului Linux intrând în elementul de meniu "Opțiuni avansate pentru Arch Linux" - "Arch Linux, cu Linux <kernel_release>-<localversion>".
Nota: In AUR sunt pachete cu automatizeaza intreg procesul.
Felicitări! Ați finalizat toți pașii pentru a obține sursa nucleului Linux, configurând-o, construind-o și instalând-o.
Vă rugăm să selectați versiunea corectă Linux kernel de la bootloader. Odată ce a pornit, rulați uname -rcomanda pentru a verifica dacă ați pornit folosind kernel-ul Linux intenționat.
Mai jos este ieșirea de pe computerul meu:
$ uname -r 6.5.5-pratham
Dezinstalare
Fie distribuția Linux a expediat nucleul Linux cu versiunea pe care ați compilat-o manual, fie ați compilat un alt nucleu, mai nou și ați observat că ar trebui să dezinstalați nucleul mai vechi pentru a face spațiu pentru cel mai nou.
Știm unde sunt instalate toate fișierele, astfel încât să fie mai ușor să le scoatem.
## Remove kernel modules $ rm -rf /lib/modules/<kernel_release>-<localversion>
## Remove device-tree binaries $ rm -rf /boot/dtb-<kernel_release>-<localversion>
## Remove the Linux kernel itself $ rm -vf /boot/{config,System,vmlinuz}-<kernel_release>-<localversion>
Metoda alternativa ce creeaza pachete de instalare (Ubuntu), poate fi mai elegant.
## source apt source linux-image-unsigned-$(uname -r) chmod a+x debian/rules chmod a+x debian/scripts/* chmod a+x debian/scripts/misc/* fakeroot debian/rules clean fakeroot debian/rules editconfigs # you need to go through each (Y, Exit, Y, Exit..) or get a complaint about config later ## build fakeroot debian/rules clean # quicker build: fakeroot debian/rules binary-headers binary-generic binary-perarch # if you need linux-tools or lowlatency kernel, run instead: fakeroot debian/rules binary ##install cd .. ls *.deb linux-headers-4.8.0-17_4.8.0-17.19_all.deb linux-headers-4.8.0-17-generic_4.8.0-17.19_amd64.deb linux-image-4.8.0-17-generic_4.8.0-17.19_amd64.deb dpkg -i *.deb