Hvorfor kaldes Linux-kernen et "image"? Linux kildekoder.

Nogle gange skal du måske bygge din egen Linux kerne . Årsagerne til dette kan være følgende:

  • du har brug for en ren kerne uden distributionspatches;
  • du vil anvende dine egne plastre (som der er mange af);
  • du ønsker at samle en kerne, der passer til din hardwarekonfiguration, smide unødvendige ting ud fra den og/eller skræddersy den til specifikke opgaver;
  • du vil inkludere en eksperimentel driver eller et filsystem i kernen, som ikke er inkluderet i "vanilje" kerne (f.eks ZFS eller Raiser 4);
Der er ikke noget kompliceret ved at samle kernen. Det er kun vigtigt at forstå, hvorfor dette bliver gjort, og heller ikke at røre ved de parametre, som du ikke forstår. I denne note vil jeg beskrive to eksempler på indbygning af en kerne Debian-baseret distributioner. I det første eksempel vil jeg vise, hvor nemt det er at samle en ren, såkaldt "vanilje"-kerne (som den udgives af Linus Torvalds), og i den anden - hvordan du anvender dine egne patches og optimerer kernen. Jeg vil straks skrive to advarsler:
  • du bliver nødt til at genopbygge kernen hver gang den opdateres (download "opdateringspatchen", anvend den og saml kernen);
  • den genopbyggede kerne virker muligvis ikke, hvis dit system bruger nogle hacks for at sikre funktionaliteten af ​​dette eller hint udstyr;
  • Hvis kernen er konfigureret forkert, især i tilfælde af analfabeter eller tankeløs anvendelse af patches, kan du enten ende med et system, der er frygtelig langsomt, eller miste det helt.
DU UDFØRER ALLE HANDLINGER PÅ EGEN RISIKO!

Enkel kernesamling uden patches.

Kildekoder Linux-kerner er på kernel.org. Der er også "opdater patches". Hvad har vi brug for? Download fra siden tarball(arkiv) med den seneste stabile version af kernen (i skrivende stund er dette versionen 4.3 ). Download med hvem som helst på en bekvem måde. Dernæst har vi brug for værktøjer til montering:

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

Når alle de nødvendige værktøjer er installeret, skal du udpakke arkivet med kernekoden i en passende mappe. Lad det være /home/bruger/KERNEL, Hvor "bruger"- systembrugernavn. Åbn derefter en terminal og gå dertil:

cd /home/user/KERNEL

Det eneste, der er tilbage, er at samle kernen:

fakeroot make-kpkg -j 3 --initrd --append-to-version=-custom kernel_image kernel_headers #-j 3

Nummer 3 efter j- dette er antallet af kerner på din processor + 1. Det vil sige, for en dual-core processor er det 3, for en 4-core processor er det 5 og så videre.
-brugerdefinerede- her kan du angive et bekvemt navn til kernen for at gøre det nemmere at skelne den fra distributionen.
kernel_image Og kernel_headers- dette er henholdsvis kernen selv og dens header-filer. Overskrifter nødvendigt for at samle drivere og kernemoduler, samt til nogle andre formål. Efter at have kørt denne kommando, vil flere kernekonfigurationsspørgsmål begynde at dukke op. Da vi lader alt stå som standard, skal du blot trykke på Enter, indtil opbygningen starter. Afhængigt af din computers styrke kan monteringen tage fra 15-20 minutter til flere timer. Efter montering, i mappen /hjem/bruger to vises deb pakke: kerne og overskrifter. Installer dem med kommandoen:

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

Og genstart. I GRUB menu Nu kan du vælge en anden kerne for at starte systemet op.

Opbygning af kernen ved hjælp af patches og yderligere konfiguration.

Denne gang vil vi samle en optimeret kerne til at arbejde med lyd og video, samt til større systemrespons. For at gøre dette vil vi anvende to patches: den såkaldte real-time patch ( FORHÅND RT) og en patch til compileren GCC at tilføje yderligere muligheder for processoroptimeringer. For det første, hvad er en patch? Patch er tekstfil, som er oprettet af programmet diff, indeholdende kodeændringer i visse dele, som ved påføring af en patch indgås de rigtige steder. Fordi RT-plaster kommer ud med en stor forsinkelse, dens seneste version er til kerne 4.1. Dette er dog ikke så vigtigt. Brug det samme skema, download kernel 4.1 fra kernel.org og pak det ud i en mappe /home/bruger/KERNEL-CUSTOM. Download nu patcherne. PREEMPT_RT og GCC Patch. Fra de downloadede arkiver har vi brug for filer med filtypenavnet .patch, som skal placeres i mappen med kernekildekoden. Det vil sige i /home/bruger/KERNEL-CUSTOM. Før du påfører patches, skal du sikre dig, at der ikke er nogen fejl. Åbn terminalen:

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


Mulighed --tørt løb giver dig mulighed for at simulere anvendelsen af ​​en patch uden at foretage ændringer i filerne. Hvis der ikke findes nogen fejl (se skærmbillede) - accepter patchen uden muligheden --tørt løb. Lignende handlinger gør det samme med det andet plaster. Påfør ikke mere end ét plaster ad gangen! Nu skal vi konfigurere vores kerne. Vi har følgende muligheder at vælge imellem:

