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:

Figur 2. Val av realtids-läge
I Kernel Hacking-sektionen är det ett val som skall kryssas bort och det är
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
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:
- Processor type and features, samt
- Kernel Hacking
- High Resolution Timer Support - ska finnas
- High Resolution Timer resolution (i nanosekunder) - ska ställas till 1000
- Processor family - till CPU-typen i systemet (t ex Pentium 4 M)
- Preemption mode - se nedan.
- Timer frequency - sätts till 1000Hz

Figur 2. Val av realtids-läge
I Kernel Hacking-sektionen är det ett val som skall kryssas bort och det är
- Kernel debugging
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:
<< Home
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
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
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.
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
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. ;)
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
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
<< Home