Gemstone için NuttX desteği henüz geliştirme aşamasındadır. Kartın üzerindeki I2C, SPI, PWM, CAN Bus gibi tüm çevre
birimleri kullanmak mümkün değildir.
boards/arm/am67/t3-gem-o1
dizininde
nsh
konfigürasyonu oluşturulmuştur. Bu konfigürasyon ile NuttX, kartımızda yer alan gerçek zamanlı
işlemlere uygun R5F çekirdeklerinde çalıştırılabilmektedir.
1. Derleme
1.1. Toolchain Kurulumu
NuttX’i derleyebilmek için ARM Cortex-R5F çekirdekleri ile uyumlu bir çapraz derleyiciye ihtiyacımız vardır.gcc-arm-none-eabi
toolchain’i bu ihtiyacımızı karşılayan standart çözümdür.
Ubuntu/Debian sistemlerde toolchain’i paket yöneticisi ile kurabilirsiniz:
arm-none-eabi-gcc --version
komutuyla toolchain’in düzgün çalıştığını doğrulayabilirsiniz.
1.2. Kaynak Kodları İndirme
NuttX ekosistemi iki temel repository’den oluşmaktadır: çekirdek işletim sistemi ve uygulama framework’ü. Gemstone kartı için özelleştirilmiş versiyonları indirmek için aşağıdaki adımları takip edin:apps
klasörü, işletim sisteminin üzerinde
çalışacak uygulamaları ve servisleri içerir.
1.3. Varsayılan Konfigürasyonu Uygulama
NuttX, farklı donanım platformları için önceden hazırlanmış konfigürasyonlar kullanır. Gemstone kartımız içint3-gem-o1:nsh
konfigürasyonunu uygulayarak başlayalım:
1.5. Projeyi Derleme
Konfigürasyon tamamlandıktan sonra NuttX’i derleyebiliriz:nuttx
isimli
bir ELF dosyası oluşur. Bu dosya, R5F çekirdeğine yüklenecek işletim sistemi imajını içerir.
1.6. Konfigürasyonu Özelleştirme
Bazen varsayılan konfigürasyonda değişiklik yapmanız gerekebilir. NuttX, Linux çekirdeğine benzer şekildemenuconfig
aracını kullanır. Bu grafik arayüz üzerinden driver’ları aktifleştirebilir, bellek ayarlarını değiştirebilir veya yeni özellikler
ekleyebilirsiniz. Yaptığınız değişiklikler .config
dosyasında tutulur.
savedefconfig
komutunu kullanın.
Bu komut, sadece varsayılan ayarlardan farklı olan konfigürasyonları kaydeder, böylece konfigürasyon dosyası gereksiz
yere büyümez. Komut sonucu oluşan defconfig
isimli dosyayı boards/arm/am67/t3-gem-o1/configs
dizini altındaki nsh
isimli varsayılan konfigürasyona kopyalayabilir ya da farklı bir isimde yeni konfigürasyon oluşturabilirsiniz.
1.7. Temizlik İşlemleri
Geliştirme sürecinde bazen temiz bir başlangıç yapmanız gerekebilir. NuttX iki seviyede temizlik komutu sunar:make clean
komutu derleme sonucunda oluşan dosyaları siler ancak konfigürasyonu korur. make distclean
ise projeyi
tamamen ilk haline döndürür, bu durumda konfigürasyon işlemini tekrar yapmanız gerekir.
2. Çalıştırma
NuttX işletim sistemi R5F çekirdeklerinde çalışırken A53 çekirdeklerinde de Linux işletim sistemi çalışmaktadır. Linux işletim sisteminde ve U-Boot’ta yer alanremoteproc
mekanizması ile R5F çekirdeklerine kod yüklenebilmektedir.
Remoteproc ile çekirdeklere yüklenecek program dosyaları /lib/firmware
dizini altına önceden tanımlı isimlerde
kopyalanmalıdır. Sistem başlangıcında, remoteproc mekanizması programları ilgili çekirdeklere otomatik olarak
yükleyecektir. NuttX’i remoteproc ile çalıştırmak için aşağıdaki adımları takip edin.
- Derleme sonucu oluşan
nuttx
dosyasını/lib/firmware
dizininej722s-main-r5f0_0-fw
isminde kopyalayın. - Kartı yeniden başlatın.
- UART-MAIN1’in 40-pin HAT’te yer alan GPIO-14 (TX) ve GPIO-15 (RX) pinlerine USB-to-TTL cihazı bağlayarak NuttShell’e erişebilirsiniz.
- Açılan
nsh
konsolundanblink
isimli programı çalıştırıp kartın üzerinde yer alan kullanıcı ledlerinin yanıp söndüğünü gözlemleyebilirsiniz.
3. Debug
3.1. Debug Özelliklerini Aktif Etme
NuttX varsayılan olarak release modunda konfigüre edilmiştir, bu da optimize edilmiş ancak debug bilgileri içermeyen küçük boyutlu bir ELF dosyası üretir. Geliştirme sürecinde adım adım debug yapabilmek için debug moduna geçmeniz gerekecektir.menuconfig
aracını açın ve şu yolu takip edin: Build Setup
→ Debug Options
→ Enable Debug Features
. Ayrıca
Generate Debug Symbols
seçeneğini de aktifleştirin. Bu ayarlar, derleyicinin debug bilgilerini ELF içerisine gömüp,
debugger’ın kaynak kod seviyesinde debug yapabilmesini sağlar.
3.2. CCS IDE Entegrasyonu
Texas Instruments Code Composer Studio (CCS), AM67A SoC ailesi için özel olarak optimize edilmiş geliştirme ortamıdır. NuttX projenizi CCS’e entegre etmek için IDE’yi açın veFile
→ Import
→ C/C++
→ Existing Code as Makefile Project
seçeneğini kullanın. Proje dizini olarak nuttx
klasörünü seçin.
3.3. Çekirdeğe Programı Yükleme
CCS IDE üzerinden debug işlemini başlatmak için önce kullanacağınız Debug Probe modelini (örneğin Texas Instruments XDS200) veJ722S_TDA4VEN_TDA4AEN_AM67
kartını seçerek Target Configuration oluşturun. Ardından Target Configuration’ı başlatıpAM67A SoC’ye bağlanın. Debugger bağlantısı sağlandıktan sonra, Main R5F çekirdeğini seçip
Run
→ Load
→ Load Program
ile nuttx
ELF dosyasını seçin. Bu işlem, NuttX işletim sistemini R5F çekirdeğinin belleğine yükler.
Program yüklendikten sonra breakpoint’ler koyabilir, değişkenleri izleyebilir ve kod üzerinde adım adım
ilerleyebilirsiniz. NuttX’in task scheduler’ı ve interrupt handler’ları gibi kritik bileşenlerinin nasıl çalıştığını bu
şekilde detaylı olarak inceleyebilirsiniz.