Bölüm bitiminde aşağıdaki konularda bilgi ve deneyim kazanacaksınız.
- Texas AM67 MCU yazılımı derleyerek Gemstone Obsidyen üzerinde çalıştırmak
- Geliştirme kartına ilk güç verildiğinde hangi aşamalarla sistemin başladığını öğrenmek
1. MCU Yazılım Geliştirme
MCU projelerini derleyebilmek için gerekli araçlar aşağıda listelenmiştir.- Texas Instruments Processor SDK RTOS J722S
- Texas Instruments Sysconfig
- Texas Instruments Code Generation Tools C7000
- Texas Instruments Code Generation Tools ARM LLVM
1.1. Git clone işlemi ile örnek projeleri indir
1.2. Derleme için gerekli araçları ve kütüphaneleri kur
1.3. Taslak proje oluştur
t3gemstone/examples reposunda yer alanmcu
projesinde iki R5F gerçek zamanlı
çekirdek ve iki C7x DSP çekirdeğinde çalışan örnek projeler bulunmaktadır. Bunlara benzer örnekler
build/ti/ti-processor-sdk-rtos-j722s-evm-10_01_00_04/mcu_plus_sdk_j722s_10_01_00_22/examples
dizininde yer
almaktadır. Amacınıza uygun bir örnek proje bulup mcu
proje dizinine kopyalamanız ve onun üzerinde geliştirme yapmanız
tavsiye edilir.
Her bir örnek projenin altında farklı çekirdekler için alt dizinler bulunmaktadır.
Örneğin hello_world
projesinde aşağıdaki dizinler mevcuttur.
c75ss0-0_freertos
c75ss1-0_freertos
main-r5fss0-0_freertos
mcu-r5fss0-0_freertos
.env
dosyasında MCU_TARGETS
değişkeni olarak tanımlanmıştır. Derlemek istediğiniz
projenin makefile
dizininin mutlak veya göreli yolunu MCU_TARGETS
değişkenine ekleyin. Aşağıda hello_world
projesinin mcu-r5fss0-0_freertos
çekirdeği için örnek gösterilmiştir.
1.4. SysConfig ile çevre birimleri yapılandır
Projenin hangi çevre birimleri (GPIO, I2C, UART vb.) kullandığı ve bunların yapılandırması.syscfg
dosyasında
tanımlanmıştır.
Yeni çevre birimler eklemek veya mevcut olanların Pin Mux ayarlarını değiştirmek için SysConfig GUI aracı kullanılır.
Bir MCU projesinde SysConfig’i başlatmak için:
SYSCONFIG_TARGET
değişkenini istenen proje olarak değiştirin.- Bu değişkeni
.env
dosyası içinde düzenleyebilir veya task
programına ortam değişkeni olarak iletebilirsiniz.
- Bu değişkeni
Ctrl + S
kısayol tuşuyla kaydettikten sonra SysConfig arayüzünü kapatabilirsiniz.
Linux tarafından R5F ve C7x çekirdeklerine uzaktan yazılım yüklenebilmesi için remoteproc altyapısı kullanılmaktadır.
Bir projenin derlenmiş
.out
dosyasının remoteproc ile yüklenebilmesi için SysConfig arayüzünden bazı ayarların
yapılmış olması gerekmektedir. Yeni bir proje kopyalandıktan sonra aşağıdaki adımlar izlenmelidir.TI DRIVERS
altında yer alanIPC
sekmesi açılır.ADD
butonuna tıklanır.Linux A53 IPC RP Message
ayarının aktif olduğuna emin olunur.Ctrl + S
kısayol tuşuyla.syscfg
dosyası kaydedilip çıkılır.
1.5. Projeyi derle
1.6. Derlenmiş projeyi geliştirme kartına yükle
1.7. Derlenmiş projeyi çalıştır
Remoteproc ile çekirdeklere yüklenecek.out
dosyaları /lib/firmware
dizini altına önceden tanımlı isimlerde
kopyalanmalıdır. Her bir çekirdek için firmware ismi aşağıdaki tabloda verilmiştir.
Core | Firmware |
---|---|
mcu-r5fss0-0 | j722s-mcu-r5f0_0-fw |
main-r5fss0-0 | j722s-main-r5f0_0-fw |
c7xss0-0 | j722s-c71_0-fw |
c7xss1-0 | j722s-c71_1-fw |
head /sys/class/remoteproc/remoteproc*/firmware
komutu ile erişilebilir. Her boot sonrasında çekirdekler
farklı remoteproc cihazlarına karşılık gelebildiği için kontrol edilmesi gerekmektedir.
Yukarıdaki prosedür, uzak çekirdeklerin sorunsuz bir şekilde kapatılmasını ve yeniden başlatılmasını sağlar. Bazı
durumlarda sorunsuz kapatma işlemi başarısız olabilir. Bu durumda şu adımları öneririz:
- Yeni firmware dosyalarını
/lib/firmware
dizinine yerleştirin. - Kartı yeniden başlatın.
- Çekirdek çökmeleri yaşandığında
- IPC iletişimi kesildiğinde
- Dinamik yükleme sırasında beklenmeyen davranışlar gözlemlendiğinde
2. Boot Diyagramı
Aşağıda belirtilen akış şeması Gemstone Obsidyen geliştirme kartı için olmakla birlikte bir çok ARM mimarili gömülü Linux geliştirme kartlarında benzer bir yapı bulunmaktadır.2.1. ROM Bootloader (RBL)
Üreticiler tarafından çoğu zaman kaynak kodları verilmeden sadece derlenmiş program olarak dağıtılan RBL (Room Bootloader)‘in temel amacı; karta ilk enerji verildiğinde donanım sağlık kontrolleri ve ilklendirme vb. işlemleri yaparak, kaynak kodları değiştirilebilir olan SBL (Secondary Bootloader) isimli ikinci Bootloader’a geçiş yapmaktır. SBL’in nereden okunarak başlatılacağı ise RBL tarafından Bootmode switchlerinden tespit edilir.2.2. Secondary Bootloader (SBL)
Secondary Boot Loader’un T3-GEM-O1 geliştirme kartlarındaki kullanım amacı U-Boot isimli daha gelişmiş Bootloader’ı başlatmak ve Gemstone Imager isimli uygulama aracılığıyla imajların eMMC’ye yazılmasını sağlamaktır. Linux Kernel içeren gömülü kartlarda çoğunlukla U-Boot tercih edilmektedir. SBL gibi ön yükleyiciler daha temel seviyede ilklendirme işlemleri yapabilirken, U-Boot çok daha gelişmiş özelliklere sahiptir. Örneğin U-Boot kendi Terminal/Konsol arayüzüne ve SBL’de mümkün olmayan bir çok sürücüye sahip olduğu için daha gelişmiş özelleştirmelere imkan sağlar.2.3. U-Boot
SBL sonrası geliştirme kartının kontrolünü devralan U-Boot, Device Tree’de tanımlanmış olan konfigürasyonlara göre ilgili donanımların sürücülerini aktifleştirir ve ön tanımlı bir takım komutları çalıştırarak Linux Kernel, Initrd gibi bileşenleri RAM’e yükleyerek kontrolü Linux Kernel’e devreder.2.3.1. U-Boot Konsol Alıştırmaları
Bu kısımda Gemstone geliştirme kartına TTL aracılığıyla bağlanılıp U-Boot konsol kullanımı gösterilmiştir.
Aşağıda bulunan dokümanlara hızlıca göz gezdirebilirsiniz.

