Raspberry Pi mı alayım, Arduino mu? Aralarındaki fark nedir?

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
24,139
Hem Raspberry PI, hem Arduino, yazılım geliştirebileceğiniz ve başka elektronik sistemleri bu yazılımla kontrol edebileceğiniz mikroişlemci kartlarıdır. Ama aralarındaki ortak nokta, burada bitmektedir.

Raspberry PI, komple bir GNU/Linux işletim sisteminin çalıştığı minyatür bir masaüstü bilgisayardır. HDMI monitör, klavye, fare, USB bazlı her türlü aygıt, kısacası masaüstü bilgisayara bağlanabilen herşey, bir PI'a da bağlanabilmekte ve aynı şekilde kullanılabilmektedir. Üzerinde program geliştirmek için de GNU/Linux'un standart geliştirme ortamları kullanılır (C/C++ için GCC, LLVM gibi). GNU/Linux ile kullanılabilen bütün yazılımlar da aynı şekilde PI ile kullanılabilir.

Arduino ise, üzerinde herhangi bir işletim sistemi çalışmayan, oldukça düşük performanslı bir mikrokontroller barındırır. Öyle HDMI monitör, klavye, fare, veya USB aygıtı takıp hemen kullanmayı unutun. Bu tip aygıtlar için öncelikle uygun bir "shield" diye tabir edilen elektronik kart bulmanız lazım, sonra da bu aygıt için uygun bir yazılımı ya geliştirmeniz lazım, yada bir yerden tedarik etmeniz lazım. Bilgisayar ağına bağlanma da aynı şekilde bir "shield" gerektirir ve gene ağ üzerinden faydalı birşey yapmak için yazılım geliştirmek veya tedarik etmek gerekir. Bunları yaptıktan sonra bile, elde edilecek performans son derecede kötü olacaktır.

Peki, hangi durumda hangisini kullanmak lazım? Eğer komple GNU/Linux işletim sisteminin sağladığı yazılım servislerine ihtiyacınız varsa (ağ bağlantısı üzerinden web erişimi veya başka ağ bazlı servisler, standart veritabanı erişimi), veya yüksek performans gerekliliği varsa, bir PI kullanmak gerekir.

Ama basit elektronik kontrol veya ölçüm veya gözlemleme gibi bir uygulama sözkonusu ise, PI kullanmak hiç mantıklı olmaz. Hem maliyet yüksek olur hem de yazılım geliştirme işi daha uzun sürer ve daha fazla uzmanlık gerektirir. Örneğin bir elektronik termostat, bir kronometre, ultrasonik mesafe ölçer gibi devrelerle uğraşacaksanız, Arduino çok daha mantıklı olur.

Eğer kritik zamanlama ile çalışan bir yazılım gerekiyorsa, mesela bir porttan sabit zaman aralıklarında veri gönderme, veya bir porta gelen bir sinyale çok kısa zamanda cevap vermek gerekiyorsa, bunu PI ile elde etmek çok daha zordur, yazılım geliştirme konusunda ileri düzeyde uzmanlık gerektirir. Ama böyle bir yazılımı Arduino ile yapmak çok daha kolaydır. Bu biraz çelişkili gelebilir. Hani PI çok daha yüksek performans idi? Evet, yüksek performans, ama çalışan bir Linux işletim sisteminde, işlemci birçok yazılım ve servis tarafından paylaşılır. Hiçbir yazılım, çok uzun süre işlemciyi kullanamaz. Durum böyle olunca da, hassas ve tekrarlanabilir bir zamanlama elde etmek çok daha zordur, ilave teknikler kullanmak gerekir. Ama arduino'da işlemci birçok yazılım arasında paylaştırılmaz. Bir tek yazılım vardır ve işlemciyi %100 kullanır. Düşük performans da olsa, böyle bir sistemde öngörülebilir bir zamanlama sağlamak çok daha kolaydır.
 
Mcu olarak nitelendirilen komponentlerin en önemli özelliği kod koruması yapılması.

Ancak; ESP32/8266, Raspberry serisi kod korumaya müsait olmayan ortamlar sunmaktadır.
Yazılımda çok kolaylıklar sunabilen geliştirme ortamları bulunmakta. C/C++, Python, microoython gibi...
 
Mcu olarak nitelendirilen komponentlerin en önemli özelliği kod koruması yapılması.

Ancak; ESP32/8266, Raspberry serisi kod korumaya müsait olmayan ortamlar sunmaktadır.
Yazılımda çok kolaylıklar sunabilen geliştirme ortamları bulunmakta. C/C++, Python, microoython gibi...

Öncelikle şunu söyleyeyim. Tamamen bilmediğimden soruyorum. Yanlış anlaşılma olmasın.

Mesela esp32 ye bir kod yazsam, sonra sadece esp32 yi fiziksel olarak sana göndersem, içindeki kodu başka bir esp ye aktarabilir misin? Yani demem o ki bu iş ne kadar zor veya kolay?
 
