Esp32sim: ESP32 Donanım Yazılımlarını Doğrudan Tarayıcıda Çalıştırın
Kaynak: Hacker News
İçindekiler 3 başlık
Gömülü sistemler ve IoT geliştirme süreçlerinde fiziksel donanım bağımlılığı, özellikle öğrenme aşamasında ve sürekli entegrasyon (CI) süreçlerinde önemli bir darboğaz oluşturabilir. esp32sim, Rust diliyle geliştirilmiş açık kaynaklı (MIT lisanslı) bir ESP32 emülatörüdür. Herhangi bir bulut hesabına, aboneliğe veya fiziksel donanıma ihtiyaç duymadan, gerçek donanım yazılımlarını (firmware) yerel ortamınızda ya da WebAssembly aracılığıyla doğrudan tarayıcınızda çalıştırmanıza olanak tanır.
Mimari Kapsam ve Gerçekçi Önyükleme (Boot) Süreci#
esp32sim, Espressif'in hem Xtensa (ESP32, ESP32-S3) hem de RISC-V (ESP32-C3, ESP32-C6) işlemci mimarilerine sahip dört farklı SoC (System on Chip) modelini komut düzeyinde (instruction-level) emüle eder. Emülatörün yazılım geliştiriciler için en dikkat çekici özelliği, değiştirilmiş veya yamalanmış yazılımlara ve araya giren sahte katmanlara (stub) ihtiyaç duymamasıdır. Sistem; gerçek mask ROM'u, gerçek ikinci aşama önyükleyiciyi (2nd-stage bootloader), FreeRTOS'u ve hiçbir değişikliğe uğramamış uygulama imajını uçtan uca çalıştırır. Klasik ESP32 modeli ayrıca çift LX6 çekirdeği üzerinde ECO3 ROM'unu GPIO, UART ve zamanlayıcılarla başlatabilirken; --board ttgo-tdisplay parametresi ile LilyGO TTGO T-Display kartının ST7789 ekranını ve butonlarını simülasyona dahil eder.
Desteklenen SoC Modelleri ve Teknik Özellikler#
Emülatörün farklı çip aileleri için sunduğu yetenekler, karşılaştırmalı tablodaki 11 temel kriter üzerinden şu şekilde özetlenmektedir:
- İşlemci (CPU): ESP32-S3'te 2 × Xtensa LX7 @ 240 MHz; ESP32-C3'te 1 × RISC-V RV32IMC @ 160 MHz; ESP32-C6'da ise 1 × RISC-V RV32IMAC @ 160 MHz desteği sunulur.
- Komut Aracı: S3 için
esp32sim, C3 içinesp32sim-c3ve C6 içinesp32sim-c6komutları kullanılır. - Çekirdek Kütüphane (Core crate): S3 modelinde
xtensa-lx7, C3 modelinderiscv-rv32ve C6 modelinde A eklentisiyle birlikteriscv-rv32yer alır. - Komut Çözücü (Decoder) Kontrolleri: Tam listeleme testlerinde S3 için 977 bin, C3 için 161 bin ve C6 için 126 bin komutta sıfır uyuşmazlık raporlanmıştır.
- Önyükleme Zinciri: Her üç model de
ROM → bootloader → FreeRTOS → appsırasıyla tam önyükleme yapar. - Kartlar ve Ekranlar: S3'te ST7735, ST7701S (480×480 + dokunmatik), WS2812, kamera ve ses; C3'te yalnızca konsol; C6'da ise SPI+DMA üzerinden ST7789 (172×320), WS2812 ve 802.15.4 enerji algılama birimi desteklenir.
- WiFi ve Ağ: Sanal erişim noktası (AP), WPA2, DHCP/DNS/NTP, gerçek ağa NAT bağlantısı ve HTTPS (S3'te tam, C3 ve C6'da tek istasyon üzerinden tarama, WPA2, DHCP ve NAT) simüle edilir.
- Emülasyon Hızı: S3 modeli blok yorumlayıcı ve AArch64 JIT ile saniyede ~150–240 milyon komut (~150–240 Minsn/s) hızına ulaşırken, C3 ve C6 modelleri düz yorumlayıcı ile gerçek zamanlı hızın oldukça üzerinde çalışır.
- Tarayıcı Desteği: Her üç mimari de WebAssembly sayesinde doğrudan web tarayıcısında çalışabilir.
- Donanım Karşılaştırmaları: S3'te zamanlama döngüsü senkronizasyonu sonrası 8000 adımlık JTAG izlemesi; C3'te 205/208 ve C6'da 203/204 satır birebir konsol çıktısı eşleşmesi sağlanmıştır.
- Geliştirme Durumu: ESP32-S3 olgun (mature) seviyesindeyken, ESP32-C3 ve ESP32-C6 modelleri taslak (draft) aşamasındadır.
Geliştiriciler ve Öğrenme Süreci İçin Pratik Çıkarımlar#
Bu tür komut düzeyi emülatörler, gömülü yazılım öğrenenler ve profesyonel ekipler için kritik avantajlar barındırır:
- Donanımsız Hızlı Prototipleme: Fiziksel kart veya ekran modülü satın almadan, sadece tarayıcı üzerinden FreeRTOS tabanlı projeleri, ekran sürücülerini ve WiFi/HTTPS ağ iletişimini test edebilirsiniz.
- Otomatik Test ve CI Entegrasyonu: Projede yer alan örneklenmiş çözücü testleri ve altın çıktı (golden output) karşılaştırmaları, gömülü yazılımlarda donanım döngüye girmeden otomatik doğrulama yapılmasının önünü açar. Donanım izleme karşılaştırmaları gecikme döngülerini yeniden senkronize ederek pratik doğrulama sağlar.
- Modüler Kod Paylaşımı: Rust ile kurgulanan yapıda SoC bileşenlerinin büyük bir kısmı (örneğin C3'ün S3 bileşenlerini yeniden kullanması gibi) mimariler arasında paylaşılarak emülatör geliştirme süreçleri için de mükemmel bir referans oluşturur.
Kaynak ve atıf
Bu yazı, Hacker News üzerinde yayımlanan içerikten yararlanılarak Edumints tarafından yapay zekâ desteğiyle Türkçe hazırlandı. Ayrıntılar ve yazarların kendi anlatımı için orijinaline bakabilirsin:
- github.com/mikroverk/esp32sim