Todo: U-Boot TTL
2.4. Linux Kernel
Device Tree’de tanımlanan donanımların sürücülerini yükler. Ardından varsa initrd’yi/initramfs’i başlatır ve rootfs’te bulunaninit
programını çalıştırır.
U-Boot ve Linux kernelin device tree dosyaları birbirinden farklıdır. U-Boot’taki devicetreede
genellikle sadece kernel ve initramfs’i çeşitli depolama aygıtlarından (MMC, SSD, SPI flash, …)
RAM’e yüklemeye yetecek kadar donanım aktif edilir. Asıl donanım aktif etme işlemlerini kernel yapar.
2.5. Initial RAM Disk (Initrd)
Rootfs başlatılmadan önce çeşitli kernel modüllerini yükleme, disk şifresini çözme, yazılım güncellemesi yapma gibi ara işlemleri gerçekleştirmeyi sağlayan ve RAM üzerinde bulunan geçici dosya sistemidir.Rootfs diskte şifreli olarak tutuluyorsa, kernel direkt olarak
init
programını başlatamaz.
Öncelikle disk şifresinin initramfs tarafından çözülmesi gerekir.2.6. Root Filesystem (Rootfs)
Initrd, işlemlerini bitirdikten sonra rootfs olarak adlandırılan; sistem ve kullanıcı programlarını, kütüphaneleri ve çeşitli konfigürasyon dosyalarını içeren dosya sistemini/
dizinine bağlar.
Ardından kernel, rootfs’te /init
, /sbin/init
ya da benzeri bir dizinde bulunan init
programını çalıştırır.
Bu program, bazı donanımların sürücülerini yükler (kernel modüllerini), sistem servislerini
(ağ bağlantısı, saat senkronizasyonu, paket güncelleme ve bluetooth gibi servisleri) ve masaüstü ortamını
başlatır (gnome, kde, xfce, …).
3. Son
Boot süreci hakkında bir kaç makale örneği aşağıda verilmiştir.