Öncelikle şunu söyleyeyim. Tamamen bilmediğimden soruyorum. Yanlış anlaşılma olmasın.

Mesela esp32 ye bir kod yazsam, sonra sadece esp32 yi fiziksel olarak sana göndersem, içindeki kodu başka bir esp ye aktarabilir misin? Yani demem o ki bu iş ne kadar zor veya kolay?
Arduino framework ile geliştiriyorsanız evet başka bir espye kolaylıkla aktarılır.

Esp nin IDF frameworkü ile alabileceğiniz bir güvenlik katmanı var. SPI flash içerisindeki program kodu sizin belirlediğiniz bir key ile şifreleniyor. Bu key harici flasha değil, esp mcu içerisindeki bir alana bir sefer yazılabiliyor, tekrar değiştirilemiyor ve okunamıyor. ESP spi flashden okunan program kodlarını önce bu key ile çözüp sonra işletiyor. Bu yönteminde geliştirme aşamasında getirdiği bazı zorlukları var ayrıca idf tarafında, arduino framework kadar örnekler ve kütüphaneneler yok.

Esplerde flash hafıza harici olduğu için (Pcdeki hard disk gibi düşünün. Eğer hdd şifrelenmediyse hddyi alıp başka bir pcye takarsam içindeki verilere ulaşabilirim. ) içindeki program koduna her halükarda erişilebilir. Şifreli ise teorik olarak veri, alanın bir işine yaramaz ama bir açık veya bir dönüştürme yöntemi varsa / ileride çıkarsa sorun olur.
 
Arduino framework ile geliştiriyorsanız evet başka bir espye kolaylıkla aktarılır.

Esp nin IDF frameworkü ile alabileceğiniz bir güvenlik katmanı var. SPI flash içerisindeki program kodu sizin belirlediğiniz bir key ile şifreleniyor. Bu key harici flasha değil, esp mcu içerisindeki bir alana bir sefer yazılabiliyor, tekrar değiştirilemiyor ve okunamıyor. ESP spi flashden okunan program kodlarını önce bu key ile çözüp sonra işletiyor. Bu yönteminde geliştirme aşamasında getirdiği bazı zorlukları var ayrıca idf tarafında, arduino framework kadar örnekler ve kütüphaneneler yok.

Esplerde flash hafıza harici olduğu için (Pcdeki hard disk gibi düşünün. Eğer hdd şifrelenmediyse hddyi alıp başka bir pcye takarsam içindeki verilere ulaşabilirim. ) içindeki program koduna her halükarda erişilebilir. Şifreli ise teorik olarak veri, alanın bir işine yaramaz ama bir açık veya bir dönüştürme yöntemi varsa / ileride çıkarsa sorun olur.
Benim merak ettiğim konu, espnin flashından program kodunu hex olarak okuduk. Bu hex kodu decompile edip program akışında minör değişiklik yapmak mümkün mü?
 
Eğer hex koduna erişmişsen, decompile da edersin, disassembler ile de bakarsın. İstediğin değişikliği de yaparsın, sadece minör değil. Bu tamamen senin decompiler ve disassember konusunda sahip olduğun bilgi ve tecrübe ile sınırlı.
 
Eğer hex koduna erişmişsen, decompile da edersin, disassembler ile de bakarsın. İstediğin değişikliği de yaparsın, sadece minör değil. Bu tamamen senin decompiler ve disassember konusunda sahip olduğun bilgi ve tecrübe ile sınırlı.
İşte bu konu kolayca yapılır kapsamında mı değil mi :)
 
İşte bu konu kolayca yapılır kapsamında mı değil mi :)

Kolayca yapılmaz. Orijinal cihazın çok özgün, değerli ve zor bir işi yapıyor olması lazım. Böylece bu teknolojiyi korsan olarak kullanmak isteyenler gereken masrafı, zamanı, ve çabayı harcarlar. Veya şu İsrail'in çağrı cihazı patlatması gibi bir sebebi olması lazım. Mevcut cihazın koduna ilave yaparak belli şartlarda, gömülü olan patlayıcıyı harekete geçirebilmen lazım.
 
Kolayca yapılmaz. Orijinal cihazın çok özgün, değerli ve zor bir işi yapıyor olması lazım. Böylece bu teknolojiyi korsan olarak kullanmak isteyenler gereken masrafı, zamanı, ve çabayı harcarlar. Veya şu İsrail'in çağrı cihazı patlatması gibi bir sebebi olması lazım. Mevcut cihazın koduna ilave yaparak belli şartlarda, gömülü olan patlayıcıyı harekete geçirebilmen lazım.

