Produkty Novinky Články Návody Kontakty

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:
  1. Otevřeme si emulátor terminálu nebo se přepneme do konzole Linuxu.
  2. Stáhneme si patch at91Informationhttp://maxim.org.za/AT91RM9200/2.6/2.6.38-at91.patch.gz, který přidá podporu pro mikrokontroléry řady SAM9, a patch ucsimply-sam9260Informationhttp://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.
  3. 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.
  4. Rozbalíme stažený archivní soubor jádra. Vznikne adresář linux-2.6.38.8.
    $ tar xjf linux-2.6.38.8.tar.bz2
    
  5. 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
    
  6. Aplikujeme patch pro modul uCSimply SAM9260:
    $ zcat ../2.6.38-add-ucsimply_sam9260-support.patch.gz | patch -p1
    
  7. Nastavíme si proměnné prostředí pro křížovou kompilaci jádra:
    $ export ARCH=arm  
    $ export CROSS_COMPILE=arm-none-linux-gnueabi-
    
  8. Provedeme výchozí konfiguraci jádra pro modul SAM9260:
    $ make ucsimply_sam9260_defconfig
    
  9. 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
  10. 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 
    
  11. 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.