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. Gereksinimleri ve Toolchain’i Kurma
NuttX’i derleyebilmek için sistemde çeşitli gereksinimlerin bulunması gerekmektedir. Aynı zamanda 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 gereksinimleri ve 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
nuttxdosyasını/lib/firmwaredizininej722s-main-r5f0_0-fwisminde 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
nshkonsolundanblinkisimli 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.
