Sådan oprettes og installeres den nyeste Linux-kerne fra kilden

Jeg er lige færdig med min første opgave til et kursus om avancerede operativsystemer. Og jeg besluttede at dokumentere min tilgang til opbygning af Linux-kernen fra kilden og implementering af mit eget systemopkald.

Der er en række blogs, der allerede fortæller dig, hvordan du gør det, men nogle af dem er forældede, og nogle virker unødvendigt komplicerede. Mit mål er at præsentere en ligefrem tilgang til dette, som forhåbentlig skal hjælpe dig med at spare meget tid.

Kompilering af Linux-kernen fra kilden kan virke som en skræmmende opgave, selv for en person, der er ret fortrolig med computere generelt. Det kan også blive virkelig irriterende, hvis du ikke følger de rigtige instruktioner.

Så her er en guide, der hjælper dig gennem processen med at opbygge kernen fra kilden, og det er en guide, der fungerer! Du behøver ikke bekymre dig om at ødelægge dit system eller spilde din tid.

Hvorfor bygge kernen fra kilden?

Hvis du planlægger at arbejde på interner i Linux-kernen eller ændre dens adfærd, skal du kompilere kernen på dit system.

Her er et par specifikke tilfælde, hvor du bliver nødt til at vide, hvordan du arbejder med kernens kildekode:

  1. Du vil skrive et rigtig sejt 'Hello world' program. (Hver gang du implementerer dit eget systemopkald eller ændrer kernekildekoden, skal du kompilere kernen for at implementere ændringerne)
  2. Du vil aktivere eksperimentelle funktioner på din kerne, der ikke er aktiveret som standard (eller deaktivere standardfunktioner, som du ikke vil have)
  3. Du vil debugge kernekildekode, aktivere support til et nyt stykke hardware eller foretage ændringer i dets eksisterende konfigurationer
  4. Du laver et kursus om avancerede operativsystemer og har intet andet valg end at gøre dette!

I hver af ovenstående situationer vil det være nyttigt at lære, hvordan man bygger kernen fra kilden.

Hvad du har brug for

Et Linux-baseret operativsystem (jeg prøvede dette på Ubuntu 14.04 LTS, og instruktionerne skrevet her er for det samme).

Du bliver nødt til at installere et par pakker, før du kan komme i gang. Brug følgende kommandoer til det samme.

sudo apt-get update
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc

Du har også brug for op til mindst 12 GB ledig plads på disken, en internetforbindelse for at downloade kildekoden og meget tid (ca. 45 til 90 minutter).

Download og udpakning af den nyeste kernekilde

For at kontrollere din nuværende kerneversion skal du åbne terminalen og skrive:

uname -r

Gå til kernel.org og download den seneste stabile version. På dette tidspunkt var den seneste stabile kerneversion 4.7.1, og jeg vil henvise til det samme i denne artikel. (Bemærk: Prøv at undgå at downloade kilde fra andre websteder)

Skift til den mappe, hvor filen blev downloadet, og udpak ved hjælp af:

tar xf linux-4.7.1.tar.xz

Skift til det udpakkede linux-4.7.1-bibliotek.

cd linux-4.7.1

Den skal indeholde mapper kaldet arch , fs , crypto osv.

Konfiguration og kompilering:

Før vi udarbejder kernen, skal vi konfigurere, hvilke moduler der skal medtages, og hvilke der skal udelades.

Der er mange måder at gå på ved at gøre dette.

En nem og ligetil måde at gøre dette på er først at kopiere din eksisterende kernel-konfigurationsfil og derefter bruge 'menuconfig' til at foretage ændringer (om nødvendigt). Dette er den hurtigste måde at gøre det på, og sandsynligvis den sikreste.

cp /boot/config-$(uname -r) .config 
make menuconfig

Dette er den del, hvor du kan ende med at fjerne support til en enhedsdriver eller gøre noget af den slags, som til sidst vil resultere i en brudt kerne. Hvis du er i tvivl om at foretage ændringer, skal du bare gemme og afslutte.

Bemærk: Et af alternativerne til menuconfig er en interaktiv kommandolinjegrænseflade tilgængelig ved hjælp af 'make config'. Dette hjælper dig med at konfigurere alt fra bunden. Brug ikke dette. Du vil blive stillet over tusind ja / nej-spørgsmål om aktivering eller deaktivering af moduler, hvilket jeg lover ikke er sjovt overhovedet. Jeg prøvede dette en gang og på en eller anden måde formåede at ødelægge displaydriverens konfigurationer.

gconfig og xconfig er alternative GUI-baserede konfigurationsværktøjer, som du kan bruge. Jeg har ikke prøvet disse selv. Til dette skal du bruge make gconfig (eller make xconfig ) i stedet for at lave menuconfig .

Nu er vi klar!

For at kompilere kernen og dens moduler bruger vi kommandoen make .

Dette efterfølges af brug make modules_install til at installere kernemodulerne.

Endelig bruger vi make install til at kopiere kernen og .config-filen til / boot-mappen og til at generere system.map-filen (som er en symboltabel, der bruges af kernen).

Disse tre trin samlet tager normalt meget tid. Brug følgende kommando til at udføre ovenstående opgaver:

sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4

Bemærk: Jeg har brugt -j-indstillingen til at angive antallet af kerner, der skal bruges. Dette har en tendens til at fremskynde processen betydeligt. Du kan bruge nproc til at kontrollere antallet af tilgængelige behandlingsenheder. I mit tilfælde var det 4 kerner.

Ideelt set skulle du ikke have brug for sudo-privilegier, men jeg løb ind i problemer, da jeg ikke kørte det med sudo-privilegier.

Sidste trin

Når kernen og dens moduler er kompileret og installeret, vil vi bruge den nye kerne næste gang vi starter op.

For at dette kan ske, skal vi bruge følgende kommando:

update-initramfs -c -k 4.7.1 

Brug derefter følgende kommando, som automatisk søger efter kernerne i mappen / boot og føjer dem til grubs konfigurationsfil.

update-grub 

Genstart nu systemet, og du skal se, at den nye kerne føjes til boot loader-poster.

Når du følger instruktionerne, forudsat at der er nok plads til rådighed på disken, og den aktuelle kernekonfiguration fungerer fint, bør du ikke støde på problemer. Bemærk, at du altid kunne bruge den gamle kerneversion i tilfælde af problemer og prøve det hele igen!

Kommandoen uname -r skal nuviser dig den aktuelle kerneversion, der bruges.

En vigtig note

Ovenstående trin er nødvendige for at opbygge kernen fra kilden for første gang. Én gang gøres det mindst én gang, og et nyt kernebillede er klar, det er enkelt at foretage ændringer og skrive vores egne moduler. Du bruger kun de trin, der er anført under Konfiguration og kompilering, hver gang noget nyt skal implementeres eller konfigureres forskelligt.

Betydning, husk bare følgende:

cp /boot/config-$(uname -r) .config
make menuconfig
sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4

Jeg må give kredit til følgende værdifulde ressourcer - de var enormt hjælpsomme med denne opgave: Ramkitech.com, askubuntu.com, kernel.org og cyberciti.biz