Skip to main content
← Back to blog
rustzynqrtostikos

TikOS Seriye giriş — ne yapıyoruz, ne beklemeyelim

3 min read

Zynq-7010'da kendi RTOS'umu yazmaya başlıyorum. Rust'ta, bare-metal'de, sıfırdan. Nereye varacağım belli değil — yolda sürprizler olacak, bazı kararlarımı yeniden düşüneceğim. Ama umurumda değil. Bu proje bir kullanma meselesi değil, bir öğrenme meselesi. Bir şeyi gerçekten anlamanın tek yolu onu kendin yazmak, ve A9'un içine girip MMU'yu elle ayarlamak, context switch'i assembly'de yazmak tam da bu yüzden çekici.

Ortada iki boşluk var ve ikisini de ben doldurmak istiyorum. Birincisi, Türkçe'de bu derinlikte embedded içerik neredeyse yok. İkincisi, Rust'ın bare-metal A-profile tarafı (Cortex-A9 gibi çipler) ekosistem olarak olgun değil — Cortex-M'de mükemmel çalışan her şey burada kendin inşa etmen gereken bir şeye dönüşüyor. Demek ki: hem Türkçe hem Rust+A9 boşluğu. İkisini birlikte doldurmak naif bir hedef mi? Belki. Ama denemeye değer.

Bu seri nedir Bir build-log. Yani bir tutorial değil, bir kılavuz da değil — "oturup yapıyorum, yaparken yazıyorum" tarzı bir şey. Her yazıda ne yaptığımı, neyle boğuştuğumu, nereden çıktığımı anlatacağım.

Format olarak her yazıda iki ses olacak: ana anlatı (o hafta ne yaptım) ve retrospektif kutular (daha sonra fark ettiğim şeyler). Bazı yazılara dönüp notlar ekleyeceğim, yani yazılar zaman içinde biraz değişebilir. Önemli bir değişiklik olursa yazının üstünde belirtirim.

Bu seri üretim kalitesinde RTOS yazmıyor. Yazdığım kodu bir ürüne koyma. Benim derdim öğrenmek, ortaya çıkan kod bir öğrenme aracı — eğitim değeri var ama production değeri yok.

Bu seri bitmeyebilir. Tükenebilirim, bir noktada ilgim kayabilir, hayat araya girebilir.

Teknik yön

Kısaca:

  • Donanım: Zynq-7010 kartı. Serinin büyük kısmı Zynq-7000 ailesinin tamamına uyar — 7020 veya başka bir 7000 parçası elindeyse PS tarafı aynı, takip edebilirsin.
  • Geliştirme ortamı: Rust toolchain (armv7a-none-eabihf), Vivado (sadece hardware export için), QEMU xilinx-zynq-a9 makinesi, OpenOCD + GDB.
  • Kullanmayacaklarım: Xilinx SDK, Vitis, hazır RTOS kütüphaneleri.
  • Paralel anlatım: Fiziksel kartı olmayanlar QEMU ile takip edebilir. Kritik farklar olduğunda her iki yolu da göstereceğim.

Terminoloji notu

Teknik terimleri çoğunlukla İngilizce orijinalleriyle kullanacağım: context switch, interrupt, scheduler, cache coherency. İlk geçtiklerinde Türkçe karşılığını parantez içinde vereceğim. Sebebi basit — Türk embedded mühendisleri mesleki ortamda zaten bu terimleri İngilizce kullanıyor. Daha anlaşılır olacağını düşünüyorum.

Kod, yorumlar, değişken ve fonksiyon isimleri tamamen İngilizce olacak. Bu açık kaynak projelerinde standart olduğu için.

Kod ve repo

Proje kodu GitHub'da olacak: github.com/fatih/zynq-rust-rtos. Her yazının sonunda o yazıya karşılık gelen git tag'i vereceğim. İstersen o tag'e checkout edip kodun o andaki halini görebilirsin.

Sonraki yazı

İki hafta sonra Yazı 1 yayında olacak: "Zynq'i yazılımcı gözünden tanıyalım." Zynq'in iki yanı olduğunu, PS ve PL'nin ne demek olduğunu, neden bu SoC'un ilgimi çektiğini anlatacağım. Henüz kod yok, zemin hazırlıyoruz.

Takip etmek istersen:

Soruların, düzeltmelerin, itirazların olursa yaz. Özellikle teknik bir yanlış yaparsam uyarmanı isterim. Bu seride kendimi yanlışa alışmış bir öğrenici olarak görüyorum, okuyucudan gelen düzeltme en hızlı öğrenme yolu.

📚 Terminoloji

  • build-log: süreç günlüğü, yol haritası değil "yol hikayesi"
  • bare-metal: işletim sistemi olmadan donanım üzerinde doğrudan çalışan kod
  • RTOS (real-time operating system): gerçek zamanlı işletim sistemi