Gömülü Linux
  • Giriş
  • Linux Çekirdeği
    • Gömülü Sistemlerdeki Kullanımı
    • Geliştirme Süreci ve Versiyonlar
    • Kod Sözdizim Rehberi
    • Konfigürasyon Süreci ve Kbuild Sistemi
    • Derleme ve Çapraz Derleme
    • Initramfs İmajının Eklenmesi
    • U-boot İmajı Haline Getirilmesi
  • Gömülü Sistemlerde Boot Yükleyiciler
    • U-boot
    • RedBoot
    • ARM Mimarisinde Açılış Süreci
  • Linux Açılış Süreci
    • Kernel Açılış Süreci
    • Kullanıcı Kipine Geçiş - Init Süreci
  • Kök Dosya Sistemi Oluşturma
  • Initramfs İle Erken Kullanıcı Kipi
  • Devtmpfs Dosya Sistemi
  • NfsRoot Çalışma Yöntemi
  • Çapraz Derleme ve Gerekli Ekipmanlar
  • NOR, NAND, eMMC ve Flash Tabanlı Depolama
  • Memory Technology Device - MTD Katmanı
  • Unsorted Block Images - UBI Katmanı
  • Gömülü Sistemlerde Kullanılan Dosya Sistemleri
    • JFFS2 Dosya Sistemi
    • YAFFS2 Dosya Sistemi
    • UBIFS Dosya Sistemi
    • Cramfs Dosya Sistemi
    • Squashfs Dosya Sistemi
    • Minix Dosya Sistemi
    • FAT Dosya Sistemi
    • Ext2,3,4 Dosya Sistemi
  • Watchdog Kullanımı
  • CPU Frequency Scaling
  • Buildroot
  • Android Platformu
    • Geliştirme Ortamının Hazırlanması
    • İnşa Süreci
  • Sistem Çağrıları
  • I2C Protokolü
    • I2C Protokolünün Tanıtılması
    • Linux Altında I2C İşlemleri
    • Board Seçimi ve İlk İşlemler
    • Sıcaklık Sensörünün Seçilmesi
    • Sıcaklık Değerinin Yazılımsal Olarak Elde Edilmesi
  • Strace Kullanımı
  • GNU Build Sistemi Araçları
    • Make
    • Autoconf, Automake
  • Orange Pi Zero
    • Orange Pi Zero Teknik Özellikleri
    • Gerekli Araçların Elde Edilmesi
    • U-boot Derleme Süreci
    • Kernel Derleme Süreci
    • Wifi Desteği - Problemli Senaryo Örneği
    • Dosya Sisteminin Hazırlanması
    • SD Kartın Hazırlanması
    • Cihazın Açılması
  • Raspberry Pi
    • Raspberry Pi 2 Teknik Özellikleri
    • Açılış Süreci
    • Gerekli Araçların Elde Edilmesi
    • Kernel Derleme Süreci
    • U-boot Derleme Süreci
    • Dosya Sisteminin Hazırlanması
    • Cihazın Açılması
    • NFS Root Çalışma
    • Sistem Konfigürasyonu
    • Raspberry Pi 3
  • Board Spesifik Kılavuzlar
    • Hawkboard
    • Olimex A20
    • TI DM6446 EVM
    • BeagleBoard
    • BeagleBoneBlack
    • Savage Board
  • EKLER
    • Seri Konsol Kullanımı
    • TFTP Sunucu Kurulumu
    • NFS Sunucu Kurulumu
    • TI işlemcilerinde DSP kullanımı
      • C6Run
      • DSP Testi
    • Ubuntu Sanal Makine Performansı
Powered by GitBook
On this page
  • Önyükleyici (Bootloader)
  • Ayar Dosyası (Script file)
  • Çekirdek (Kernel)
  • Cihazın Mikro SD Üzerinden Açılması

Was this helpful?

  1. Board Spesifik Kılavuzlar

Olimex A20

PreviousHawkboardNextTI DM6446 EVM

Last updated 5 years ago

Was this helpful?

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
Olimex
olimex-a20