Bir önceki yazımda M4 firmware’ini SD kartı bilgisayara takıp .elf dosyasını SD karta kopyalayarak yüklemiştim. Her denemede SD kartı çıkarıp takmak hem yorucu hem de kart yuvasına zarar verme riski olan bir yöntem. Bu yazımda aynı işi Ethernet kablosu ve SSH ile yapacağız. Böylece kart yerinde dururken .elf dosyasını ethernet kablosu üzerinden gönderip M4'ü uzaktan başlatıp durdurabileceğiz.
Örnek uygulamada LD6 LED’ini 500 ms aralıklarla blink yaptıran firmware vardı.
Büyük Resim
- Kartın Ethernet portu, kablo ile doğrudan bilgisayara (veya modeme/router’a) bağlanır
- Kart SD kartla boot edilir, mikro-USB ile bilgisayara bağlanır
- Minicom yazılımı ile seri terminal açılır kartın IP adresi terminalden öğrenilir
- Bilgisayardan ssh ile öğrenilen IP adresi üzerinden karta bağlanılır
- CubeIDE projesindeki .elf dosyasının yolu bulunur
- .elf dosyası scp ile kartın /lib/firmware dizinine gönderilir
- remoteproc ile firmware seçilir, M4 başlatılır, gerektiğinde durdurulur, status kontrol edilebilir
Gerekli Donanım ve Yazılımlar
Donanım
- STM32MP157F-DK2 kartı (OpenSTLinux imajı yazılmış SD kart takılı olmalı. Bu yazımda SD kartın içinde varsayılan olarak yüklü şekilde geldiği yocto dosyaları ile kullanımını varsayıyor)
- Ethernet kablosu
- Mikro-USB kablosu (kart üzerindeki ST-LINK portu için)
- Kartın güç beslemesi (USB-C)
- Bilgisayar ve aynı ağa bağlı bir modem/router - ben modem yerine ethernet kablosunu direkt bilgisayara bağladım
Yazılım
- STM32CubeMX ve STM32CubeIDE (projeyi derlemek için)
- minicom (veya önceki yazımdaki picocom)
- ssh ve scp (Linux’ta hazır gelir, windows tarafındaki kullanımı araştırınız, ben bilgisayarımda ubuntu kullanıyorum)
Kablo Bağlantıları
Kartı üç yerden bağlıyoruz:
- Ethernet: Kartın üzerindeki RJ45 portu ile bilgisayarın ethernet portunu kabloyla bağlayın.
- Mikro-USB (ST-LINK): Bilgisayara bağlanır, seri konsol için kullanılır.
- USB-C güç: Kartı besler. 5V-3A bir adaptör kullanılmalı
Dikkat edilecekler:
- Boot anahtarları SD Card konumunda olmalı (önceki yazımdaki ayar)
- Ethernet kablosu takılıyken kartın port ışığı yanıyorsa(yeşil) fiziksel bağlantı tamamdır
minicom ile Seri Terminali Açma
Önce kurulu değilse minicom’u kuralım:
sudo apt install minicomMikro-USB bağlıyken kartın hangi portta göründüğüne bakalım:
ls /dev/ttyACM*
# /dev/ttyACM0minicom’u bu porta bağlayalım:
sudo minicom -D /dev/ttyACM0 -b 115200Baud rate 115200 olmalı

Kartın IP Adresini Öğrenme
Giriş yaptıktan sonra IP adresine bakın:
ip -br addrÇıktıda eth0 arayüzünün altında şuna benzer bir satır görmelisiniz:
inet 192.168.1.45/24 ...Buradaki 192.168.1.45 kartın IP adresidir (sizdeki farklı olacaktır). Sadece eth0'a bakmak için:
ip addr show eth0Artık kartın IP adresi elimizde, şimdi ssh ile bağlanabiliriz