lav konfiguration- spørgsmål om konfigurationen af ​​et eller andet kerneundersystem vil blive vist i terminalen én efter én. En meget lang og kedelig proces. Lad os glemme det :)
lav oldconfig- konfigurationen af ​​den, der kører ind dette øjeblik kerner. Da vi samler vores fra bunden, er denne metode også ubrugelig.
lav defconfig- i lighed med den forrige, vil kun værdierne være som standard. Den måde kerneudviklerne indstiller det på. Svarende til den første monteringsmetode.
lav menuconfig- pseudo GUI bibliotek baseret Forbandelser. En grænseflade med en praktisk hierarkisk menu vil blive vist på skærmen. Styrer ved hjælp af retningstasterne, mellemrumstasten og TAB-tasten. Anbefales, hvis du bygger kernen på et system, der ikke har grafisk skal.
lav gconfig GTK, anbefalet i GNOME, Mate, Xfce, Cinnamon, Unity og andre, der bruger GTK.
lav xconfig- GUI baseret Qt. Anbefalet i KDE. Da mit system bruger KDE, vil jeg bruge denne metode. Ud over dette er der et par flere metoder, men deres anvendelse er ikke anderledes. Så efter påføring af plastrene starter vi lav xconfig og dette er hvad der dukker op foran os:


Først og fremmest skal du slukke dynticks. For at gøre dette går vi til Timer undersystem og vælg Periodisk timer tikker


Nu kommer den bedste del. Lad os gå til Processortype og funktioner, leder efter en vare Processor familie og angiv din processorserie. Hvis du f.eks. har Intel Core i5-4xxx, angive Hasswell(4. generations processor). Hvis du ikke er helt sikker, kan du vælge varen Indbyggede optimeringer automatisk registreret af GCC. I dette tilfælde vil compileren selv bestemme, hvad din processor understøtter under montering, og vil inkludere alle dens funktioner.


Gå nedenfor og aktiver parameteren Fuld udtrækkelig kerne (RT). Hård realtidstilstand.


Rul nedenfor og i afsnittet Timer frekvens indstille frekvensen systemet afbryder1000 Hz


Vi slukker helt for enhver energibesparelse. Det er vigtigt! Til venstre leder vi efter en vare Strømstyring og ACPI muligheder og fjern markeringen i ACPI. Slå også CPU-strømbesparelse fra

Det er alt. Hvis du ønsker det (og omhyggeligt studere dokumentationen), kan du foretage yderligere ændringer i konfigurationen (deaktivere unødvendige drivere, bruge yderligere undersystemer og så videre). Nu gemmer vi konfigurationen via Fil - Gem, luk konfiguratoren og saml kernen:

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

På min computer med Intel processor Core i3-550 (3,2 GHz), stigningen i ydeevnen var ret mærkbar. Men det vigtigste er, når man arbejder i LMMS Og Kdenlive, periodisk hakken, desynkronisering af lyd- og videospor, samt frysning under hård belastning på harddisken er forsvundet. Konklusion - det virker! Til sidst vil jeg beskrive to modificerede kerner, som er meget populære i Linux-kredse:

PF-kerne- det mest populære sæt plastre fra ukraineren Alexander Natalenko (aka post-factum). Dette er et sæt patches, der ikke er inkluderet i hovedkernen, men som giver øget systemrespons, giver et alternativt dvaleundersystem, der er hurtigere end det primære, og reducerer også hukommelsesbrug ved at bruge teknikken til at flette identiske sider. Sættet indeholder:

  • BFS-procesplanlægger af Con Kolivas med yderligere rettelser af Alfred Chen;
  • BFQ I/O-planlægger af Paolo Valente, Arianna Avanzini og Mauro Marinoni;
  • dvale undersystem TuxOnIce fra Nigel Cunningham;
  • implementering af teknikken til at flette identiske sider i UKSM-hukommelse fra Nai Xia;
  • patch fra Graysky, der udvider listen over processorer til kerneoptimering af compileren (den vi anvendte ovenfor)
Ændret kernelager. Officiel side.

Zen-kerne- det næstmest populære sæt, men det første i forhold til antallet af patches. Zen-kernen bruger en kombination af flere projekter, opdaterer koden via et git-lager og har også flere Zen-specifikke ting, der har til formål at opfylde de fleste brugerbehov i en enkelt kerne. Nogle funktioner i patchen: drm-next, trådløs testning, valg af CPU-planlæggere (CFS/BFS), BFQ I/O-planlægger, aufs, unionfs, reiser4, tuxonice, PHC og mange andre ting, der er gode til at optimere desktop-systemer eller bærbare computere. Alt dette er tilgængeligt i form af ét plaster til vaniljekernen. Officiel side. GIT repository. Pakker til Debian/Ubuntu.

Det var nok alt for i dag. Mere information kan findes i links til artiklen. Alt beskrevet i artiklen er blevet testet af mig på mange konfigurationer.

Historie og arkitektonisk organisation

Da formålet med denne artikel er at introducere dig til Linux-kernen og give dig et overblik over dens arkitektur og hovedkomponenter, lad os starte med kort overblik Linux-kernens historie, derefter et fugleperspektiv af Linux-kernens arkitektur og til sidst en diskussion af dens vigtigste undersystemer. Linux-kernen indeholder over seks millioner linjer, så denne introduktion kan ikke være udtømmende. For mere detaljeret information, brug venligst linkene til yderligere ressourcer.

En kort historie om Linux

