BeagleBoard C4 İçin Android 2.3.4 GingerBread Kernel Derleme

android_logoBu yazımızda BeagleBoard C4 için Android 2.3.4 sürümünün nasıl derlendiğini ele alacağız.Texas Instruments ürettiği bazı geliştirme kitleri için doğrudan SD karta yazılabilir imajlar(prebuilt-images) veriyor fakat BeagleBoard üzerinde bazı donanımlara ayarlama yapmak gerektiği zaman bu imajlar bizim için işe yarar durumda olmuyor ve isteğe özel bir kernel derlemek kaçınılmaz oluyor. Genellikle prebuilt-image lar içerisindeki derlenmiş çekirdek dosyalarında yaygın olarak kullanılan donanımların sürücüleri bulunuyor.

Bu şekilde derlenmiş bir çekirdeğin(kernel) yüklü olduğu sisteme farklı bir donanım eklendiği zaman bu donanım işletim sistemi tarafından algılanmıyorsa bu sürücü eksikliğini gidermek için eski kernel içerisine o donanımın da sürücülerini bulup eklemek gerekiyor. Bu yazıda bu işlemin tam olarak nasıl gerçeklendiğini inceleyeceğiz.

 

Gerekli Dosyaların İndirilmesi ve Bileşenlerin Yüklenmesi

İlk olarak Ubuntu 10.04 kurulu bir bilgisayarda çalışmanızı öneriyorum çünkü 11.04 – 11.10 gibi sürümlerde bazı hatalar çıkabiliyor. Kernel derleme için Ubuntu 10.04 üzerinde yüklü olması gereken bileşenler; Konsol üzerinde sıra ile aşağıdaki komutları giriyoruz.  

Kod   
$ sudo add-apt-repository "deb http://archive.canonical.com/lucid partner"
 
$ sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"
 
$ sudo apt-get update
 
$ sudo apt-get install git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev minicom tftpd uboot-mkimage expect
 
$ sudo update-java-alternatives -s java-6-sun
   Bu aşamadan sonra TI’ın yayınladığı Android 2.3.4 Kaynak dosyalarını indirmemiz gerekiyor.

Buradaki dosyaları indirdikten sonra dizin üzerinde uygun bir yere açmamız gerekiyor. Tavisyem doğrudan /home/kullaniciadi/android-soruces/ gibi bir dizin üzerinden gitmenizdir. Dosyaları yukarıdaki gibi bir dizine kopyaladıktan sonra aşağıdaki komutla .tar.gz dosyalarını olduğu dizine çıkarabilirsiniz.

Kod   
$ tar -xvzf TI_Android_GingerBread_2_3_4Sources.tar.gz
$ tar -xvzf Tools.tar.gz

Dosyaları açtıktan sonra TI_Android_GingerBread_2_3_4Sources klasörü içerisine girip aşağıdaki komutu yazıyoruz.

Kod   
$ ./.repo/repo/repo sync –local-only

sources_dosyalar

İlk aşama bu kadar. Bundan sonraki kısım sırası ile x-loader derlemesi, u-boot derlemesi ve uImage derlemesi olarak yer alıyor. Bunlar boot dosyaları olarak adlandırılan çekirdek dosyalarıdır.

1. x-loader Derlemesi

İlk olarak yapmamız gereken derleme için gerekli olan ARM derleyicisinin yolunu sisteme tanıtmak. Bunun için herhangi bir derleyici yüklemesi yapmamız gerekmiyor çünkü ihtiyacımız olan tüm dosyalar TI_Android_GingerBread_2_3_4Sources klasörü içerisinde mevcut.

Bu aşama ve bundan sonraki tüm adımlarda Çapraz-Derleme(Cross-Compile) yapacağız. Yani x86 bir bilgisayardan ARM için çalışabilecek çekirdek kodları üreteceğiz. Bu işleme Cross-Compile adı veriliyor. Detaylı bilgi için Tuna AYAN arkadaşımızın hazırladığı yazıyı inceleyebilirsiniz.

Cross-Compile için kullanacağımız ARM derleyicisinin yolunu sisteme tanıtmak için konsolda aşağıdaki komutu girmemiz gerekiyor;

Kod   
$ export PATH=/home/kullaniciadi/android-soruces/TI_Android_GingerBread_2_3_4Sources/prebuilt/linux-x86/toolcahin/arm-eabi-4.4.3/bin:$PATH
toolchain klasörü içerisinde 4.4.0 sürümünü de kullanabilirsiniz fakat ben son sürümü tavisye ediyorum. Denemelerimde derleme işlemini iki sürümle de başarı ile gerçekleştirdim.

