BeagleBoard
Last updated
Was this helpful?
Last updated
Was this helpful?
Bu bölümde, cihaz üzerinde herhangi bir alt seviye yazılım yok iken, cihazın nasıl açıldığına göz atacağız.
BeagleBoard seri port (UART Recovery) veya SD kart üzerinden (MMC Recovery) açılabilir. Biz burada ikinci yöntemi kullanacağız.
Cihazı açabilmek için bir önyükleyici (bootloader) çiftine, Linux çekirdeğine ve dosya sistemine ihtiyacımız olacak. Cihaza enerji verildiğinde, ilk olarak, işlemci yongasına üretim aşamasında kodlanan önyükleyici (ROM Bootloader) çalışmaktadır. Bu ilk önyükleyiciyi, işlev olarak, bilgisayarlarımızdaki BIOS yazılımına benzetebiliriz. Sonrasında, bu önyükleyici tarafından MLO (MMC Loader) isimli küçük bir önyükleyici yüklenmekte, MLO ile de, çekirdeği yüklemekten sorumlu ikinci önyükleyici olan U-Boot yüklenmektedir.
Şimdi sırasıyla önyükleyici çiftini, çekirdeği ve dosya sistemini nasıl oluşturabileceğimize kısaca bakalım.
Elde edeceğimiz nihai dosyaları bir dizinde toplamak, sonrasında SD karta yazma işleminde, işimizi kolaylaştıracaktır. Bu dizinin yol ifadesini DEV_DIR isimli bir çevre değişkeninde tutalım.
Not: Biz derleme sürecinde CodeSourcery geliştirme araçlarını kullanacağız. Bu aşamada çapraz derleyicinizin yol ifadesinin PATH çevre değişkeninde tanımlı olduğundan emin olunuz.
Ayrıca başka bir derleyici kullanıyorsanız, önyükleyici ve çekirdek derleme aşamalarında, derleyicinize ait öneki (prefix) kullanmalısınız. CodeSourcery için derleyici öneki arm-none-linux-gnueabi- şeklindedir.
U-Boot çekirdeği yüklemekten sorumlu daha gelişmiş bir önyükleyicidir. U-Boot ayrıca kendisini yüklemek için kullanacağımız MLO konunu da barındırmaktadır.
Aşağıdaki gibi indirip, cihaz için derleyebilirsiniz.
BeagleBoard için çekirdek kodunu aşağıdaki gibi indirip sonrasında derleyebilirsiniz. Burada 2.6.32 versiyonunu derleyeceğiz.
Not: TI firması, C6Run projesini 3.X.X versiyonlu çekirdekler için desteklememektedir. 3.X.X versiyonlu çekirdekler için de projeyi derlemek mümkün olmasın karşın çok fazla sorunla karşılaşılmaktadır, ayrıca 2.6.36 versiyonunundan önceki bir versiyonu seçmenizi öneririz. 2.6.36 ve sonrası için C6Run kaynak kodunda bazı değişiklikler yapmak gerekmektedir.
arch/arm/boot/ altında U-Boot tarafından yüklenebilecek uImage çekirdek imajı oluşacaktır.
Uyarı: uImage dosyasını oluşturabilmek için sisteminizden mkimage uygulaması bulunmalıdır, aksi halde derleme sürecinin sonunda aşağıdaki gibi bir hata ile karşılaşılacaktır.
"mkimage" command not found - U-Boot images will not be built
mkimage uygulaması Debian tabanlı dağıtımlarda u-boot-tools paketinden çıkmaktadır.
Basit bir dosya sistemini BusyBox kullanarak oluşturabileceğiniz gibi hazır bir dosya sistemi de kullanabilirsiniz. Biz burada dosya sistemini kendimiz oluşturacağız.
Not: Hazır bir dosya sistemi kullanmak istiyorsanız, Angstrom dağıtımın dosya sistemini kullanabilirsiniz. Bu dosya sistemini, aşağıdaki bağlantıyı kullanarak, internet üzerinden de kolaylıkla oluşturabilirsiniz.
http://narcissus.angstrom-distribution.org/
Bu durumda çapraz derleyicinizin kullandığı standart C kütüphanesi ile dosya sistemi bünyesindekinin uyumluluğunu kontrol etmelisiniz.
Dosya sistemini oluşturmak için temel olarak BusyBox kodunu derleyecek, asgari açılış betiklerini, aygıt düğümlerini oluşturacak ve çapraz derleyicinin kullandığı standart C kütüphenesini dosya sistemine kopyalayacağız.
BusyBox kodunu aşağıdaki gibi indirip derleyebilirsiniz.
Bu aşamadan sonra ROOTFS çevre değişkeniyle gösterilen dizinde asgari dizin yapısı oluşacaktır.
Geliştirme araçlarının içindeki lib dizinini hedef dosya sisteminde / altına kopyalayalım.
Açılış ve sonrasında ihtiyaç duyulacak olan temel dizinleri aşağıdaki gibi oluşturabiliriz.
Bu aşamada gerekli açılış betiklerini oluşturalım. inittab ve rcS olmak üzere iki adet betiğe ihtiyacımız olacak. BusyBox içinden çıkan örnek inittab dosyasını hedef dosya sistemimize koplayalayıp üzerinde değişiklik yapabiliriz.
Cihaza seri terminal üzerinden ulaşabilmek için, inittab dosyasına aşağıdaki satır eklenmeli veya açıklama şeklinde olan benzer satır aynı forma dönüştürülmelidir.
/etc/init.d altında ise içeriği aşağıdaki gibi olan rcS betiği oluşturulmalı ve gerekli izinleri verilmelidir.
rcS için aşağıdaki gibi gerekli izinleri verebiliriz.
Son olarak, /dev altındaki gerekli aygıt düğümleri ve pts dizinini aşağıdaki gibi oluşturabiliriz.
Bu aşamada dosya sistemimizi hazırlamış olduk, daha sonra SD kart üzerine yazmak için dosya sistemimizi arşiv halinde saklayabiliriz.
SD kart üzerinde, biri FAT32 diğeri ise ext3 şeklinde biçimlendirilecek iki adet bölüme (partition) ihtiyacımız olacak. FAT32 bölümüne önyükleyicileri ve çekirdeği, ext3 bölümüne ise dosya sistemini taşıyacağız. SD kart üzerindeki bölümlendirme ve biçimlendirme işlerini, komut satırından elle yapmak yerine, Angstrom dosya sistemi bünyesindeki mkcard.txt betiğini kullanabiliriz. Betiği aşağıdaki gibi indirebilirsiniz.
Betiğe SD kartımıza ilişkin aygıt düğümünü (device node) geçirmeliyiz, sistemimiz için örnek aşağıdaki gibidir:
Not: SD kartınıza ilişkin aygıt düğümünü fdisk -l ile sisteminizdeki bölümleri inceleyerek bulabilirsiniz. fdisk komutunu root haklarıyla çalıştırmalısınız.
Not: Betiğe daha yakından baktığımızda, sırasıyla SD kartın boyutunun hesaplandığını, sfdisk ile iki adet bölümün oluşturulduğunu, sonrasında bu bölümlerin mkfs.vfat ve mke2fs ile biçimlendirildiğini görmekteyiz. FAT bölümünün bootable olduğuna dikkat ediniz.
Bu aşamadan sonra, önyükleyici çiftiyle çekirdeği FAT bölümüne kopyalayabilir ve önceden hazırladığımız dosya sistemi arşivini ext3 bölümüne açabiliriz.