Tjänster & Utbildning

Solutions
Home > Tjänster & Utbildning > Tekniska områden > Enea Linux Competence Center > Nu kompilerar vi
Mer information Tipsa en kollega Skriv ut

Nu kompilerar vi

Ladda ner PDF:en.

Nu kompilerar vi

Välja version
Välja konfiguration
Slå av och på
Bygg kärnan
Ladda målsystemet
I verkligheten
Utan lödning

 

I det förra kapitlet beskrev vi i korthet vilka olika delar kärnan i ett Linuxsystem består av. Nu är det dags att bygga en egen, anpassad kärna med de verktyg vi har. Vi skall ladda hem källkoden och konfigurera den innan kompileringen så att resultatet blir en Linuxkärna som fungerar i vårt målsystem. Källkoden till Linux kärna finns att hämta på många ställen via Internet, men det finns en central plats, www.kernel.org, där det alltid går att hitta den senaste versionen. För oss här i Norden finns även en bra spegel på ftp.sunet.se. Med protokollen ftp eller http kan koden laddas ned och lagras i en hemkatalog. Koden ligger förpackad i komprimerade arkivfiler för olika versioner av kärnan. För 2.6.20, den senaste kärnan när detta skrevs, är den kompletta länken på sunet ftp://ftp.sunet.se/pub/Linux/kernel.org/linux/kernel/v2.6/linux-2.6.20.1.tar.bz2 och storleken är drygt 42 Mbyte.

 

Välja version
När vi letat rätt på katalogen med arkivfilerna kommer frågan om vilken version som vi skall använda. Svaret på detta beror lite på vilket vårt målsystem är och vilket stöd som finns i ”standardkoden” samt vilka tilläggsfiler vi måste komplettera med. Normalt är en kärna av relativt högt versionsnummer, d v s ny version, att föredra.

 

Välja konfiguration
För en del målsystem, som Linksys NSLU2, finns det färdiga konfigurationer och stöd i standardkoden. Det gör konfigureringen enkel, man behöver bara ladda ned, konfigurera och bygga. Andra system som t ex Atmels referenskort behöver extra filer som finns tillgängliga som patchar hos leverantörer eller öppna arbetsgrupper som formats skapats på nätet. Behöver du göra detta är det viktigt att du laddar ned en version av källkoden till kärnan som överensstämmer med vad patcharna är gjorda för. Patcharna läggs, som jag nämnt tidigare, ovanpå den ursprungliga källkoden och det är lätt att inse att patchen måste hitta exakt det mönster, på exakt den raden den förväntar sig, i koden som den skall ersätta annars misslyckas patchningen.
Nu är det dags att dyka ner i kallvattnet, ladda ned källkoden och packa upp den. Ladda ned eventuella patchar och lägg in dem på koden. En beskrivning av för kommandot
”patch” finns i varje Linux-dator. Skriv bara ”man patch” så kommer det flera sidor med information.

 

Slå av och på
När koden nu är på plats skall vi konfigurera bygget av koden så att den passar vår hårdvara och de önskemål vi har. Här finns alla möjligheter att påverka innehållet och storleken på kärnan. Att konfigurera är enkelt, det är bara att i ett grafiskt eller textbaserat verktyg, ”slå av eller på” de olika funktionsval som kärnan innehåller. Lite svårare är det däremot att förstå vad allt som går att konfigurera betyder och vad de olika valen innebär. Börja med att försöka att använda någon av de färdiga standardkonfigurationer som finns. Försök inte att konfigurera den ”perfekta kärnan” på en gång. Gå varligt fram och utnyttja att det för många kort och hårdvaror finns en standardkonfiguration och konfigurera inte allt själva. Tänk på att ni skall ge omkring 8 miljoner rader kod en mall att gå efter vid kompileringen.

 

Bygg kärnan
Äntligen är det dags att bygga kärnan. Även på en snabb PC kan det ta flera minuter, ca 5 minuter på en 3 GHz P4. Som resultat av kompileringen får vi en zImage eller bzImage som är själva Linuxkärnan. Till detta har det ofta även byggts ett antal dynamiskt laddbara moduler, ”.ko-filer”, vilka innehåller ytterligare funktionalitet som kärnan kan ladda in vid behov under körning. Kärnan, zImage, kopieras sedan till målsystemet via serieport, nätverk eller kanske flyttbart medium som en USB-sticka. På målsystemet kan kärnan placeras direkt i RAM eller permanent i flash.

 

