2006-10-03

 

Realtidskärna - Ubuntu

Att kompilera sin egen kärna är inte alltid så enkelt. Det finns dock några knep för att underlätta för oss Ubuntu-användare också.

Men först måste vi skapa förutsättningar för att kunna kompilera kärnan.


FÖRUTSÄTTNINGAR

För att över huvud taget kunna kompilera något behöver vi paketet build-essential som är ett meta-paket som installerar alla nödvändiga utvecklingspaket för att kompilera, och för att konfigurera kärnan krävs paketet libncurses5-dev för att få ett fint litet menysystem att rodda runt i.

Installera dessa genom att skriva:

sudo apt-get install build-essential libncurses5-dev

i en terminal.


PATCHA KÄRNAN

Sen är det dags att plocka hem källkoden till kärnan och allt som hör till. Detta gör vi genom att ta ner den senaste RT-patchen från Ingo Molnars hemsida

http://people.redhat.com/mingo/realtime-preempt/

och välj näst senaste utgåva i katalogen older/.

Själv hämtade jag patch-2.6.17-rt8 och det har fungerat bra hittills.

Sen är det dags att hämta källkoden till kärnan. Då gäller endast "hela" versionsnummer, alltså 2.6.17, inte 2.6.17.1, inte 2.6.17.8 eller något annat. Dessutom är det bara den officiella kärnan från kernel.org som ska användas, inte Ubuntus egenpaketerade.

Denna finns tillgänglig som linux-2.6.17.tar.gz i

ftp://ftp.kernel.org/pub/linux/kernel/v2.6/

Spara den i /usr/src och utför följande kommandon för att packa upp källkodsträdet:

# tar zxvf linux-2.6.17.tar.gz
# mv linux-2.6.17 linux-2.6.17-rt8
# mv linux linux.old
# ln -s linux-2.6.17-rt8/ linux

För Ubuntu krävs dessutom en speciell patch för diskhanteringen (EVMS - Enterprise Volume Management System) som installeras på följande sätt:

# apt-get install kernel-patch-evms
# gunzip kernel-patches/diffs/evms-bd-claim/2.6-bd-claim.patch.gz

Kontrollera dessutom att källkoden för realtime-lsm inte ligger och skräpar någonstans, för då kommer inte kompileringen av kärnan att fungera. Detta kan göras genom att se huruvida det finns en katalog som heter något liknande /usr/src/modules/realtime-lsm med kommandot

ls /usr/src/modules/

Om den katalogen inte finns kan ni vara lugna.

Sen är det alltså dags att patcha. Det är viktigt att vi står i katalogen /usr/src/. För att göra ett testskott så provar vi med växeln --dry-run och ser så att det inte blir några fel:

# patch --dry-run -p1 < sökväg/till/patch-2.6.17-rt8

Om det inte blir det kan vi köra på med fullt drag. Om vi sparat patchen i /usr/src/-katalogen blir det sålunda:

# patch -p1 < /usr/src/patch-2.6.17-rt8

Vi gör samma procedur med evms-patchen när vi står i /usr/src/-katalogen:

# patch --dry-run -p1 < ../kernel-patches/diffs/evms-bd-claim/2.6-bd-claim.patch

och om det inte blev några fel, kör vi på den med:

# patch -p1 < ../kernel-patches/diffs/evms-bd-claim/2.6-bd-claim.patch


KONFIGURERA KÄRNAN

När detta väl är gjort ska vi kopiera den befintliga konfigurationsfilen för kärnan. Denna ligger i katalogen /boot och heter något i stil med config-2.6.xx-xx-386. Denna skall kopieras till filen /usr/src/linux/.config

För att få den senaste kör vi cp-kommandot såhär, under förutsättning att vi står i katalogen /usr/src/linux:

cp /boot/config-`uname -r` .config

Sen kör vi ett kommando för att konfigurera kärnan. Det som rekommenderas är:

make menuconfig

som gör att man får ett menysystem som är hyfsat lätt att navigera i som ser ut som nedan:


Figur 1. Bild på menuconfig

