Linuxové jádro (kernel)
Standardní zdrojový kód linuxového jádra neobsahuje ani podporu pro modul uCSimpy SAM9260 ani pro mikrokontroléry řady SAM9 od firmy Atmel. Tato podpora je řešena pomocí patchů (úprav), které se aplikují na zdrojový kód jádra před konfigurací a kompilací jádra.
Linuxové jádro budeme kompilovat nástroji GNU/Linux z balíku CodeBench Lite Edition. Následující návod je platný pro jádro verze 2.6.38. U novějších jader je pravděpodobný problém s aplikací patchů.
Než začneme:
- Nainstalujeme si balíček uboot-mkimage (pokud již není nainstalovaný), který je potřeba pro překonvertování výsledného binárního souboru jádra do podoby srozumitelné pro zavaděč U-Boot. Instalaci provedeme pod účtem superuživatele root:
# apt-get update # apt-get install uboot-mkimage
Postup:
- Otevřeme si emulátor terminálu nebo se přepneme do konzole Linuxu.
- Stáhneme si patch at91http://maxim.org.za/AT91RM9200/2.6/2.6.38-at91.patch.gz, který přidá podporu pro mikrokontroléry řady SAM9, a patch ucsimply-sam9260http://www.ucsimply.cz/products/modsam9260/, který přidá podporu pro modul uCSimply SAM9260. Oba patche jsou kompatibilní pouze s verzí jádra 2.6.38. Patch ucsimply-sam9260 lze aplikovat pouze na jádro 2.6.38 s patchem at91.
- Do adresáře, kde jsou stažené patche, si stáhneme zdrojové kódy jádra 2.6.38 přímo od vývojářů:
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.8.tar.bz2
Poznámka: archivní soubor s jádrem se stáhne do aktuálního adresáře. - Rozbalíme stažený archivní soubor jádra. Vznikne adresář linux-2.6.38.8.
$ tar xjf linux-2.6.38.8.tar.bz2
- Na zdrojový kód jádra aplikujeme AT91 patch (pro podporu mikrokontrolérů SAM9):
$ cd linux-2.6.38.8/ $ zcat ../2.6.38-at91.patch.gz | patch -p1
- Aplikujeme patch pro modul uCSimply SAM9260:
$ zcat ../2.6.38-add-ucsimply_sam9260-support.patch.gz | patch -p1
- Nastavíme si proměnné prostředí pro křížovou kompilaci jádra:
$ export ARCH=arm $ export CROSS_COMPILE=arm-none-linux-gnueabi-
- Provedeme výchozí konfiguraci jádra pro modul SAM9260:
$ make ucsimply_sam9260_defconfig
- Případně provedeme úpravu konfigurace jádra oproti výchozí konfiguraci pro modul SAM9260:
$ make menuconfig
Poznámka: Pokud chceme jádro pro scénář NAND_ONLY, kdy je celý firmware kompletně pouze v NandFlash, tak musíme zatrhnout volbu:System Type-->Atmel AT91 System-on-Chip-->uCSimply AT91SAM9260 module:[*] NandFlash only mtd partition layout - Zkompilujeme jádro do podoby komprimovaného souboru, tzv. uImage, který podporuje U-Boot:
$ make uImage -j2
Při úspěšném dokončení kompilace jádra obdržíme hlášení:SYSMAP System.map SYSMAP .tmp_System.map OBJCOPY arch/arm/boot/Image Kernel: arch/arm/boot/Image is ready AS arch/arm/boot/compressed/head.o GZIP arch/arm/boot/compressed/piggy.gzip CC arch/arm/boot/compressed/misc.o CC arch/arm/boot/compressed/decompress.o SHIPPED arch/arm/boot/compressed/lib1funcs.S AS arch/arm/boot/compressed/lib1funcs.o AS arch/arm/boot/compressed/piggy.gzip.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready UIMAGE arch/arm/boot/uImage Image Name: Linux-2.6.38.8 Created: Thu Jun 14 16:56:24 2012 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1872748 Bytes = 1828.86 kB = 1.79 MB Load Address: 0x20008000 Entry Point: 0x20008000 Image arch/arm/boot/uImage is ready
- Výsledkem našeho snažení je soubor arch/arm/boot/uImage. Tento soubor je obraz jádra, který je U-Boot schopen zavést z paměti Data/NandFlash. Stačí jej nahrát do Data/NandFlash a můžeme bootovat do Linuxu.Poznámka: Produkty kompilace jádra můžeme smazat příkazem make distclean. Úklid zatím odložíme a provedeme jej až po sestavení kořenového souborového systému.