0'dan Linux'lu Embedded Sistem Tasarlama

Başlatan Elektroemre, 20 Aralık 2011, 11:38:51

Elektroemre

Merhabalar,

Şimdi diyelimki kafamda yapmak istediğim bir gömülü sistem var.
Mesela köpük partisinde kullanıcak olan köpük üretme makinasını kontrol edecek bir sistem. (Tamamen sallıyorum.)

Sistemde ekran, kamera ve çevre birimler var.Ve ben bu sistemi Linux kullanıp yapmak istiyorum.
Donanım tasarlandı, RAM, flash, işlemci ve  çevre birimler tamam.

*Bu sistem için linux kaynak kodlarını nerden bulacağım? Tüm linux geliştiricilerinin buluştuğu ortak bir platform var mı?
*Linux'u nasıl port edeceğim? (Bir işletim sisteminin port edilme sürecini kısaca tanımlayabilir misiniz?)
*Tüm port işlemlerini gerçekleştirden sonra ne gibi araçlarla yazılım geliştirme şansım var?

Beklediğim çok detaylı cevaplar değil, sadece yönlendirme. Bu iş için "esas" olayın olduğu site ve basit kernel derleme vs. örneklerin olduğu siteler olabilir.

Tagli

#1
Bence deney'm kazanmak için önce hazır bir sistem üzerinde bu işleri denemen gerekli. Şahsen ben bu konularda baya bir uğraşmama rağmen, henüz 1-2 donanıma bile hakim olamadım. Öğrenme süreci çok yavaş işliyor.

İlk düşünmen gereken şey bootloader, ki donanıma en bağımlı kısım bu olduğundan sanırım işin en zor bölümü de bu. İronik bir şekilde, hazır donanımlar için bu kısım pek uğraştırmıyor. Bootloader olarak en yaygın kullanılan yazılım uboot. Beagleboard, mini2440 gibi popüler kartlar için uboot zaten port edilmiş. Kendi donanımın için port yapacaksan da, öncelikle aynı işlemciyi kullanan başka bir kart için port edilmiş uboot'u alıp kurcalamalı ve onun üzerinde değişiklik yapmalısın.

Bootloader sorununu çözdükten sonra, kernel'i port etmen gerekiyor. Burada sanırım en büyük sıkıntı aygıt sürücülerinde olacaktır. Yine seninle aynı işlemciyi kullanan hazır ürünler için port edilmiş linux konfigurasyonlarını incelemek yararına olacaktır.

Tüm işlemlerin için ihtiyaç duyacağın çapraz derleyici derlenmesi işine ise pek girmeyeceğim. Zaten ayrıntılarını ben de bilmiyorum ama sıfırdan çapraz derleyici derlemek işi bilen birisi için bile çok zahmetli ve zaman alıcı olduğundan genelde hazır derleyiciler kullanılıyor. Yine de kendin derlemek istersen, bu süreci otomatikleştiren ve oldukça kolaylaştıran yazılımlar mevcut. crosstool-NG bunlardan biri. Yine de bu yazılım bile saç baş yoldurabilir.

Linux kaynak kodları kernel.org'dan temin edilir ama mevcut donanımına uyması için bunları değiştirmen gerekebilir. Bu konuda benim de pek bilgim yok. Benim daha önce üzerinde çalışmış olduğum Beagle Board ve mini2440 kartları popüler olduğundan, bunlarla ilgili port edilmiş kernel'ler mainline adı verilen ana dal ile birleşmiş zaten (merge). Olayın mantığı git versiyon kontrol sistmine dayanıyor. Geliştiriciler kendi donanımları için yaptıkları portları alt ağaçlarda geliştiriyorlar. Daha sonra kernel.org'un yöneticilerinden onay gelirse (bu adamlara da sanırım gatekeeper deniyor) alt ağaç, mainline ile birleştiriliyor. Bu sebeple, üreticinin yaptığı güncellemeler mainline'a geç gelebilir. Mainline genelde daha kararlı, sorunsuz ama daha eskidir. Alt ağaçları üreticinin sitesinde temin edebilirsin. Bazen bu kodları doğrudan çekmek için link bulunmaz. git adlı programı kullanarak ancak çekebilirsin.

Linux çekirdeğini kurup çalıştırmakla da iş bitmiyor. Hatta yeni başlıyor diyebiliriz. Tüm Linux dağıtımları zaten yaklaşık olarak aynı kernel'i kullanıyor. Dağıtımları birbirinden ayıran şey root file system içinde barındırdıkları. Temel bir root file system (rootfs) sadece birkaç dosya ve klasörden oluşabilir. Ancak bunun içine sıfırdan yazılım kurmak biraz zor bir iş. İşin içine paket yöneticileri falan giriyor ki bu konuda da bilgim yok. Eğer istersen hazır bir sistem de kurabilirsin. Sıfırdan dağıtım oluşturma işine girmek istiyorsan sanırım ilk derleyip kurman gereken program busybox olacaktır. Bu program ile temel komutları çalıştırabilecek asgari bir sistemin olacak.