Selvom Linux ser ud til at være det mest populære open source-operativsystem, er dets historie faktisk relativt kort sammenlignet med andre operativsystemer. Ved begyndelsen af ​​computeræraen udviklede programmører deres programmer til bar hardware ved at bruge sprog, som hardwaren kunne forstå. Uden et operativsystem kunne kun én applikation (og én bruger) bruge hele den store, dyre computermaskine på et givet tidspunkt. De første operativsystemer blev udviklet i 1950'erne for at gøre livet lettere for udviklere. Eksempler inkluderer General Motors Operating System (GMOS), udviklet til IBM 701, og FORTRAN Monitor System (FMS), skabt af North American Aviation til IBM 709.

I 1960'erne udviklede Massachusetts Institute of Technology (MIT) og en række virksomheder et eksperimentelt Multics (Multiplexed Information and Computing Service) operativsystem til GE-645 maskinen. En af udviklerne af dette OS, AT&T, flyttede væk fra Multics og udviklede sit eget i 1970 eget system Unics. C-sproget, der blev leveret med dette OS. C blev designet og skrevet til at gøre udvikling af operativsystemer bærbar.

Tyve år senere skabte Andrew Tannenbaum en mikrokerne UNIX version® kaldet MINIX (minimal UNIX), som kunne køre på små personlige computere. Dette open source-operativsystem inspirerede Linus Torvalds til at udvikle det første Linux versioner i begyndelsen af ​​1990'erne (se figur 1).

Ris. 1. Novelle større Linux-kerneudgivelser

Linux er hurtigt vokset fra et enkelt entusiastinitiativ til et verdensomspændende projekt, der involverer tusindvis af udviklere. En af større beslutninger Linuxs skæbne var vedtagelsen af ​​GNU General Public License (GPL). GPL beskyttede Linux-kernen mod kommerciel udnyttelse og åbnede samtidig vejen for brugen af ​​brugerfællesskabet i GNU-projektet, grundlagt af Richard Stallman, hvis kodemængder langt overstiger selv Linux-kernen. Dette gjorde det muligt at bruge sådanne nyttige applikationer, såsom GNU Compiler Collection (GCC) compilerkomplekset og forskellige kommandoskaller.

Introduktion til Linux-kernen

Lad os gå videre til en generel oversigt over arkitekturen af ​​GNU/Linux-operativsystemet. Operativsystemet kan opdeles i to niveauer, som vist i fig. 2.

Ris. 2. Grundlæggende arkitektur af GNU/Linux-operativsystemet

På øverste niveau er brugerpladsen (applikationsplads). Det er her brugerapplikationer udføres. Under brugerrummet er kerneplads. Det er her Linux-kernen kører.

Der er også et GNU C-bibliotek (glibc). Det giver en systemopkaldsgrænseflade, der kommunikerer med kernen og giver en mekanisme til at flytte fra en brugerpladsapplikation til kernen. Dette er vigtigt, fordi kernen og brugerapplikationen ligger i forskellige beskyttede adresserum. Desuden, mens hver proces i brugerrummet har sit eget virtuelle adresserum, optager kernen et delt adresseområde. Mere detaljeret information findes i litteraturen, hvortil der henvises i afsnittet "".

Linux-kernen kan til gengæld opdeles i tre store lag. Øverst er systemopkaldsgrænsefladen, som implementerer grundlæggende funktioner, såsom læsning og skrivning. Under systemopkaldsgrænsefladen er kernekoden, eller mere præcist, arkitekturuafhængig kernekode. Denne kode er fælles for alle processorarkitekturer, der understøttes af Linux. Endnu lavere er den arkitekturafhængige kode, der danner den såkaldte. BSP (Board Support Package - hardware platform support pakke). Denne kode er processor- og platformspecifik for en bestemt arkitektur.

Linux-kerneegenskaber

Når man diskuterer arkitekturen i et stort, komplekst system, kan man se på det fra mange forskellige perspektiver. Et af målene med arkitekturanalyse kan være at forstå kildekoden til et system bedre. Det er, hvad vi vil gøre her.

Implementeret i Linux-kernen hele linjen vigtige arkitektoniske elementer. På både de mest generelle og mere detaljerede niveauer kan kernen opdeles i mange forskellige undersystemer. På den anden side kan Linux ses som en monolitisk helhed, da alting grundlæggende tjenester samlet i systemkernen. Denne tilgang adskiller sig fra en mikrokernearkitektur, hvor kernen kun giver det meste generelle tjenester, såsom informationsudveksling. input/output, hukommelses- og processtyring og mere specifikke tjenester implementeres i moduler, der er tilsluttet mikrokerneniveauet. Hvert af disse synspunkter har sine fordele, men jeg vil ikke gå ind i den diskussion her.

Med tiden er Linux-kernen blevet mere effektiv med hensyn til hukommelse og CPU-brug og er blevet ekstremt stabil. Men det mest interessante aspekt af Linux, givet systemets størrelse og kompleksitet, er dets portabilitet. Linux kan kompileres til et stort antal forskellige processorer og platforme med forskellige arkitektoniske begrænsninger og behov. For eksempel kan Linux køre på en processor med enten en memory management unit (MMU) eller uden en MMU. Understøttelse af processorer uden en MMU er implementeret i uClinux-kerneversionen. For mere information, se afsnittet " ".

Grundlæggende Linux-kerneundersystemer

Lad os se på nogle af hovedkomponenterne i Linux-kernen, efter strukturen vist i fig. 3.

Ris. 3. En mulig visning af Linux-kernearkitekturen

Systemopkaldsgrænseflade

