NuttX İşletim Sistemi
beagley-ai
isimli bir konfigürasyon
oluşturulmuştur. Bu konfigürasyon, kartımızın donanım özelliklerine ve R5F çekirdeklerinin kapasitelerine uygun şekilde
tasarlanmıştı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.
apps
klasörü, işletim sisteminin üzerinde
çalışacak uygulamaları ve servisleri içerir.
beagley-ai
konfigürasyonunu uygulayarak başlayalım:
Build Setup
→ Debug Options
→ Enable Debug Features
. Ayrıca
Generate Debug Symbols
seçeneğini de aktifleştirin. Bu ayarlar, derleyicinin debug bilgilerini binary içerisine gömüp,
debugger’ın kaynak kod seviyesinde debug yapmasını sağlar.
nuttx
isimli
bir ELF dosyası oluşur. Bu dosya, R5F çekirdeğine yüklenecek işletim sistemi imajını içerir.
File
→ Import
→ C/C++
→ Existing Code as Makefile Project
seçeneğini kullanın.
Proje dizini olarak nuttx
klasörünü seçin ve toolchain olarak Cross GCC
’yi belirtin. Bu yapılandırma, CCS’nin NuttX
kaynak kodunu anlayıp syntax highlighting ve kod navigasyonu gibi özellikler sunmasını sağlar.
tiboot3.bin
dosyası U-Boot bootloader’ını başlatır.
Ancak R5F çekirdeklerine debug erişimi sağlamak için bu dosyayı SBL NULL projesinin ürettiği tiboot3.bin
ile
değiştirmemiz gerekir.
SBL NULL, System Boot Loader’ın özel bir versiyonudur. Bu versiyon, SoC’yi temel seviyede ilklendirip R5F çekirdeklerini
WFI (Wait For Interrupt) modunda bekletir. Bu durum, çekirdeklerin herhangi bir kod çalıştırmadan debugger’ın
bağlanmasını beklemesini sağlar.
SD kartı bilgisayarınıza takın, boot partition’ındaki tiboot3.bin
dosyasını yedekleyin ve SBL NULL’un ürettiği dosya
ile değiştirin. Kartı tekrar Gemstone’a takıp güç verin.
Run
→ Debug
menüsünden MCU R5F çekirdeğini seçin.
Debugger bağlandıktan sonra, 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.
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.
Bu süreç tamamlandığında, Gemstone kartınızın R5F çekirdekleri üzerinde tam işlevsel bir NuttX işletim sistemi çalışıyor
olacak ve gerçek zamanlı uygulamalarınız için sağlam bir temel elde etmiş olacaksınız.