Yazdıklarımın çok dağınık ve kafa karışıtırıcı olduğunun farkındayım ama bu konuda benim de fazla deneyimim yok. Ve süreç gerçekten de karışık çünkü bu tür şeyleri tek bir kaynaktan öğrenmen mümkün olmuyor, internette saatlerce serseri kurşun gibi dolaşman gerekiyor. Karşılaştığın ufak bir sorunla bir bir hafta zaman kaybedebiliyor ve çözümün sadece 1-2 karakteri değiştirmek kadar kolay olduğunu görüp sinir krizi geçirebiliyorsun. Bunları yaşadım.

Dediğim gibi, bu işlere yeni başlıyorsan Beagle Board veya mini2440 gibi bilinen bir sisteme sıfırdan kurulum yapmayı deneyerek başla. Ancak ondan sonra kendi tasarladığın bir sisteme geçebilecek deneyime sahip olabilirsin.
Gökçe Tağlıoğlu

Elektroemre

Gayet açıklayıcı güzel bir yazı olmuş teşekkür ederim.
Kendi sistemimi tasarlamak istediğimde o zaman söyle bir yol izleyebilir miyim;

Mesela BeagleBoard (veya işlemci ve çevre birimi uygun popüler bir kart) alınır, yazılım geliştir. Aynı işlemci ram rom kullanılıp gereksiz donanım kırpılıp, gerekli donanımlar eklenerek yeni PCB hazırlanır ve yapılmak istenen sistem kısa zamanda gerçekleştirilir.

İşin çok low-level kısımlarıyla uğraşmak değilde benim amacım, işletim sistemi olmasının rahatlığını yaşayıp kaymağını yemek.
Linux konusunda bilgisizim sorular biraz garip gelebilir;

- mesela kernel.org daki kaynak kodları donanıma uygun port edince işletim sistemimiz oluyor ve multitasking yapıyor değil mi?
- İşlem sonrasında C'de yazdığım yada görsel arayüzlü farklı programları bir şekilde yazıp exe yapıp depolama birimine atınca çalıştırabilir miyim?

Direkt windows'cu mantığında sorular olabilir ama başlangıç için cevapları benim açımdan önemli.

mufitsozen

Alıntı yapılan: Elektroemre - 20 Aralık 2011, 11:38:51
Merhabalar,

Şimdi diyelimki kafamda yapmak istediğim bir gömülü sistem var.
Mesela köpük partisinde kullanıcak olan köpük üretme makinasını kontrol edecek bir sistem. (Tamamen sallıyorum.)

Sistemde ekran, kamera ve çevre birimler var.Ve ben bu sistemi Linux kullanıp yapmak istiyorum.
Donanım tasarlandı, RAM, flash, işlemci ve  çevre birimler tamam.

*Bu sistem için linux kaynak kodlarını nerden bulacağım? Tüm linux geliştiricilerinin buluştuğu ortak bir platform var mı?
*Linux'u nasıl port edeceğim? (Bir işletim sisteminin port edilme sürecini kısaca tanımlayabilir misiniz?)
*Tüm port işlemlerini gerçekleştirden sonra ne gibi araçlarla yazılım geliştirme şansım var?

Beklediğim çok detaylı cevaplar değil, sadece yönlendirme. Bu iş için "esas" olayın olduğu site ve basit kernel derleme vs. örneklerin olduğu siteler olabilir.

Benim yazdigim cok klasik bir oneri olacak ama


  • Cok iyi ingilizce ogreneceksiniz,
  • Embedded Linux Primer: A Practical Real-World Approach
  • Linux for Embedded and Real-Time Applications
  • Building Embedded Linux Systems
  • Pro Linux Embedded Systems  kitaplarini okuyacaksiniz

iyi calismalar
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mufitsozen

Alıntı yapılan: Elektroemre - 20 Aralık 2011, 12:15:12
..........Direkt windows'cu mantığında sorular olabilir ama başlangıç için cevapları benim açımdan önemli.

sayin @elektroemre sizin acinizdan onemli olmasinin hicbir ehemmiyeti yok (irrelevant) Esas olan embedded linux acisindan onemlimi?
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

EMG81

Alıntı yapılan: Elektroemre - 20 Aralık 2011, 12:15:12

İşin çok low-level kısımlarıyla uğraşmak değilde benim amacım, işletim sistemi olmasının rahatlığını yaşayıp kaymağını yemek.
Linux konusunda bilgisizim sorular biraz garip gelebilir;



Bende bunu istiyorum aslında. Windows CE ve Android sanki bize daha yakın. (Kullanıcılardan bahsediyorum)

@mufitsozen

Verdiğiniz kitaplar için teşekkürler. Bende linux u pek bilmediğimden garip bir soru soruyor olabilirim.

Linux, Android, Win CE ve adını bilmediğim diğer işletim sistemleri belki platformları farklı olabilir ama aynı mantıkta mı kuruluyor? Tagli nın bahsettiği gibi bir sıramı izleniyor? Eğer durum böyle ise bu konu üzerine yazılmış kitap yada kitaplar önerebilir misiniz ?