SCI er et tyndt lag, der giver et middel til at kalde kernefunktioner fra brugerrummet. Som allerede nævnt kan denne grænseflade være arkitekturafhængig, selv inden for den samme processorfamilie. SCI er faktisk en funktionsopkaldsmultipleks- og demultiplekstjeneste. SCI-implementeringen er placeret i ./linux/kernel, og den arkitekturspecifikke del er i ./linux/arch. Mere detaljerede oplysninger om denne komponent kan findes i afsnittet.

Procesledelse

Procesledelse fokuserer på eksekvering af processer. I kernen kaldes disse processer vandløb(tråde); de svarer til individuelle virtualiserede processorobjekter (trådkode, data, stak, processorregistre). I brugerrummet er det almindeligt anvendte udtryk behandle, selvom Linux-implementeringen ikke skelner mellem disse to koncepter (processer og tråde). Kernen giver en applikationsprogrammeringsgrænseflade (API) via SCI til oprettelse af en ny proces (oprettelse af en kopi, lancering af eksekvering, kald af Portable Operating System Interface-funktioner), standsning af processen (dræb, afslut), kommunikation og synkronisering mellem processer (signaler eller POSIX-mekanismer).

En anden opgave for processtyring er at dele processoren mellem aktive tråde. Kernen implementerer en innovativ planlægningsalgoritme, hvis køretid ikke afhænger af antallet af tråde, der kæmper om processorressourcer. Navnet på denne planlægger - O(1) - understreger, at det tager samme tid at planlægge en enkelt tråd, som det gør at planlægge flere tråde. O(1)-planlæggeren understøtter også symmetriske multiprocessor (SMP)-konfigurationer. Kildekoderne til proceskontrolsystemet er placeret i /linux/kernel, og koderne for den arkitekturafhængige del er i /linux/arch). For mere information om denne algoritme, se afsnittet.

Hukommelseshåndtering

En anden vigtig ressource, som kernen administrerer, er hukommelse. For at forbedre effektiviteten, i betragtning af hardwaredriftsmekanismen med virtuel hukommelse, er hukommelsen organiseret i form af såkaldte. sider(4 KB i størrelse på de fleste arkitekturer). Linux har værktøjer til styring af tilgængelig hukommelse, samt hardwaremekanismer til kortlægning af fysisk og virtuel hukommelse.

Hukommelsesstyring er dog meget mere end blot at administrere 4KB buffere. Linux giver abstraktioner over disse 4 KB buffere, såsom slab allocator. Denne kontrolmekanisme er baseret på 4 KB buffere, men placerer derefter strukturer i dem, og holder styr på, hvilke sider der er fulde, hvilke der er delvist fulde, og hvilke der er tomme. Dette gør det muligt for kredsløbet at blive dynamisk udvidet og kontraheret afhængigt af det underliggende systems behov.

Afhængig af tilgængelighed stort antal hukommelsesbrugere, situationer er mulige, når al tilgængelig hukommelse er opbrugt. I denne henseende kan sider fjernes fra hukommelsen og overføres til disk. Denne proces med at udveksle sider mellem vædder Og harddisk hedder bytte. Kildekoder til hukommelsesstyring er placeret i ./linux/mm.

Virtuelt filsystem

Et andet interessant aspekt af Linux-kernen er det virtuelle filsystem (VFS), som giver en generel abstraktion af grænsefladen til filsystemer. VFS giver et skiftelag mellem SCI og de filsystemer, der understøttes af kernen (se figur 4).

Ris. 4. VFS giver et skiftestruktur mellem brugere og filsystemer

På det øverste niveau af VFS er der en enkelt API-abstraktion for funktioner som åbning, lukning, læsning og skrivning af filer. På det laveste niveau af VFS er abstraktioner filsystemer, som bestemmer, hvordan funktioner implementeres højeste niveau. De er plugins til specifikke filsystemer (hvoraf der er mere end 50). Kildekoderne til filsystemerne er placeret i ./linux/fs.

Under filsystemniveauet er buffercachen, som giver et generelt sæt funktioner til filsystemniveauet (uafhængig af det specifikke filsystem). Dette cachinglag optimerer adgangen til fysiske enheder gennem korttidslagring af data (eller read-ahead, hvilket sikrer, at data er klar, når det er nødvendigt). Under buffercachen er enhedsdrivere, der implementerer grænseflader til specifikke fysiske enheder.

Netværksstak

Netværksstakken ved sit design har flerlagsarkitektur, gentagelse af strukturen af ​​selve protokollerne. Kan du huske det Internetprotokol Protokol (IP) er den underliggende protokol netværkslag, placeret nedenfor transportprotokol Transmission Control Protocol (TCP). Over TCP er socket-laget, kaldet via SCI.

