TI DM6446 EVM
1 Geliştirme araçlarının hazırlanması:
İlk olarak geliştirme araçları indirilip açıldıktan sonra .../bin dizini altındaki derleme araçlarının arm-linux önekine (prefix) sahip sembolik linkleri oluşturulup (görece daha uzun olan arm-none-linux-gnueabi öneki ile uğraşmamak için), dizin yolu PATH değişkenine eklenmiş ve bir çevresel değişkende saklanmıştır.
2 u-boot önyükleyicinin (bootloader) derlenmesi:
DM644x EVM, ubl(User Boot Loader) ve u-boot olmak üzere iki adet önyükleyiciye ihtiyaç duymaktadır. Göreli olarak daha küçük olan ubl, çekirdeği yükleyecek olan u-boot önyükleyicisini başlatmaktan sorumludur. u-boot’un derlenme aşamaları temel olarak aşağıdaki gibidir. u-boot, arm-linux-gcc’yi ARM için öngörülen derleyici olarak kullandığından, çapraz derleme için çekirdeğin aksine CROSS COMPILE veya ARCH çevresel değişkenlerine ihtiyaç duymamaktadır.
u-boot kaynak kodu içerisinde include/configs/davinci_dvevm.h yolu izlenerek önyükleyicinin konfigür ayarları yapılabilir. u-boot öngörülen olarak NOR flash için derlendiğinden bu haliyle NAND üzerinde çalışmamaktadır, ayrıca önyükleyicinin autoboot özelliğinin çalışması için bir bootdelay değeri girilmelidir. Bunun için aşağıdaki değişiklikler yapılmalıdır.
Ayrıca bootcmd, bootargs gibi çevresel değişkenlerin değerleri hard coded olarak buradan ayarlanabilir.
u-boot temel olarak yukarıdaki gibi derlenmesine karşın birkaç problemle karşılaşılabilir. u-boot derleme işlemi konak makinanın doğal C derleyici ile başlayan bir süreçtir ve konak makinaya bağımlılığı vardır. Konak bilgisayardaki /usr/local/include altındaki bazı başlık dosyalarının varlığı derleme işleminde sorunlara yol açabilmektedir(u-boot, sistemde var olan başlık dosyaları ile ilgili konfigürasyon sonucunda yanlış bir varsayımda bulunuyor olabilir.). Konfigür işleminden önce konak bilgisayarda geçici olarak /usr/local/include dizinin adını değiştirmek sorunu çözebilir.
3 Çekirdeğin derlenmesi:
En son DaVinci linux çekirdeği asağıdaki yol izlenerek derlenmiştir.
4 Dosya sisteminin oluşturulması:
Dosya sisteminin oluşturulması için temel olarak busybox, dropbear araçları derlenmiş, dosya sisteminde bulunması gereken asgari dizin, açılış betikleri, aygıt düğümleri oluşturulmuş ve geliştirme araçlarının kullandığı standart C kütüphanesi dosya sistemine eklenmiştir.
busybox aşağıdaki gibi derlenebilir, ROOTFS çevresel değişkenine başka bir değer verilebilir.
Geliştirme araçlarının içindeki standart C kütüpnanesi dosya sisteminde / altına kopyalanmalıdır.
Açılış ve sonrasında ihtiyaç duyulacak olan temel dizinler aşağıdaki gibi oluşturulabilir.
busybox içinden çıkan örnek inittab üzerinde değişiklik yapılarak dosya sisteminde kullanılabilir.
inittab dosyasına aşağıdaki satır eklenmeli veya açıklama şeklinde olan benzer satır aynı forma dönüştürülmelidir.
Cihaza şu an yalnız uzaktan bağlanılacağı için(seri port veya ağ üzerinden) "/sbin/getty invocations for selected ttys" altındaki tty4 ve tty5 ile başlayan satırlar açıklama haline getirilebilir aksi halde /dev altında gerekli tty aygıt düğümleri oluşturulmalıdır.
/etc/init.d altında 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 verilebilir.
/dev altındaki gerekli aygıt düğümleri ve pts dizini aşağıdaki gibi oluşturulabilir veya düğümler konak bilgisayardan cp komutuna -a anahtarı verilerek kopyalanabilir.
Cihaz bu noktadan sonra bu dosya sistemi kullanılarak nfs üzerinden açılabilir, cihaza seri port üzerinden login olunabilir. Ağ üzerinden login olmak için küçük bir SSH2 sunucu ve istemci uygulaması olan Dropbear aşağıdaki adımlar izlenerek derlenmiş ve cihaz üzerinde çalıştırılmıştır.
Dropbear uygulamasının cihaz üzerinde çalıştırılması için cihaz üzerinde aşağıdaki adımlar izlenebilir.
Cihazda /etc altında kullanıcının id numarası, home dizini ve sisteme login olduğunda çalıştıralacak olan programın belirtildiği passwd dosyası oluşturulmalıdır. root kullanıcısı için passwd dosyasının içeriği aşağıdaki gibi olabilir.
/etc/passwd dosyasında kriptolu olarak tutulacak olan, root şifresi passwd komutu ile oluşturulabilir. devpts mount edildikten ve dropbear uygulaması başlatıldıktan sonra cihaza ssh üzerinden uzaktan bağlanılabilir.
dropbear uygulamasının rcS betiği içerisinden sistemin açılışında başlatılması bu işlemi otomatikleştirecektir.
mtd aygıtı ile ilgili düğümler aşağıdaki gibi oluşturulabilir, ardından cihaz nfs üzerinden açılıp dosya sistemi 7. bölümde gösterildiği gibi NAND üzerine yazılabilir.
5 Cihazın açılma yöntemleri:
5.1 FLASH (NOR) üzerindeki önyükleyici ile açılma durumu:
Sistem FLASH üzerinden açılacaksa CS2 SELECT pinlerinden jumper ile FLASH seçilmeli ve işlemci ayarları ile açılış modunun değiştirildiği, kart üzerinde S3 etiketli, kullanıcı anahtarları aşağıdaki konumlara getirilmelidir.
Anahtarların hangi durumda ON oldukları anahtar kılıfına bakılarak anlaşılabilir.
Sistem bu şekilde açıldığında FLASH’a önceden yazılmış olan ubl ve u-boot sayesinde, minicom ile cihaza bağlanıldığında u-boot komut satırına düşülebilir. Bundan sonra kernel tftp üzerinden çekilip, u-boot çevresel değişkenleri ile harddisk dosya sistemi veya NFS dosya sistemi seçilerek cihaz açılabilir.
5.2 NAND üzerindeki önyükleyici ile açılma durumu:
Sistem NAND üzerinden açılacaksa CS2 SELECT pinlerinden jumper ile NAND seçilmeli ve kullanıcı anahtarları aşağıdaki konumlara getirilmelidir.
Cihazın NAND flashının boş olması durumunda cihaz açılmayacaktır, aynı durum NOR FLASH içinde geçerlidir. Bu örnek için cihazın NAND’ine ubl ve u-boot önyükleyici çiftinin atılması gereklidir. Bunun icin kullanıcı anahtarlarından ilk ikisi ON konumuna alınarak cihaz UART üzerinden boot moduna alınmalıdır. Bu durumda konak bilgisayardan cihaza minicom ile bağlanıldığında ekranda DaVinci yongası içindeki ROM hafızada saklanan, kullanıcının değiştiremeyeci, ROM Boot Loader(RBL) tarafından gönderilen BOOTME mesajı görüntülenecektir. Önyükleyici çifti seri port üzerinden cihaza aşağıdaki gibi yazılabilir.
u-boot olarak, deneme kartının üreticisi Spectrum Digital tarafından sağlanan nand flash paketinden çıkan u-boot kullanıldığında(u-boot-567-nand.bin) temel iki sorunla karşılaşılmıştır[2], kaynak koddan derlenen u-boot ile bu sorunlar yaşanmamıştır. ubl olarak seri programlama paketiyle gelen dosya kullanılmalıdır.
Sonrasında ilk iki kullanıcı anahtarı OFF yapılarak cihaz tftp ve nfs üzerinden açılabilir veya çekirdek ve dosya sistemi imajları kalıcı olarak NAND flash üzerine yazılabilir. Örnek açılış senaryoları kısmında gerekli u-boot çevresel değişkenlerinin değerleri verilmiştir.
6 NAND Flash partisyon yapısı:
Kernel tarafından flashın yorumlanma şekli, yani hangi partisyon yapısında görüleceği Linux kaynak kodu içerisinden sabit olarak ayarlanabileceği gibi çekirdeğe önyükleyici tarafından geçirilen argümanlar vasıtasıyla dinamik olarak da yapılabilmektedir. Sabit partisyon için arch/arm/mach-davinci/board-dm644x-evm.c dosyasinda mtd_partition türündeki diziye yeni elemanlar eklenebilir, var olanlar üzerinde değişiklik yapılabilir. Varsayılan partisyon yapısını belirleyen davinci_evm_nandflash_partition isimli dizi aşağıdaki gibidir.
Çekirdek command line partition table parsing seçeneği seçilerek derlenmişse, mtdparts komut satırı seçeneği kullanılarak partisyon yapısı dinamik olarak oluşturulabilir. DM644x EVM için kullanımına örnek aşağıdaki gibidir.
mtd id bilgisine(davinci_nand) çalışan bir sistemde aşağıdaki gibi ulaşılabilir, id’ye eklenen 0 aygıt numarasıdır.
7 Çekirdek ve Dosya Sisteminin NAND Flash üzerine yazılması:
Çekirdek u-boot önyükleyicisi üzerinden yazılmasına karşın jffs2 dosya sistemi bu şekilde yazıldığında sorunlar yaşandığından dosya sistemi Linux üzerinden yazılmıştır. Çekirdeğin yazılma aşamaları aşağıdadır. Rakamlar başlarına 0x getirilmesede 16'lık tabanda yorumlanmaktadır. u-boot önyükleyicisinde "help nand" şeklinde yardım alınabilir.
Cihaz nfs üzerinden açıldıktan sonra, ilgili mtdblock aygıt jffs2 türünde mount edilip dosya sistemi arşivi içinde açılabilir. rootfs.tar isimli bir dosya sistemi arşivi nand flash üzerine aşağıdaki gibi yazılabilir.
Bir diğer seçenek Linux üzerinde mtd-utils kullanmak olabilir.
8 Örnek açılış senaryoları:
Geliştirme ve son çalışma durumu için uygun olan iki örnek açılma senaryosuna ilişkin önemli u-boot çevresel değişkenleri ve ilgili komutlar aşağıdaki gibidir.
8.1 Cihazın tftp ve nfs dosya sistemi üzerinden açılması:
8.2 Cihazın NAND üzerinden açılması:
[1]
mtd ve IDE ilgili bağzı anahtarlar asağıdaki gibi atanmıştır.
[2]
Linux çekirdeğinin başlarken yaptığı ilk işlemlerden bir tanesi önyükleyici tarafından kendisine geçirilen donanım platformuyla ilgili makina numarasını, kendisinin desteklediği makina numaraları ile karşılaştırmaktır. Önyükleyici tarafından yanlış bir makina numarası gönderildiğinde cihazın açılış mesajları aşağıdaki gibi sonlanacaktır.
Starting kernel mesaji önyükleyicinin son, Uncompressing Linux ile başlayan mesaj ise çekirdeğin ilk mesajıdır. Çekirdek kodu içerisinde konsol(burada ttyS0) başlatılmadan önce çalışan kodlarla ile mesajları görmek için çekirdek CONFIG_DEBUG_LL anahtarı set edilerek derlenmelidir. Cihaz çekirdeğe, konsol argümanına ek olarak, "earlyprintk=serial,ttyS0" argümanları geçirilerek başlatıldığında ekran çıktısı aşağıdaki gibi olmaktadır. Desteklenen makina tipleri çekirdeğin konfigürasyonuna göre birden çok olabilir.
NAND flash paketinden çıkan u-boot çekirdeğe DAVINCI_EVM’in numarası 901 sayısını göndermek yerine DAVINCI_DVDP’nin numarası olan 854’ü göndermektedir(açılış ekranında bu sayıların 16’lık tabandaki karşılıkları görülmektedir). Çekirdek kaynak kodu içeresindeki mach-types.h dosyasinda aşağıdaki değişiklik yapılarak bu sorun aşılabilir.
Bir diğer problem ise çekirdeğin FLASH’dan hafızaya(RAM) çekildikten sonra başlatılması sırasında doğrulama hatasının alınmasıdır. Hata mesajı aşağıdaki gibidir.
[3]
KAYNAKLAR
Uyarı: Nand’e uboot’tan yazarken blocksize’ın katı olmalıdır.
Last updated
Was this helpful?