BeagleBoneBlack
Beagle Bone Black son zamanlarda popüler olan, 50$ mertebesindeki fiyatı ve genişleme imkanlarıyla öne çıkan bir geliştirme platformudur.
İşlemci | TI AM335x 1GHz ARM® Cortex-A8 |
---|---|
RAM | 512MB DDR3 |
Storage | 2GB beya 4GB 8-bit eMMC on-board flash |
GPU | 3D hızlandırıcı |
NEON Desteği | Var |
USB Host | Var |
USB Power | Var |
Micro SD Kart | Var |
Ethernet | Var |
HDMI | Var |
Konsol Kablosu | Yok, ayrıca 3.3V FTDI - TTL dönüştürücü kablosu alınmalı |
NAND Flash | Yok |
Konsol Kablosu
BeagleBone-Black versiyonunun beraberinde konsol kablosu gelmemektedir
Bootloader seviyesinde konsol erişimi için FTDI-TTL 3.3V USB dönüştürücü kablosuna ihtiyaç bulunmaktadır.
Çalışma Dizinin Hazırlanması
- Bu dokümanda kullanıcının ev dizini altında, beagle alt dizini oluşturulduğu varsayılmıştır:
$ mkdir $HOME/beagle
Linux kernel kaynak kodları beagle/kernel dizininde bulundurulacaktır
Buildroot kaynak kodları, beagle/buildroot dizininde bulundurulacaktır
Buildroot BeagleBoneBlack Kernel
Buildroot içerisinde BeagleBoard için hazırlanmış öntanımlı kernel derleme konfigürasyonu bulunmaktadır
Ancak Ağustos 2013 itibariyle, bu konfigürasyon ile çalışan BeagleBoardBlack kernel imajı üretmek mümkün değildir
Kernel derleme işleminin Buildroot dışında ayrıca yapılması gerekmektedir
Buildroot Kaynak Kodunun İndirilmesi
Buildroot kaynak kodları git üzerinden klonlanmalıdır:
$ git clone git://git.buildroot.net/buildroot
Out-Of-Tree build yöntemi ile $HOME/beagle
dizini altında build dizini içerisinde buildroot ana çalışma dizinimizi oluşturalım:
$ cd buildroot
$ make O=$HOME/beagle/build beaglebone_defconfig
İşlem bitiminde ana beagle çalışma dizininiz altında, build dizini oluşacaktır.
Bu noktadan sonra buildroot ile ilgili tüm işlemlerinizi, build dizini altında iken gerçekleştirmelisiniz:
$ cd $HOME/beagle/build
Buildroot Konfigürasyonu
Buildroot içerisinden çıkan beaglebone_defconfig dosyasında board ile ilgili temel ayarlar mevcuttur.
Bununla birlikte aşağıdaki temel başlıklar için konfigürasyon üzerinde düzenlemeler yapılmalıdır:
- Kullanılacak toolchain seçimi
- Dosyaların download edileceği dizinle ilgili düzenlemeler
- İşlem sonucunda oluşturulacak dosya sistemi tipi
- /dev yönetimi için tercih edilen yöntem
- Sistemde yer alması istenilen paketler
- Bunlar temel düzenlemeler olup, öncelikle bu başlıklara değinilecektir.
Toolchain Seçimi
Buildroot içerisinde toolchain seçiminde External Toolchain kullanımı önerilir. External Toolchain kullanılacağı belirtildikten sonra, toolchain tipi seçilmelidir
Genelde 3 toolchain tipi bulunur:
- Linaro Toolchain versiyonları
- Sourcery CodeBench Toolchain versiyonları
- Custom toolchain
BeagleBone Black için Linaro toolchain güncel versiyonu seçilmelidir. Sourcery CodeBench toolchain'leri henüz EABIhf ABI desteğine sahip olmadığından bu menüden seçilememektedir
Download Dizin Seçimi
Buildroot ile çalışırken, özellikle birden fazla projede buildroot kullanıldığında veya aynı projede farklı konfigürasyonlarda build işlemleri gerektiğinde, dosyaların her seferinde yeniden download edilmesi işlemleriyle vakit kaybetmemek için, genel bir download dizini belirtmekte fayda vardır.
Örneğimizde download dizini /opt/buildroot/downloads
şeklinde seçilmiş olup aşağıdaki komutlarla öncelikle bu dizini oluşturabilirsiniz:
$ sudo mkdir -p /opt/buildroot/downloads
$ sudo chown -R $USER /opt/buildroot/downloads
Dosya Sistemi Seçimi
Buildroot ile işlem sonunda cloop
, cpio
, cramsfs
, ext2
, jffs2
, romfs
, squashfs
, tar
ve ubifs
dosya sistemi imajları çıkartılabilir.
BeagleBone-Black üzerinden NAND flash değil, eMMC bulunduğundan ext4 gibi blok tabanlı aygıtlar üzerinde çalışan dosya sistemleri kullanılmalıdır.
Kernel Kaynak Kodunun İndirilmesi
Kaynak kodlar git üzerinden klonlanıp, 3.8 branch'i checkout edilmelidir:
$ git clone git://github.com/beagleboard/kernel.git
$ cd kernel
$ git checkout 3.8
$ ./patch.sh
$ cp configs/beaglebone kernel/arch/arm/configs/beaglebone_defconfig
$ wget "http://arago-project.org/git/projects/?p=am33x-cm3.git;a=blob_plain;f=bin/am335x-pm-firmware.bin;hb=HEAD" -O kernel/firmware/am335x-pm-firmware.bin
Kernel Derleme
Derleme işlemi öncesinde oluşan kernel dosyasını sıkıştırma ve u-boot kernel başlık bilgilerini eklemek için gerekli yardımcı araçların kurulu olduğundan emin olunuz:
$ sudo apt-get install lzop u-boot-tools
Kernel derleme işlemini aşağıdaki adımlarla yapabilirsiniz (tftp sunucu ana dizini /srv/tftp
olduğu varsayılmıştır):
$ make ARCH=arm beaglebone_defconfig
$ make ARCH=arm \
CROSS_COMPILE=/home/demirten/beagle/build/host/usr/bin/arm-linux-gnueabihf- \
uImage dtbs -j4
$ make ARCH=arm \
CROSS_COMPILE=/home/demirten/beagle/build/host/usr/bin/arm-linux-gnueabihf- \
uImage-dtb.am335x-boneblack -j4
$ cp arch/arm/boot/uImage-dtb.am335x-boneblack /srv/tftp/uImage
Nfs-Root Çalışma
Aşağıdaki şekilde u-boot üzerinden temel değişkenleri ayarlayarak NFS üzerinden boot işlemini gerçekleştirebilirsiniz:
setenv serverip 192.168.7.1
setenv ipaddr 192.168.7.2
setenv console ttyO0,115200n8
setenv rootpath /home/demirten/beagle/build/target
setenv bootargs console=${console} root=/dev/nfs nfsroot=${serverip}:${rootpath},vers=3 rw ip=${ipaddr}
tftp 0x80200000 uImage-dtb.am335x-boneblack
bootm
uEnv.txt Kullanımı
BeagleBoneBlack için hazırlanan u-boot imajı, çalışmaya başladığında uEnv.txt
dosyası bulması halinde içerisindeki değişkenleri import etmektedir. Bu metin dosyasını doğru şekilde düzenlemek suretiyle açılış işlemini u-boot imajını yeniden üretmek zorunda kalmaksızın kalıcı olarak özelleştirmeniz mümkündür.
Örnek bir uEnv.txt
dosyasının içeriği aşağıda listelenmiştir:
kernel_file=zImage
initrd_file=uInitrd
serverip=192.168.7.1
ipaddr=192.168.7.2
rootpath=/home/demirten/beagle/rootfs
console=ttyO0,115200n8
loadkernel=load mmc ${mmcdev}:${mmcpart} 0×80200000 ${kernel_file}
loadinitrd=load mmc ${mmcdev}:${mmcpart} 0×81000000 ${initrd_file}; setenv initrd_size ${filesize}
loadfdt=load mmc ${mmcdev}:${mmcpart} 0x815f0000 /dtbs/${fdtfile}
netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},vers=3 rw ip=${ipaddr}
#just zImage
boot_ftd=run loadkernel; run loadfdt
uenvcmd=run boot_ftd; run netargs; bootz 0×80200000 – 0x815f0000
#zImage + uInitrd: where uInitrd has to be generated on the running system.
#boot_ftd=run loadkernel; run loadinitrd; run loadfdt
#uenvcmd=run boot_ftd; run mmcargs; bootz 0×80200000 0×81000000:${initrd_size} 0x815f0000