Olimex A20

olimex-a20

Olimex firması tarafından geliştirilen board, Dual-Core Allwinner A20 Cortex-A7 işlemcisiyle gelmektedir. Sadece yazılım değil, donanım da açık bir platform olarak geliştirilmekte ve tüm tasarım dosyaları paylaşılmaktadır.

Kartın tam adı A20-OLinuXino-MICRO olarak geçmektedir fakat dokümanda kısaca Olimex A20 adını kullanacağız.

Temel olarak aşağıdaki bileşenlere sahiptir.

İşlemci Allwinner A20 Cortex-A7
Çekirdek Sayısı 2
DSP Yok
GPU Mali 400
RAM 1 GB DDR3
NAND Yok
MMC/SD Var
MicroSD Var
Ethernet Var
VGA Var
HDMI Var
Konsol Var

Bu bölümde, cihaz için önyükleyici ve işletim sistemi çekirdeğinin nasıl derlendiğinden, sonrasında cihazın mikro SD kart üzerinden nasıl açıldığından bahsedeceğiz.

İlk olarak, önyükleyici ve çekirdeği nasıl edinip derleyebileceğimize bakalım.

Not: Derleme sürecinde armhf hedefli GNU C çapraz derleme araçlarını kullanacağız. Paket yöneticinizi kullanarak gerekli araçları edinebilirsiniz, Ubuntu için gcc-arm-linux-gnueabihf paketini kurabilirsiniz.

Başka bir derleyici kullanıyorsanız, önyükleyici ve çekirdek derleme aşamalarında, derleyicinize ait öneki (prefix) kullanmalısınız.

Önyükleyici (Bootloader)

Olimex A20, U-Boot önyükleyicisini kullanmaktadır.

git clone https://github.com/linux-sunxi/u-boot-sunxi.git
cd u-boot-sunxi/
make CROSS_COMPILE=arm-linux-gnueabihf- A20-OLinuXino-Micro_config
make CROSS_COMPILE=arm-linux-gnueabihf-

Bu aşamada ana dizinde u-boot.img ve spl altında sunxi-spl.bin dosyaları oluşmuş olmalıdır. sunxi-spl.bin dosyası, u-boot önyükleyicisini yüklemekten sorumlu, göreli olarak daha küçük olan önyükleyici olup SPL (Secondary Program Loader) olarak isimlendirilmektedir.

Ayar Dosyası (Script file)

GPIO atamaları, DDR bellek parametreleri ve video çözünürlüğü gibi önemli bazı ayar parametreler, çekirdek kodu yerine, bir veri dosyasında tutulabilmektedir. Bu sayede çekirdek kodu her defasında yeniden derlenmeksizin, bu parametreler üzerinde sonradan değişiklik yapılabilmektedir.

Gerekli ayar dosyası ve araçları aşağıdaki gibi sisteminize indirebilirsiniz.

git clone git://github.com/linux-sunxi/sunxi-tools.git
git clone git://github.com/linux-sunxi/sunxi-boards.git

İlk olarak sunxi-tools dizininde fex2bin uygulamasını derleyecek, sonrasında bu uygulamayı kullanarak, sunxi-boards dizinindeki a20-olinuxino_micro.fex isimli ayar dosyasını, çekirdeğin okuyabileceği, uygun formata dönüştüreceğiz.

cd sunxi-tools
make fex2bin
cd ../sunxi-boards/
../sunxi-tools/fex2bin sys_config/a20/a20-olinuxino_micro.fex script.bin

Bu aşamada hedeflediğimiz script.bin dosyasını elde etmiş olduk.

Çekirdek (Kernel)

Çekirdek kodunu aşağıdaki gibi indirip derleyebilirsiniz.

git clone -b sunxi-3.4 https://github.com/linux-sunxi/linux-sunxi.git
cd linux-sunxi/
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun7i_defconfig
make -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules

Bu aşamada u-boot tarafından yüklenebilecek çekirdek imajı uImage ve gerekli modüller oluşmuş olmalıdır. Daha sonra dosya sistemine taşıyacağımız modülleri, aşağıda gösterildiği gibi bir dizin altına toplayabiliriz. Modülleri taşıyacağımız dizini, aşağıdaki örnek için, modules olarak isimlendirdik.

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=modules modules_install