Socketlaget er en standard API til netværksundersystemet. Det giver brugergrænseflade til forskellige netværksprotokoller. Socket-laget implementerer en standardiseret måde at administrere forbindelser og overføre data mellem endepunkter, fra adgang til klare datarammer og IP-protokoldataenheder (PDU'er) til TCP protokoller og User Datagram Protocol (UDP). Kildekoden til kernenetværksundersystemet er placeret i ./linux/net biblioteket.

Enhedsdrivere

Langt størstedelen af ​​Linux-kernens kildekode består af enhedsdrivere, som giver mulighed for at arbejde med specifikke hardwareenheder. Linux-kildetræet har en driverundermappe, som igen har undermapper til de forskellige typer understøttede enheder, såsom Bluetooth, I2C, serielle porte osv. Kildekoder til enhedsdrivere er placeret i ./linux/drivers.

Arkitektur-specifik kode

Selvom hovedparten af ​​Linux er uafhængig af den arkitektur, som operativsystemet kører på, er der nogle elementer, der skal tage højde for arkitekturen for at sikre korrekt drift og effektivitet. ./linux/arch-undermappen indeholder den arkitekturspecifikke del af kernekildekoden, opdelt i et antal undermapper svarende til specifikke arkitekturer. Alle disse mapper danner tilsammen BSP. I tilfælde af en almindelig stationær pc, bruges i386-biblioteket. Undermappen for hver arkitektur indeholder et antal undermapper relateret til specifikke aspekter af kernen, såsom boot, kerne, hukommelseshåndtering osv. Kildekoden til den arkitekturspecifikke del er placeret i ./linux/arch.

Udover portabilitet og effektivitet har Linux-kernen en række andre interessante funktioner, som ikke blev dækket i diskussionen ovenfor.

Linux, som et meget brugt open source-operativsystem i praksis, er en fremragende testplads for nye protokoller og deres forbedringer. Linux understøtter et stort antal af netværksprotokoller, herunder traditionel TCP/IP og dets højhastighedsudvidelser (for netværk hurtigere end Gigabit Ethernet og 10 GbE). Linux understøtter også protokoller som Stream Control Transmission Protocol (SCTP), som implementerer mange ekstra funktioner, fraværende i TCP (bruges som en alternativ transportlagsprotokol).

Det skal bemærkes, at Linux-kernen er dynamisk (understøtter tilføjelse og fjernelse software komponenter uden at stoppe systemet). Disse komponenter kaldes dynamisk indlæste kernemoduler. De kan indtastes i systemet efter behov, såsom under opstart (hvis de findes bestemt enhed, som kræver et sådant modul), og til enhver tid efter anmodning fra brugeren.

En anden nylig forbedring i Linux er evnen til at bruge det som et operativsystem til andre operativsystemer (kaldet en hypervisor). For nylig blev der foretaget en forbedring af kernen, kaldet Kernel-based Virtual Machine (KVM, virtuel maskine kernebaseret). Som et resultat af denne ændring blev den implementeret i brugerrummet ny grænseflade, som giver dig mulighed for at køre andre operativsystemer oven på en KVM-aktiveret kerne. I denne tilstand kan du ikke kun køre andre forekomster af Linux, men også virtualisere Microsoft® Windows®. Den eneste begrænsning er, at den anvendte processor skal understøtte de nye virtualiseringsinstruktioner. For mere information, se afsnittet.

Yderligere studier

I denne artikel er vi kun i de fleste generelle oversigt talte om Linux-kernens arkitektur og dens funktioner og muligheder. Detaljeret information om indholdet af kernen kan findes i dokumentationsbiblioteket, der følger med enhver Linux-distribution. Sørg for at tjekke afsnittet i slutningen af ​​denne artikel for links til mere detaljeret information om mange af de emner, der diskuteres her.

Genopbygning af Linux-kernen er en meget interessant forretning og af en eller anden grund skræmmer ofte begyndere. Men der er ikke noget kompliceret ved det, og kompilering af Linux-kernen er ikke sværere end at bygge (kompilere) et hvilket som helst andet program fra kilden. Det kan være nødvendigt at genopbygge kernen, når du har brug for nogle funktioner, der ikke er inkluderet i den aktuelle kerne, eller omvendt, du vil deaktivere noget. Alle yderligere tiltag vi optræder i Ubuntu Linux.

Installation af hjælpeprogrammer

For at konfigurere og bygge Linux-kernen skal du installere flere pakker, der er nødvendige for at bygge og konfigurere kernen: kernel-package, build-essential, libncurses-dev. Du kan gøre dette med kommandoen:

sudo apt-get install build-essential kernel-package libncurses-dev

Download kernekildekoden

Nu skal du downloade kernekildekoden. Vi vil downloade kernen til Ubuntu. Du kan downloade en specifik version af kernen, såsom den du bruger i øjeblikket, eller du kan downloade den nyeste version. For at finde ud af, hvilken version af Linux-kernen du bruger, skal du køre kommandoen uname med -r-indstillingen:

Unavn -r

Outputtet af kommandoen vil være noget som dette:

$uname -r 2.6.27-11-generisk

Navnet på pakken, der indeholder kernekildekoden, ser normalt sådan ud: linux-source-Version. For eksempel for kerneversion 2.6.24: linux-source-2.6.24. For det meste nyeste version Kernen i Ubuntu-lagrene kaldes simpelthen linux-source, uden at angive versionen i slutningen. For at installere de nyeste Ubuntu Linux-kernekilder skal du køre kommandoen:

sudo apt-get install linux-source

Denne kommando downloader kernekilderne og placerer dem i mappen /usr/src. I skrivende stund er den seneste version af kernen, der blev downloadet, 2.6.27, hvilket er, hvad vi vil bruge. Hvis vi nu går til mappen /usr/src og udfører kommandoen ls, vil vi se, at der blandt filerne er en fil linux-source-2.6.27.tar.bz2. Disse er kildekoderne til Linux-kernen (Ubuntu-kernen).

Udpakning af kernekildekoden

Lad os gå til mappen /usr/src og pakke kernen ud. For at gøre dette skal du køre følgende kommandoer:

Cd /usr/src sudo tar xjf linux-source-2.6.27.tar.bz2 sudo ln -s linux-source-2.6.27 linux

Kernel konfiguration

Lad os nu gå videre til at konfigurere kernen. For ikke at oprette en konfiguration fra bunden, vil vi tage udgangspunkt i den kernekonfiguration, der er i brug i øjeblikket. Du kan få den aktuelle konfiguration ved at køre kommandoen make oldconfig. Kør i terminal:

Cd /usr/src/linux sudo lave oldconfig

Hvis du kører make oldconfig, oprettes en .config-fil, der indeholder kernekonfigurationsmuligheder.

Du kan få hjælp til alle make-indstillinger for Linux-kernen ved at køre kommandoen make help.

For at ændre kernekonfigurationen vil vi bruge menuconfig-konsolværktøjet. For at køre det, kør:

Sudo lave menuconfig

Du vil se en grænseflade, hvor du kan aktivere eller deaktivere visse kerneindstillinger:

For eksempel vil jeg aktivere indstillingen "NTFS-skriveunderstøttelse". For at gøre dette skal du ved at trykke på ned-knappen finde punktet "Filsystemer" og trykke på Enter.

Du vil finde dig selv i filsystemets indstillingsmenu. Find punktet "DOS/FAT/NT-filsystemer" på denne liste, og tryk på Enter.

Gå til "NTFS-skriveunderstøttelse" og tryk på mellemrumstasten, der vises en stjerne ved siden af ​​emnet, hvilket indikerer det denne mulighed vil blive inkluderet i kernen.

Vælg nu "Afslut" (ved at trykke på højre-knappen og derefter Enter) og afslut hjælpeprogrammet. Før du afslutter værktøjet, vil en meddelelse poppe op, der beder dig om at gemme de foretagne ændringer, vælg Ja.

Kompilere kernen

Det er tid til at kompilere kernen med de ændringer, vi lavede i det forrige trin. Lad os først køre en kommando, der sletter de filer (hvis nogen) der er tilbage fra den forrige kompilering:

Sudo make-kpkg ren

Til sidst, for at begynde at kompilere kernen, skal du køre kommandoen:

Sudo make-kpkg --initrd --append-to-version=-mykernel kernel_image kernel_headers

Switchen -append-to-version bruges til at tilføje strengen -mykernel til navnet på kernebilledfilen, som vi får efter kompilering, så det er nemmere at identificere vores kerne. I stedet for -mykernel kan du bruge et hvilket som helst præfiks.

At kompilere en kerne tager ret meget tid og kan vare fra flere ti minutter til flere timer, afhængigt af din computers kraft.

Installation af kernen

Efter kompilering af kernen modtog du to outputfiler: linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb, linux-headers-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.00 Custom_i386.deb. Vi vil bruge kommandoen dpkg -i, som automatisk installerer kernen og skriver den til din GRUB-opstartsindlæser (i filen /boot/grub/menu.lst). Jeg bemærker, at kernen vil blive installeret som standardkernen, så hvis den ikke starter for dig, bliver du nødt til at starte med din tidligere kerne (den skal være i GRUB-menulisten, når du starter computeren) og manuelt ændre menu.lst fil. Så for at installere kernen skal du køre kommandoerne:

Dpkg -i linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb dpkg -i linux-headers-2.6.27.18-mykernel_2.6.27.18-mykernel.8.0i-10.0

Start af et system med en ny kerne

Lad os tjekke systemets funktionalitet med den nye kerne. Genstart din computer. På menuen GRUB bootloader du skulle se en ny post svarende til din nye kerne, som skal indlæses som standard. Hvis alt går godt, vil systemet starte med den nye kerne.

I en stor familie af operativsystemer baseret på GNU/Linux. Du har helt sikkert hørt, at disse koder er åbne, frit distribueret og gratis. De siger, tag hvem du vil, men kun betingelserne GPL licenser observere, hvilket slet ikke er svært. Men få mennesker forklarer klart nok, hvad der er essensen af ​​dette fænomen, hvad er dets betydning. Derfor vil vi forsøge en sådan forklaring.

Essensen kort fortalt

Det hele startede i 1991, da den finske studerende Linus Torvalds gjorde kernekoderne til det nye Linux-operativsystem offentligt tilgængelige. Hvorfor i det fri? Fordi han støttede. Men du ved det sikkert allerede (eller finder nemt ud af det). Vi vil være opmærksomme på punkter, der kræver klar klassificering.

Linux

Linux er ikke et styresystem, men bare en kerne. Et sæt softwareløsninger, der er nødvendige for at starte en computer og dens komponenters funktion ("hardware"), grundlaget for andre programmers funktion.

GNU

GNU - sæt simple applikationer, som eksisterede allerede før fremkomsten af ​​ovennævnte kerne. Disse programmer tillader en person at udføre i det mindste en vis interaktion med computeren og ikke bare stirre på skærmen. Kildekoden er selvfølgelig også åben.

GNU/Linux er et OS, ikke kun en kerne. I stedet for GNU kan der være noget andet, for eksempel Dalvik i Android.

Chauffører

Teknologien udvikler sig, antallet af computerhardware vokser, udstyr udvikler sig. Og hvert produkt har brug for en driver for at fungere. Så nogle drivere er skruet direkte til kernen. Hvis de er gratis (gratis software), som GNU og Linux, så er koderne helt sikkert åbne.

Nå, når der ikke er nogen passende gratis drivere, så kan der ikke gøres noget, du skal installere proprietære. Hvorvidt deres koder er åbne afhænger kun af hardwareproducenterne.

Ansøgninger

Brugerdefinerede applikationer klassificeret som Open Source produceres ofte i versioner til forskellige operativsystemer. De er ikke en del af Linux. Sandt nok, nogle er standard for en bestemt distribution eller grafisk shell, men er ikke en del af kernen.

Koderne for alle muligheder er naturligvis åbne - for alle understøttede operativsystemer. Den samme situation gælder for forskellige forsyningsselskaber.

Hvem laver det

Linux-kernen bliver forbedret af en gruppe entusiaster. Nogle gange deltager Linus Torvalds selv. Kernekoden, pakket i et arkiv, kan downloades fra kernel.org til efterfølgende uafhængig kompilering.

Drivere, hvis de er gratis, er også ofte lavet af fællesskaber. Til printer, scanner, videokort, Wi-Fi adapter... Generelt er der meget for hvad.

For eksempel Gutenprint-pakken, som er et helt sæt drivere til mange printermodeller. Desuden er udskriftskvaliteten ofte sammenlignelig med de indikatorer, der produceres ved brug af "native" drivere fra producenter.

Nogle gange åbner hardwareproducenter selv koden under en passende licens, såsom GPL eller BSD. Sådanne begivenheder forårsager normalt ubeskrivelig glæde blandt Open Source-tilhængere.

Som du måske har gættet, oprettes brugerdefinerede applikationer også enten af ​​fællesskaber eller af individuelle entusiaster. Kommercielle virksomheder kan dog også godt lide at reklamere for sig selv ved at give befolkningen en del af deres produkter i form af Fri Software. Et slående eksempel: kontorpakke OpenOffice.org blev udgivet af Oracle i lang tid.

Desuden laver nogle virksomheder endda hele distributionssæt. Red Hat, SuSE, Xandros opkræver penge for brugsklare binære samlinger, men de har ikke ret til at skjule koderne. Det vil sige, at disse koder, uanset hvordan de behandles, skal forblive åbne. Dette er et krav for GPL-licensen.

Hvem bruger det

En programmør kigger på softwaren og tænker: "Det er en god ting, men det kan gøres bedre!" Downloader et arkiv med kode fra udviklerens websted og forbedrer det. Han får selskab af en gruppe specialister, der ønsker at deltage, og et nyt projekt er født.

Sådan fremstår "gafler" (fra det engelske "fork", som i I dette tilfælde oversat som "gren"). Nye programmer baseret på kodebasen af ​​eksisterende.

For eksempel fra god lydafspiller Amarok gjort endnu bedre - Clementine. Og fra OpenOffice.org-pakken af ​​kontorapplikationer - LibreOffice, som er i hastig udvikling og meget lovende.

Så hele operativsystemer klones ved hjælp af dette princip. Det gratis CentOS OS er kompileret ud fra kildekoderne til det betalte Red Hat Enterprise Linux. Selvfølgelig bider cheferne hos Red Hat sikkert i albuerne af frustration, men de kan ikke gøre noget, da de ikke ejer kildekoden.

I dette tilfælde kommer ændringen dog hovedsageligt ned på at fjerne registrerede logoer, men uden den obligatoriske åbenhed i koden, ville selve eksistensen af ​​CentOS i princippet være umulig.

Konklusion

Open source er et grundlæggende koncept for Linux i særdeleshed og for al fri software generelt. Koderne kan bruges til dine egne projekter, kontrolleres for harmløshed gennem fællesskabets indsats, studerede, forbedrede dine færdigheder ved at deltage i udviklingen, forbedrede og assisterede mennesker i deres ædle sag.

Der er ingen binær samling af software, der er vigtig for dig til en specifik GNU/Linux-distribution? Er driveren ikke inkluderet i kernen? Vi tog arkivet med kildekoden, pakkede det ud, læste samlevejledningen, kompilerede det, installerede det – og brugte det. Du er ikke afhængig af producenten, er ikke bundet til en bestemt operativ system- det er ægte frihed.

Tidligere udgivelser:

Opbygning af Linux-kernen
Hej kære læsere. I dag vil jeg fortælle dig om sådan en interessant aktivitet Hvordan man bygger Linux-kerne. Hvorfor skal du måske selv samle kernen? Faktisk kan der være mange grunde: behovet for at bruge yderligere funktioner kerner, optimer kernen til din computer, opdater kernen til den nyeste version. I denne artikel vil jeg demonstrere processen med at hente kildekoder, konfigurere, kompilere og installere Linux-kernen i systemet, som en del af løsningen af ​​problemet med at inkludere cryptoloop-understøttelse (loopback-krypteringsenheder) i kernen.

Henter kildekoden
Først og fremmest skal vi have kildekoden, dette kan gøres forskellige veje og fra forskellige kilder. Jeg foreslår kun at overveje to: systemdepoter, det officielle kernewebsted. Lagrene vil højst sandsynligt indeholde versioner af kernen, der er ældre end dem på det officielle websted, men disse kilder bør indeholde patches og rettelser fra producenten af ​​din Linux distribution. Denne tilgang er at foretrække, hvis du ikke har brug for nogen ny teknologi eller en funktion, der kun understøttes af nyere kerner. Du kan se alle versioner af kernekilderne, der er indeholdt i arkiverne på dit system ved at indtaste i terminalen (sandt for Ubuntu Linux, pakkenavnet kan variere i andre distributioner):

Apt-cache søg linux-source

Kommandoen viser de tilgængelige pakker:


Som du kan se, har jeg kun den nuværende versionspakke og 3.5 versionspakken (faktisk Nuværende version kerner er også 3.5). For at udvide listen over tilgængelige kerner på denne måde, er det værd at forbinde yderligere depoter. Vi kan få kernen med kommandoen: sudo apt-get install linux-source

linux-source - navnet på kildepakken, det kan være anderledes i dit tilfælde.
Når kommandoen er fuldført, vil en fil dukke op i mappen /usr/src, i mit tilfælde - linux-source-3.5.0.tar.bz2. Lad os gå til mappen, pakke arkivet ud og for nemheds skyld oprette et symbolsk link:

Cd /usr/src sudo tar -xjvf linux-source-3.5.0.tar.bz2 sudo ln -s linux-source-3.5.0 linux

Hvis du har brug for den seneste version af kernen, kan du altid downloade den fra webstedet kernel.org. Det er værd at bemærke, at hjemmesiden er udformet som stabile versioner kerner og versioner beregnet til test og modifikation (normalt indeholder deres navn forkortelsen "RC" - Release candidate). Hvis du ikke vil have unødvendige problemer med systemet, råder jeg dig til at downloade den stabile version:

Lad os gemme arkivet med kilderne i mappen /usr/src. For at pakke det resulterende arkiv ud skal du muligvis installere yderligere hjælpeprogrammer:

Sudo apt-get install xz-utils

Nu, som i tilfældet med at downloade kernen fra arkiverne, skal vi pakke kildearkivet ud og oprette et link:

Cd /usr/src sudo tar -xpJf linux-3.8.5.tar.xz sudo ln -s linux-3.8.5.tar.xz linux

Konfiguration og kompilering.
Nu kommer vi til den mest interessante del. Inden vi går i gang, lad os installere et par ekstra pakker:

sudo apt-get install build-essential kernel-package libncurses-dev

Vi vil skabe ny konfiguration, baseret på den kerne, der i øjeblikket bruges af systemet:

Cd /usr/src/linux sudo lave oldconfig

Hvis du konfigurerer en nyere version af kernen, end den er til stede i systemet, så er det sandsynligt, at den indeholder parametre, der ikke er i konfigurationen af ​​den aktuelle kerne. I dette tilfælde vil programmet bede dig om at foretage et valg; du kan forlade standardværdierne ved blot at trykke på Enter-tasten. Under alle omstændigheder er konfigurationen endnu ikke færdig. Nu kan vi foretage de indstillinger, vi har brug for, gennem menuen til oprettelse af konfiguration:

Sudo lave menuconfig

Konfigurationsprogrammet starter i terminalen:

Her er konfigurationsmulighederne opdelt i sektioner for at gøre dem nemmere at navigere. Som jeg sagde ovenfor, skal jeg inkludere cryptoloop-understøttelse i kernen. For at gøre dette skal du gå til afsnittet "Enhedsdrivere" og derfra til underafsnittet "Bloker enheder":

Vi finder parameteren "Cryptoloop Support", ved siden af ​​er der bogstavet "M", hvilket betyder, at understøttelse af krypteringsenheder vil blive tilføjet som et kernemodul, der kan aktiveres med modprobe-kommandoen. Vi skal inkludere understøttelse af denne teknologi direkte i kernen, så den altid understøttes. Vi flytter fokus til parameteren "Cryptoloop Support" og trykker på mellemrumstasten. Bogstavet "M" skal erstattes af symbolet "*", det betyder, at understøttelse af denne teknologi vil blive "hardwired" i kernen. Vær forsigtig, et mellemrum betyder, at teknologien slet ikke bliver understøttet.

Tryk på "Tab"-tasten og klik på "Afslut", indtil du bliver bedt om at gemme ændringerne:

Vi svarer "Ja". Vi har gennemført konfigurationen med succes!
Lad os begynde at kompilere. Først sletter vi de resterende filer fra tidligere samlinger; hvis du starter samlingen for første gang, er det ikke nødvendigt at køre denne kommando: sudo make-kpkg clean

Lad os starte kompileringen:

Sudo make-kpkg -j4 --initrd --append-to-version=-mykernel kernel_image kernel_headers

J4 - flag angiver, hvor mange tråde der skal bruges til kompilering. Vil i høj grad fremskynde kompileringen multi-core processorer. Tallet 4 her angiver 4 tråde. Installer lige så mange tråde som antallet af kerner i din processor, som systemet "ser".
-mykernel - et præfiks der indikerer at kernen blev kompileret manuelt, du kan ændre det, det påvirker faktisk ikke noget.

Nu er kompileringsprocessen begyndt. Det kan tage fra 10 minutter til flere timer afhængigt af hvor kraftfuld din computer er:

Installation af kernen på systemet

Efter kompileringen er færdig, skulle to filer med filtypenavnet "deb" vises i mappen /usr/src. De er installationspakker til vores nye kerne og kan installeres ved hjælp af dpkg-værktøjet:

sudo dpkg -i linux-image-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb
sudo dpkg -i linux-headers-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb

Tillykke! Kernen er installeret, nu vil systemet starte med denne kerne som standard, men hvis du har problemer med den nye kerne, kan du altid starte med den gamle ved at vælge den på opstartsskærmen - Grub. Med dette afslutter jeg dagens artikel og ønsker jer succes, kære læsere!