Här finns två menyalternativ som skall ändras i, nämligen:
Navigering sker med piltangenterna, val gör du med Enter-tangenten eller Mellanslag. I Processor type and features finns fem val som ska göras:
Det finns fyra val att göra gällande Preemtion-läge. För att få bästa möjliga förutsättningar rekommenderas (eller beordras, beroende på hur man ser det) det nedersta alternativet, Complete preemption:



Figur 2. Val av realtids-läge

I Kernel Hacking-sektionen är det ett val som skall kryssas bort och det är
Sen är det bara att trycka på Exit och svara Yes på att spara konfigurationen.


KOMPILERA KÄRNAN

För att kompilera kärnan i Debian-baserade system som Ubuntu behövs paketet kernel-package, vilket vi kan installera med

# apt-get install kernel-package

Sen, stående i /usr/src/linux, kör vi kommandona

# make-kpkg clean
# make-kpkg modules_clean
# make-kpkg --revision 1 --initrd kernel_image kernel_headers modules_image

och ber en stilla bön att det inte blir några fel någonstans.


INSTALLERA KÄRNAN

Blir det inte det, kan vi installera paketen genom att

# cd ..
# dpkg -i *2.6.17-rt8*.deb

Detta kommer att lägga kärnan högst upp i hierarkin i bootmanagern Grub, vilket innebär att om du inte trycker på Esc-knappen vid uppstart så kommer den att boota in i den nya RT-kärnan. Det kan vara bra att veta om det inte går så bra.

Genom att trycka på Esc-knappen vid Grub-prompten, får du upp en lista över de installerade kärnorna. Det är där möjligt att välja en gammal kärna om RT-kärnan vägrar att starta.


TA BORT KÄRNAN

För att ta bort RT-kärnan kan du skriva kommandot

# apt-get remove kernel-image-2.6.17-rt8 kernel-headers-2.6.17-rt8

Comments:
Mycket bra!

Annars finns det ett par färdiga kernals att installera om man vill från http://devlinuxbr.codigolivre.org.br/

Jättebra blog btw! Jag hittade den just nu och jag tycker mycket om den!

Ketil
 
Kanonbra.
Har aldrig tidigare lärt mig så mycket om musik på datorn som nu. Ett hål i mina kunskaper är hurvida det blir lika bra med ett inbyggt "ljudkort" som finns i exempelvis intels chipset 865GV, jämfört med om man införskaffade ett mer profesionellt ljudkort. Vilka rekomenderas?

Mankan
 
Kort svar: Nej, inte alls lika bra.

Längre svar: Signal/brus-förhållandet på billigare/integrerade kort är sämre än för semiprofessionella kort, vilket gör att du får sämre ljud in och ut ur datorn.

Om du sysslar med mjukvarusynthar och dylikt som aldrig kommer ut ur datorn innan det är "färdigt", så spelar det mindre roll, men så fort du ska spela in ljud från externa ljudkällor så blir det inte bra.

Ett billigt kort som fungerar bra med Linux är t ex M-Audios Audiophile 2496, som samplar i 24 bitar, i 96kHz. Det har fyra in- och 4 utgångar.
 
Tack för en mycket bra blogg!

Har tampats en del med Jack och färdiga realtidskärnor men inte lyckats få till det något vidare...
Din grundlighet och kunnighet imponerar!

Heder och tack!

Din ljudbroder i FOSS träsket

Thomas
 
Trevligt att höra Thomas! :)

Det framgick dock inte om du har lyckats den här gången, men jag hoppas att jag har kunnat hjälpa till på något sätt.

Angående min egen kunskap så tillgängliggör jag mest sånt som jag hittar på engelska till min svenska "publik". Förhoppningsvis lär man sig något på kuppen. ;)
 
jättebra guide! hade gärna funnit denna tidigare ;-)
jag var dock tvungen att stå i /usr/src/linux på mitt hardy heron 8.04 system när jag skulle patcha.
således patch -p1 < ../patch-2.6.17-rt8
peace
 
Skicka en kommentar



<< Home

This page is powered by Blogger. Isn't yours?