SSH ile Karta Bağlanma
Bilgisayarda yeni bir terminal açın (minicom açık kalabilir) ve şunu yazın:
ssh root@192.168.1.45İlk bağlantıda şu soruyu görebilirsiniz:
Are you sure you want to continue connecting (yes/no)?yes yazıp devam edin. Şifre sorarsa, imajınızda şifre belirlemediyseniz boş geçebilirsiniz.
Bu andan itibaren kart komutlarını SSH terminalinden çalıştıracağız.
.elf Dosyasının Yolunu Bulma
Firmware’i derledikten sonra (derleme adımları bir önceki yazımdaki gibi: CubeMX ile proje oluşturma, LD6 pinini CortexM4'e atama, HAL_GPIO_TogglePin + HAL_Delay(500) kodunu yazma ve CubeIDE’de CM4 projesini Build etme) .elf dosyası proje klasörünün altında şu konumda oluşur:
<proje_klasoru>/CM4/Debug/<proje_adi>_CM4.elfCA7 tarafının projesi değil, CM4 projesinin .elf dosyasını kullandığınızdan emin olun
.elf Dosyasını SSH Üzerinden Karta Gönderme
Dosya transferi için scp kullanacağız. Bu komutu bilgisayardan çalıştırıyoruz (kartın içindeki SSH terminalinden değil):
scp CM4/Debug/STM32MP1_deneme2_CM4.elf root@192.168.1.45:/lib/firmware/Transfer bittiğinde ilerleme çıktısı görürsünüz. Dosyanın karta ulaştığını doğrulamak için kartın SSH terminalinde şunu çalıştırın:
ls -l /lib/firmware/Dosya listede görünmelidir.
Dikkat edilecekler:
- Hedef dizin mutlaka /lib/firmware olmalı. remoteproc firmware’i buradan arar
- Komutu proje klasörünün içinden çalıştırmıyorsanız .elf dosyasının tam yolunu yazın

Linux Üzerinden M4'ü Çalıştırma
Aşağıdaki komutlar kartın SSH terminalinde çalışır.
Firmware’i seçmek için:
echo -n STM32MP1_deneme2_CM4.elf > /sys/class/remoteproc/remoteproc0/firmwareBaşlatmak için:
echo start > /sys/class/remoteproc/remoteproc0/stateDurdurmak için:
echo stop > /sys/class/remoteproc/remoteproc0/stateM4'ün durumuna bakmak için:
cat /sys/class/remoteproc/remoteproc0/stateÇıktı running veya offline olacaktır. Başarılı bir start sonrasında LD6 LED’i 500 ms aralıklarla yanıp sönmeye başlar.
Dikkat edilecekler:
- M4 running durumundayken firmware değiştirmek istiyorsanız önce stop yapın, sonra yeni firmware adını yazıp tekrar start verin
- Kart yeniden başlatıldığında M4 otomatik çalışmaz. Her açılışta start komutu verilmelidir (otomatik başlatma konusunu ileride ayrı bir yazıda inceleyeceğim)

Her Güncellemede Yapılacak Kısa Döngü
SD kartı çıkarmadan geliştirme akışı şöyle oluyor:
# Kart SSH terminalinde
echo stop > /sys/class/remoteproc/remoteproc0/state
# Bilgisayarda
scp CM4/Debug/STM32MP1_deneme2_CM4.elf root@192.168.1.45:/lib/firmware/
# Kart SSH terminalinde
echo -n STM32MP1_deneme2_CM4.elf > /sys/class/remoteproc/remoteproc0/firmware
echo start > /sys/class/remoteproc/remoteproc0/stateBu döngü SD kart yöntemine göre çok daha hızlı olacaktır
Genel Kültür Notları
- SSH ve scp A7 tarafında çalışan Linux’un işidir. M4 ağ ile doğrudan ilgilenmez, ona sadece firmware’i Linux yükler
- Varsayılan imajda root şifresiz gelmesi geliştirme için kolaydır, ama kartı güvenli olmayan bir ağa bağlayacaksanız root için şifre belirlemek gerekir
Henüz kartı tam anlamıyla öğrenmiş değilim, öğrendikçe aldığım notları düzgünce toplayarak burada paylaşacağım. Sıradaki konular A7 ve M4 arasında haberleşme (RPMsg) ve Yocto olacak.