Şimdi derleme işlemine başlayabiliriz. Bunun için için TI_Android_GingerBread_2_3_4Sources klasörü içerisindeki x-loader dizinine giriyoruz ve konsolda aşağıdaki komutları yazıyoruz.  

Kod   
$ make CROSS_COMPILE=arm-eabi- distclean
 
$ make CROSS_COMPILE=arm-eabi- omap3beagle_config
 
$ make CROSS_COMPILE=arm-eabi
 bu işlem sonucunda x-loader klasörü içerisinde x-load.bin dosyamız oluşmuş oluyor. Sonra indirdiğimiz Tools klasörü içerisindeki SignGP klasörüne girip içindeki SignGP ve SignGP.c dosyalarını TI_Android_GingerBread_2_3_4Sources/x-loader dizinine kopyalayalım ve ardından aşağıdaki komutları konsolda x-loader dizinindeyken yazalım;
Kod   
$ ./signGP ./x-load.bin
$ mv x-load.bin.ift MLO
Bu işlem sonucunda da MLO dosyamız oluşmuş oldu. x-load.bin dosyasını MLO dosyasını oluşturmak için ürettik aslında. SD karttaki boot dosyaları içerisinde kullanılacak olan dosyalardan biri MLO dosyasıdır. x-loader

2. u-boot Derlemesi

u-boot derlemesi için x-loader dizininden bir adım geri gidip TI_Android_GingerBread_2_3_4Sources/u-boot dizinine giriyoruz. Bu dizinde iken aşağı komutları konsolda sırası ile giriyoruz.

Kod   
$ make CROSS_COMPILE=arm-eabi- distclean
$ make CROSS_COMPILE=arm-eabi- omap3_beagle_config
$ make CROSS_COMPILE=arm-eabi
Bu işlemlerin sonucunda da u-boot.bin dosyamız oluşuyor.

3.uImage Derlemesi

uImage dosyası Andorid Çekirdeğini temsil etmektedir ve çekirdeğe dahil edilen tüm sürücü dosyaları derlendiğinden en uzun süren işlemdir. Bu işlem sonucunda yaklaşık 2-3 MB boyutlarında bir uImage dosyamız oluşacak ve kernel derleme işlemini tamamlamış olacağız. Konsolda bir dizin geri gidip kernel klasörüne giriyoruz ve aşağıdaki komutları sırası ile giriyoruz;

Kod   
$ make ARCH=arm CROSS_COMPILE=arm-eabi- distclean
$ make ARCH=arm CROSS_COMPILE=arm-eabi- omap3_beagle_android_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-eabi- uImage -j4

Burada son komutu girmeden önce bazen defconfig dosyasında ayar yapmak gerekebiliyor. Biz ikinci komut ile beagleboard için android defconfig’ini seçtik. Bu dosya aslında standart bir ayar dosyası(default config). Eğer sadece bu config dosyasının üzerinde değişiklik yapıp yani üzerinden hiçbirşey eksiltmeden sadece ekleme yapıp yeni bir kernel derlemek istiyorsak bunun için birkaç yol tercih edebiliyoruz.

  1. Üzerinde çalıştığımız defconfig dosyasını değiştirme.
  2. menuconfig görsel arayüzünü kullanarak ayarları buradan değiştirme.

İlk yolda bazı sorunlar ortaya çıkabiliyor. Yani eklediğimiz sürücü bazen çekirdek içerisinde derlemeye açık olmayabiliyor. Fakat bunu menuconfig üzerinden yaparsanız, bu arayüz derlenecek dosyaları kendisi otomatik olarak açıyor. Aşağıdak bu arayüzün resimlerini görebilirsiniz.

menuconfig

menuconfig-I2C

menuconfig-I2C-help

menuconfig’den çıkmak için ana dizinde iki kere ESC tuşuna basmanız yeterli olacaktır. Çıkarken kaydedip kaydetmemeyi soracaktır. Yes derseniz eski defconfig ayarlarının yerine yenisini kernel dizininde .config dosya ismiye görebilirsiniz. Ayarların değişip değişmediğini buradan da kontrol edebilirsiniz.

Bu ayarları da yaptıktan sonra artık kernel derleme işlemini başlatabiliriz. Bunun için yukarıda verilen son komutu konsola yazmanız halinde kernel derleme işlemi başlayacaktır. Oluşan uImage dosyasını TI_Android_GingerBread_2_3_4Sources/kernel/arch/arm/boot dizininde bulabilrsiniz. kernel