Elektroemre

Hocam şöyle söyleyeyim, linux'u derinlemesine öğrenmek değil hedefim.
MCU'lara ağır kaçan, bilgisayarınsa gereksiz olduğu orta kademe işler için düşünüyorum.

Atıyorum, vga çıkışı olan flash bellekten birşeyler okuyup yazan bir sisteme ihtiyacım var.
MCU için ağır kaçıyor ama bilgisayarada gerek olmayacak bir iş bu.

Bende ARM tabanlı bir işlemci çevre birim vs kullanıp linuxla böyle bir iş kotarılabilirmiyim çok zahmete girmeden, mesele bu.
Çok zahmet vermeden linux bunları bana verebilir mi? Çok zahmetli ve maliyetli oluyorsa @EMG81'inde dediği gibi başka alternatiflere göz atmak gerekir.

Tagli

Bu durumda hazır bir sistem kullanmak süreci oldukça hızlandıracaktır. Narcissus adı verilen bir araç pek çok değişik platform için Ångström adı verilen Linux dağıtımını gereksinimler doğrultusunda konfigüre ederek sunabiliyor. Kullanımı çok kolay ancak bazı düşük seviye ayarlara ulaşım konusunda sıkıntılar olabilir. Bence ama başlangıç için oldukça iyi bir adım.

Bu arada, sözkonusu Linux olduğunda .exe dosyalarını unutabilirsiniz.  ;) Gerçi dosya uzantısı haricinde pek fark yok. Ancak eğer gömülü sistem üzerinde yerli derleyici yoksa (terimleri kullanırsak: target üzerinde native compiler yoksa), geliştirme makinesi üzerinde (host machine) çapraz derleyici olması gerekecek ve kodlar bununla derlenecek. Genelde bu sistemlerde C ve C++ kullanılıyor ancak diğer dilleri de kullanmak mümkün olabilir.

Ben olayın Linux tarafı ile uğraşmış olduğum için Windows CE ile ilgili hiçbir fikrim yok. Android de bildiğim kadarıyla fazlaca faklılaşmış bir çeşit Linux. Ama çekirdeği de oldukça fazla değişime uğradığı için bir Linux dağıtımı sayılmıyor yanlış bilmiyorsam. 
Gökçe Tağlıoğlu

MC_Skywalker

Linux için pek yaralı olacak bir bilgideğil ama ufak bir donanım notu vereyim. MAttbaya yeni alınan banyo makinaları kendi gömülü linux u ile çalışmakta donanımı incelediğimde

Firma  SODIMM formatında hazır ARM A9 MCU kartı kullanmış. Kendisi baseborad ve çevre kartları tasarlamış. Bütün komponetleri özellikle hazır sürücüleri olanlardan seçip kullanmış.

kullandığı kart Atmel in ARM A9 MCUtabanlı.  kullandıkları kart buna benziyor. http://www.armkits.com/product/mini9261-I.asp. MCU üzerine Garanti etiketi yapştırlmış sökemediğim için tam modelini yazamadım.

yamak

Ben de uğraşmak istiyom gömülü linux ile ama beagle board çok pahalı. Tam farnellden almaya kalkıyodum ki bir de ne duyayım orda yazan fiyat haricinde kargo parası ve gümrük vergisi olayları da giriyomuş işin içine. Şimdi biraz geri çekildim ama param olduğunda alacam İnşallah.

Tagli

Gökçe Tağlıoğlu

yamak

Hocam şimdi bu kiti alsak ödeyeceğimiz fiyat sadece 70€ mu olacak yoksa ekstradan kargo vs. parası da verilecek mi? Bunun hakkında bi bilginiz var mı?

Tagli

Maalesef bir bilgim yok ama forumda Farnell siparişlerinin toplandığı bir başlık vardı. Belki orada ayrıntılı bilgi bulabilirsin.
Gökçe Tağlıoğlu

EMG81

Alıntı yapılan: Tagli - 20 Aralık 2011, 15:32:55
BeagleBone düşünülebilir. Biraz daha ucuz.
http://tr.farnell.com/circuitco/bb-bone-000/kit-dev-beaglebone-cortex-a8/dp/2063627?Ntt=beaglebone

Alıntı yapılan: yamak - 20 Aralık 2011, 15:56:42
Hocam şimdi bu kiti alsak ödeyeceğimiz fiyat sadece 70€ mu olacak yoksa ekstradan kargo vs. parası da verilecek mi? Bunun hakkında bi bilginiz var mı?


Alıntı yapılan: Tagli - 20 Aralık 2011, 16:11:14
Maalesef bir bilgim yok ama forumda Farnell siparişlerinin toplandığı bir başlık vardı. Belki orada ayrıntılı bilgi bulabilirsin.

Bu kart üzerinde Ne HDMI ne VGA nede Composite video var. TFT si bile yok.


ErsinErce

önceden verildi mi bilmiyorum ama 2012 de çıkması planlanan şöyle bir platform daha var
25$ gibi cüzzi bir ücrete sahip olacak deniyor http://www.raspberrypi.org/faqs