Tamam işte şimdi aynı frekanstayız. Benim hexlerim kendimce şifreli. Ürettiğim ürün klonlanır ise yazılım çalışmaz. Kendim bile firmware yüklediğimde çalışmıyor. Kartları test ederken register ediyorum. Sonra çalışıyor. Ha biri hexi açar şifreleme ile ilgili koşulları bulur iptal eder tekrar derlerse çalışır. Ama sonuçta çok özgün şeyler üretmiyorum. Bunu yapacak kapasitedeki adam isterse oturup kodu baştan yazar. Velhasıl bu seviye koruma benim için yeterli... :tamam3:
 
Bir seviye kadar önlem almışsınız ama hex flashda açık ve register için kullandığınız datada yine flashda kayıtlı ise bu işlerden anlayan birisi için çok fazla zor olmaz. Bazen şifreyi veya koruma mantığının algoritmasını tespit etmek gerekmez, bunun kontrol edildiği nokta / noktaları pasif hale getirmek yeterli olabilir.

Muhtemelen mac id ile bir şeyler yapıp bunu spi flasha kaydediyorsunuz, açılışta veya işleri biraz daha zorlaştırmak için birden fazla yerde bu şartı kontrol ediyorsunuz :)
 
Eğer çok özgün bir iş yapmıyorsa ve sadece tatlı su uyanıklarını caydırman yeterli ise, dediğin gibi değişik tedbirlerle zorluk eşiğini arttırabilirsin.
 
Bir seviye kadar önlem almışsınız ama hex flashda açık ve register için kullandığınız datada yine flashda kayıtlı ise bu işlerden anlayan birisi için çok fazla zor olmaz. Bazen şifreyi veya koruma mantığının algoritmasını tespit etmek gerekmez, bunun kontrol edildiği nokta / noktaları pasif hale getirmek yeterli olabilir.

Muhtemelen mac id ile bir şeyler yapıp bunu spi flasha kaydediyorsunuz, açılışta veya işleri biraz daha zorlaştırmak için birden fazla yerde bu şartı kontrol ediyorsunuz :)

Evet benzer şekilde yapıyorum. Açılışta ve bir kaç yerde ortalığı karıştırıyorum. Düşünce şöyle uğraşacak kişi açılıştaki koşula bir jump vs ekler ise korumayı aştığını düşünsün diyorum. Sonra birkaç yerde yine kontrol yapıyorum. Bu durumda yazılımda bug var gibi saçma davranışlar oluyor. Araya serpiştirdiğim yerleride çözerse daha yapacak bir şey gelmiyor aklıma...
 
Firmware'i harici flashdan okudugu halde kod korumasi yapabilen MCU'lar var. Firmware'i icerideki ramda kosturmak uzere okurken kriptosunu da uzerindeki anahtarlarla cozuyor. Anahtarlari tasarimci cipe gomuyor.

Benimde gecmiste uygulama programina ait hexleri internetten yayinladigim bir uygulamam vardi. Hex kodlar kriptolu olarak internette herkesin erisimine acik. Ancak MCU da loader programi uygulamayi okuyup kendi flashina yazarken kriptoyu acip yaziyor.
 
Firmware'i harici flashdan okudugu halde kod korumasi yapabilen MCU'lar var. Firmware'i icerideki ramda kosturmak uzere okurken kriptosunu da uzerindeki anahtarlarla cozuyor. Anahtarlari tasarimci cipe gomuyor.

Benimde gecmiste uygulama programina ait hexleri internetten yayinladigim bir uygulamam vardi. Hex kodlar kriptolu olarak internette herkesin erisimine acik. Ancak MCU da loader programi uygulamayi okuyup kendi flashina yazarken kriptoyu acip yaziyor.
ESP de program hafızası olarak harici bir spi bellek (benim baktıklarım 25Qxxx) serisi kullanıyordu. Bu chipden herhangi bir eeprom okuyucu ile içindeki veriler okunabilir. Veya direkt esp üzerinden dump edilebiliyor.

Yukarıdaki mesajımda belirttiğim gibi iki framework ile uygulama geliştirilebiliyor. Idf frameworkde sizin bahsettiğinize benzer bir koruma yapısı var. Belirlediğiniz bir anahtar ve o esp chipe özel bir id ile oluşturulan bir keyi, esp içindeki özel bir alana yazıyorsunuz. Bu alan okunamaz ve sadece bir kere yazılabiliyor. İlk açılışta, esp flasha yüklediğiniz programı bu key ile otomatik kriptoluyor. Sonraki çalışmalarda ise flashdan okunan program komutları cpu içerisinde şifresi çözülerek çalıştırılıyor.

Hafıza birimi fiziksel olarak cpunun dışında olduğu için custom bootloader ile esp tarafında (arduino framework kullanılıyorsa) koruma sağlamak zor. Stm lerdeki gibi hafıza chipin fiziksel olarak içinde ve RDP gibi bir koruma yapısı olsa custom bootloader ile dediğiniz şeyi yapmak mümkün / mantıklı. Bende stm ve gigadevice mcu larda bu yapıyı kullanıyorum
 

Forum istatistikleri

Konular
6,952
Mesajlar
118,760
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top