Ladda målsystemet
Under den här tidiga utvecklingsfasen och även i en del systemkonfigurationer med begränsad mängd flash-minne är en minnessnål lösning att boot-laddaren alltid hämtar kärnan över nätverket, med boot-protokollet TFTP, från en server direkt till RAM. På målsystemets konsol, som oftast är serieporten, ser vi status från kärnan när den startar och i slutet av sin uppstart försöker kärnan montera ett filsystem och starta systemapplikationer. Mer om detta i nästa kapitel.

 

I verkligheten
Här är ett exempel på hur en kärna byggs för vår Linksys NSLU2. Hämta arkivfilen
linux2.6.20.1.tar.bz2 med källkoden till Linuxkärnan från ftp.sunet.se till er hemkatalog. Packa upp:

linux>tar xfj linux-2.6.20.1.tar.bz2
> cd linux-2.6.19/

Sätt sökvägen till verktygskedjan för ARM som ni byggt tidigare:

linux> export PATH=/opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-unknown-linux-gnu/bin/:$PATH

Välj en standardkonfiguration för den CPU-typ som sitter i NSLU2:

linux> make ARCH=arm ixp4xx_defconfig

Konfigurera kärnbygget och välj NSLU2. I ett X11-baserat värdsystem väljer vi ”xconfig” nedan men det går också att använda en traditionell textbaserad konfigurering ”menuconfig” i ett vanligt terminalfönster:

>make ARCH=arm xconfig

Nu kan vi konfigurera bygget för NSLU2. Vi väljer i menyn först ”System type” och vidare ”Intel IXP4xx Implementation Options”. Sedan markerar vi ”Linksys NSLU2”. Övriga IXP4xx-val kan vi avmarkera. Därefter bygger vi kärnan:

> make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnu-

För att sedan köra den nya kärnan i en NSLU2 finns olika sätt att ladda ned kärnan men en vanlig metod är över nätverket. För att komma åt boot-laddaren RedBoot i NSLU2 går det att använda telnet. Detta kräver en del uppsättningar av PC:n. Mer om det kan läsas på http://www.nslu2linux.org/wiki/HowTo/TelnetIntoRedBoot. Vi vill också se att boot-laddaren startar kärnan så vi behöver en systemkonsol. För NSLU2 finns ingen serieport att ansluta direkt emot, däremot kan man plocka isär den och åstadkomma detta med lite lödning och några extra kretsar. Läs på sidan http://www.nslu2-linux.org/wiki/HowTo/AddASerialPort om ni vill komplettera er NSLU2 med en serieport. Här skall vi inte glömma att berätta att om ni börjar löda
och modifiera er NSLU2 finns inga garantier kvar. Går något fel är ni helt på egen hand.

 

Utan lödning
För de som vill anpassa sin NSLU2 utan att löda finns också andra och enklare sätt än att bygga kärnan själv, ni laddar helt enkelt om er NSLU2 med ny firmware som tillåter att ni kommer åt att modifiera ert system. Om ni följer instruktionerna som finns på sidan http://www.nslu2-linux.org/wiki/HowTo/InstallUnslungFirmware kommer ni att på en kvart ha full kommunikation med er NSLU2 via ssh på ert lokala nätverk. Vad ni gör är att du utnyttjar programmet ”upslug2” på er Linux-dator och manuellt ställer din er NSLU2 i uppgraderingsläge. Upslug2 kommer att byta fabriksinstallationen mot en ny image som ni har laddat ner från http://www.slugfirmware.net/. På nerladdningssidan finns också information om andra varianter utöver Unslung, se exemplet nedan, som ni kan välja att ladda er NSLU2 med. Efter ett lyckat byte av firmware i er NLSU2 kommer den att svara så här när ni loggar in via ssh:

Welcome to Unslung V2.3R63uNSLUng-6.8-beta
BusyBox v0.60.4 (2005.03.22-06:52+0000) Built-in shell (ash)
Enter ’help’ for a list of built-incommands.
#

I nästa kapitel berättar vi om hur kärnan efter sin initiering försöker montera ett filsystem och starta systemapplikationer.

 


Konfigureringsmenyn på värddatorn.