Android Cihazların Çalışma Mantığı

Başlatan yamak, 15 Aralık 2014, 10:22:07

yamak

Tüm android cihazlara aynı api'leri kullanarak nasıl program yazılıyor.Bu işin mantığı nedir.Sonucta tüm cihazlar aynı entegreleri ya da micro işlemcileri kullanmak zorunda değil.Örneğin A firması x firmasının gyroscope unu kullanırken B firması y firmasının gyroscope unu kullanabilir.x ve y nin sürülme şekli,protokolü vs farklı olabilir.
Her firma kendi cihazını üretirken kernel e o cihaz üzerindeki tüm donanımların driver ları google ın belirlediği isimde ekleyip android API lerde bu fonksiyonları o isimlerde çağırıyor mu?Ya da dalvik ya  da ART yi her cihaza göre modifiye mi ediyolar?

X-Fi

#1
Özellikle native uygulamada cihaz aralığı çok geniş android 2.2 den 5.0'a kadar aynı uygulama koşabiliyor ekran uyumsuzluklarını gidermek yeterli oluyor. Bir yazılımın desteklemediği bir protekol ya da cihazın desteklemediği donanım varsa try, catch kontrolünde exception olarak dönüyor ve kod çalışmaya devam ediyor. Kontrol yapmazsanız uygulama çakılıp sonlanıyor çakılan uygulamanın istatistiklerini de google play services kaydedip geliştiriciye gönderiyor. Google ın açık kaynak kodlu sistemi bu apileri ile tahminlerinden öte bir başarı yakaladı. Belkide hiçbir api tamamen hazır olmayacak ama ihtiyaçları karşılayabilecek.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

yamak

Hocam mesela
Camera.open() fonksionunu çalıştırdığımda bu fonksiyon da başka bir low level fonksiyon mu çağırıyor.Bu low level fonksiyonu da tüm device üreticileri aynı isimde mi yazıyor?
Bir de dalvik sadece işlemciye göre derleniyor mu?Yoksa o mikro işlemciye göre modifiye de ediliyor mu?Virtual machine leri yapısını tam olarak bilmiyorum.Mesela Dalvik gpio'lara nasıl erişiyor?

Burak B

#3
Alıntı yapılan: yamak - 15 Aralık 2014, 12:16:38
Hocam mesela
Camera.open() fonksionunu çalıştırdığımda bu fonksiyon da başka bir low level fonksiyon mu çağırıyor.Bu low level fonksiyonu da tüm device üreticileri aynı isimde mi yazıyor?

     Evet. Böyle denebilir. Buna HAL (Hardware Abstraction Layer) deniyor. Yazılım tasarımı yaparken yazdığınız kodun modüler olması gerekiyor. Bu durum sadece android için değil tüm yazılımlar için geçerli. Özellikle bizim alanımız olan gömülü sistem tasarımı konusunda bu daha da önem kazanıyor. Yani şimdi ben bir LCD kontrol kodunu tutup ST(STM32), NXP(LPC), Microchip(PIC,...), 8051 v.s. için ayrı ayrı yeniden yazarsam bu ne kadar mantıklı. Düşünün ki bu işe para ödüyor ve eleman çalıştırıyorsunuz. İmzalanmış kontratlarınız ve bir deadline süreniz var. Yani para = zaman.

     Bunun yerine sadece donanımı ilgilendiren kısımlarını (LCD_init, write, read, ...) üst katmanlardan (puts, putc, putpixel, getpixel, bitblt, ...) ayırıp bunları uygun bir tasarımla bağlarsam bu kod kullanılan dilin kurallarına uyuyorsa her ortamda derlenebilir. Hatta simulasyonu ve testleri yapılabilir.  Böylece donanım değiştiğinde sadece donanım bağımlı kodu donanıma göre düzenlemeniz yeterli olur ve sistemin çalışması etkilenmez. Ben LCD için örnek verdim bunu daha genişletip geneleyebilirsiniz. Kamera da buna dahil.

     Gelelim sanal makine (Virtual Machine) konusuna. Virtual machine dediğimiz şey temelde bir emülasyondur. Yani benzetim yoluyla bir şeyin taklit edilmesidir. Ancak şu açıdan bakarsak. Biz bir donanımı taklit etmek istemiyoruz. Ancak sanal olarak bir donanım/platform oluşturmak istiyoruz. Bunu mevcut donanımımızın gücüyle yapabiliyormuyuz ? Evet. O zaman neden yapmayalım. Dalvik, Java ve diğerleri. Platformdan bağımsız bir işlemci ile yazdığınız kodun en basit bir MCU' dan en gelişmiş bir sunucu işlemcisine kadar koşabildiğini düşünün. Gayet kabul edilebilir ve mantıklı.

     Böylece işlemcinizin içinde başka bir (bazen daha derin, yani birden fazla) işlemci daha çalışmış oluyor. Bu işlemci kendi realmi ile üst(kapsayan) realm arasında haberleşebiliyor. Ancak kendi realmi içerisinde oluşan olayları yapısına göre kapsayan realmden haberdar ediyor yada etmiyor. Bu konu karışık gelebilir daha iyi anlamak için 13. kat filmini izleyin. :)



"... a healthy dose of paranoia leads to better systems." Jack Ganssle

yamak

Teşekkür ederim hocam.
Yani google device üreticilerine kullanacakları HAL ın bir şablonunu veriyor.Üreticilerde bu şablondaki fonksiyon,struct,class vs isimlerine birebir uyan bir HAL yazıyolar.