Bu işlem sonrasında, ana dizinden itibaren, çekirdek imajı ve gerekli modüller aşağıdaki gibi bir dizin yolunda bulunacaktır. Çekirdek versiyonuna göre xyz değerleri değişmektedir.

arch/arm/boot/uImage
modules/lib/modules/3.4.x-y-z

Şimdi cihazı mikro SD üzerinden nasıl açabileceğimize bakalım.

Cihazın Mikro SD Üzerinden Açılması

Mikro SD kartın yerleşimi genel olarak aşağıdaki gibi olacaktır.

Başlangıç Boyut Kullanım
0 8KB Bölümlendirme tablosu
8 24KB SPL önyükleyicisi
32 512KB u-boot
544 128KB Çevre değişkenleri
672 352KB Saklı alan
1024 - Dosya sistemi için boş alan

Not: Kart üzerinde hem MMC/SD hem de mikro SD bulunmaktadır. Cihaz yalnız mikro SD üzerinden açılabilmektedir, açılış sürecini anlattığımız aşağıdaki bölümlerde çoğnlukla mikro SD yerine yalnız SD ifadesini kullandık.

SD kart üzerinde, ilk 1MB alandan sonra sırasıyla FAT32 ve ext4 olarak formatlayacağımız iki adet bölüm oluşturacağız. FAT32 bölümüne çekirdek imajı ve ihtiyaç duyduğu ayar dosyasını, ext4 bölümüne ise dosya sistemini kopyalayacağız. İlk 1MB'lık alana ise önyükleyicileri yazacağız. SD kartın hedeflediğimiz son durumunu görsel olarak aşağıdaki gibi gösterebiliriz.

Şimdi SD kart üzerine bu işlemleri nasıl yapabileceğimize bakalım.

Sonraki işlemleri kolaylaştırmak için SD karta ilişkin dosya düğümünü ve bölümlendirmeye ilişkin isim bilgisini sırasıyla CARD ve PARTITION isimli çevre değişkenlerinde tutalım. SD karta ilişkin dosya düğümü dahili bir SD okuyucu ya da USB bağlantılı bir kart okuyucu kullanılmasına göre değişecektir. Dahili bir SD okuyucu için kart ve bölümlendirme bilgisi aşağıdaki gibi tanımlanabilir.

export CARD=/dev/mmcblk0
export PARTITION=p

SD kartın ilk 1MB'lık alanını temizledikten sonra SPL ve u-boot önyükleyicilerini aşağıdaki gibi yazabiliriz.

dd if=/dev/zero of=${CARD} bs=1M count=1
dd if=sunxi-spl.bin of=${CARD} bs=1024 seek=8
dd if=u-boot.img of=${CARD} bs=1024 seek=40

Şimdi SD kart üzerinde, sonrasında FAT32 ve ext4 olarak biçimlendireceğimiz, iki adet bölüm oluşturalım. Bunun için sfdisk aracını kullanan aşağıdaki betiği kullanabilirsiniz.

#!/bin/sh
CARD=/dev/mmcblk0
sfdisk -R ${CARD}
cat << EOT | sfdisk --in-order -L -uM ${card}
1,16,c
,,L
EOT

Yeni oluşan bölümleri sırasıyla FAT32 ve ext4 olarak biçimlendirelim.

mkfs.vfat ${CARD}${PARTITION}1
mkfs.ext4 ${CARD}${PARTITION}2

Bu aşamadan sonra açılış bölümü olarak kullanacağımız FAT32 bölümüne, daha önce derlediğimiz, uImage ve script.bin dosyalarını, ext4 bölümüne ise çekirdek modüllerini içeren dosya sistemini yazmalıyız.

Bu işlemlerden sonra cihazı hazırladığımız SD kart ile açarak u-boot komut satırına düşebiliriz. Açılış sürecinde sırasıyla ROM Bootloader, SPL ve u-boot çalışacaktır. u-boot komut satırına düştükten sonra, çekirdeğe geçirilecek komut satırı argümanlarını oluşturup sonrasında çekirdek kodunu güvenli bir adrese çekip çalıştırabiliriz.

setenv bootargs console=ttyS0,115200 init=/bin/sh root=/dev/mmcblk0p2 rootwait panic=10
fatload mmc 0 0x48000000 uImage 
bootm 0x48000000

results matching ""

    No results matching ""