NOT : Buradaki –j4 parametresi ile derleme işlemi yapılıken var olan CPU çekirdeklerinden kaç tanesini kullanacağını belirtiyoruz. Örneğin CPU’nuz 2 çekirdekli ise –j harfi yanına bunun iki katı değerini yazıyorsunuz. Veya 4 çekirdekli ise 8 değerini yazmanız gerekiyor. uImage derlemesi zaman alan bir işlem olduğu için bu tarz bir paramtere kullanmakta fayda var.

4.Oluşan Dosyaları SD Karta Kopyalama

uImage dosyasını da derledikten sonra geriye kalan tek şey BeagleBoard üzerinde çalışacak olan rootfs sistem dosyaları ile beraber derlenen çekirdek dosyalarının SD karta uygun bir biçimde yazılması. Bu işlemi maalesef kopyala-yapıştır şeklinde yapamıyoruz. İzlememiz gereken küçük bir prosedür var. İlk olarak indirdiğimiz prebuilt imajı uygun bir yere açıyoruz. kernel-klasor

Buradan,

  • mkmmc-android.sh
  • Filesystem içerisindeki rootfs_beagle.tar.bz2
  • Boot_Images içerisindeki boot.scr

dosyalarını yeni açacağımız boş bir klasöre kopyalıyoruz. Sonra yeni oluşturduğumuz klasör içerisine;

  • MLO
  • u-boot.bin
  • uImage

dosyalarını da kopyalıyoruz. Klasörümüz aşağıdaki gibi olmalı. kernel-klasor Sonra SD kartımızı kart okuyucuya takıp(veya USB kart okuyucu da olabilir) konsolda bu klasör içerisine girerek mkmmc-android.sh scriptini aşağıdaki şekilde çalıştırıyoruz.

Kod   
$ ./mkmmc-android /dev/sdc(veya kart okuyucu hangi isimde görünüyorsa) MLO u-boot.bin uImage boot.scr rootfs.tar.bz2
Burada yukarıdaki sıralama önemlidir. Çünkü boot işleminde okunan bu dosyalar karta yazılılarına göre belirli bir adresleme sırasında gitmektedirler. Bu komutu girdikten sonra mkmmc-android.sh scripti SD kartı baştan tekrar biçimlendirecek ve gerekli tüm dosyaları kart içerisinde farklı alanlara kopyalayacaktır. Andorid sisteminde kart Linux sistemine nazaran 2 değil 3 parçaya bölünmektedir. Bu parçalar boot, rootfs ve data isimlerindendir. rootfs ve data ext3 formatında biçimlendirilir. boot kısmı ise FAT olarak biçimlendirilir. rootfs içerisinde Android’in sistem dosyları yani görsel kısım, programlar vs. bulunmaktadır. data içerisinde ise medya dosyaları bulunabilir. Kart biçimlendikten sonra bu alanlarda istediğiniz gibi değişiklik yapabilirsiniz. Sadece boot kısmı FAT biçimli olduğundan dolayı bu kartı çıkarıp Windows bir bilgisayara takarsanız üçüncü parti bir yazılım kullanmadan sadece boot kısmını okuyabilirsiniz.

NOT : Her kernel derleme işleminden sonra kartı tekrar biçimlendirmek gerekmiyor. Sadece yeni oluşan uImage dosyasını boot klasörü içerisine kopyalamak yeterlidir.

SD Kartı BeagleBoard üzerine takıp sistemi çalıştırdığınız takdirde boot işlemi başlayacaktır. Ekran çıktılarını görmek için BeagleBoard’u bir seri->USB dönüştürücü ile bilgisayara bağlıyoruz. Aşağıda ekran çıktılarını görebilirsiniz.

konsol-1

konsol-2

konsol-3

İlk aşama bu kadar. Bir sonraki yazıda liquidware firmasından temine edilen BeagleTouch LCD’sinin Android 2.3.4 üzerinde nasıl çalıştırıldığını ve touchscreen kalibrasyonundaki y hatasının nasıl giderildiğini anlatacağız.

Bu yazının hazırlanmasına katkıda bulunan -sıklıkla rahatsız ettiğim :)- Tuna AYAN ve Mustafa TOSUN arkadaşlarıma çok çok teşekkür ediyorum.

BeagleBoard C4 İçin Android 2.3.4 GingerBread Kernel Derleme” üzerine 4 düşünce

  1. Geri izleme: BeagleTouch OLED Ekranının Android 2.3.4 Sürümünde Çalıştırılması » Muhammed Fatih İNANÇ

  2. Geri izleme: BeagleTouch OLED Ekranının Android 2.3.4 Sürümünde Çalıştırılması « MCU Turkey

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir