u-boot ve kernelciler bir adım öne çıksın :)

Başlatan salih18200, 30 Mayıs 2014, 00:02:29

salih18200

Merhaba Arkadaşlar,

2 hafta kadar önce gömülü linux işine el attım elimde beaglebone black var. Amacım ihtiyaç çerçevesinde kendi kartımı tasarlayıp u-boot ve kerneli port etmek veya CPU kısmını modül olarak kullanıp çevre birimleri alt kart tasarlayarak işimi halledebilir.

Şu linkteki modül vs.
http://www.variscite.com/products/system-on-module-som/cortex-a8/var-som-am33-cpu-ti-am335x-am3354-am3352

u-boot, kernel, rootfs az çok kavradım. Elimde Nazım Koç Gömülü Linux Sistemleri kitabı var. Temel kavramları bu kitap sayesinde öğrendim.
Şuan yeni bir bord için u-boot port etmek için araştırmalarıma devam ediyorum.

Bu konuda tecrübesi olan arkadaşlar. Bir el atıp yol gösterebilirlerse sevinirim..

Tagli

u-boot'un port edilmesi zor ve deneyim isteyen bir iş diye biliyorum. Ama büyük ihtimalle bunu yapman gerekmeyebilir. Ortada Linux çalıştıran hazır bir kart varsa, büyük ihtimalle birileri zaten gerekli portu yapmıştır. Ayrıca u-boot, gömülü sistem tasarımının çok küçük bir bölümü. Kernel çalışmaya başlayana kadar işe yarıyor sadece. Yani zaman ve emeğini ona odaklama bence.

Pek çok hazır kart için kernel de bulabilirsin. Kernel'in port edilmesi de yine zahmetli ve bilgi isteyen bir iş. Bazı durumlarda, kernel.org'dan çekeceğin kernel için o karta uygun config dosyası olabilir. Ancak kart için uygun kerneli, o kartın veya işlemcinin üreticisi sağlar genelde. Kerneli kod olarak alıp, config'leri ile oynayarak öte derleme (cross compile için kendi uydurduğum Türkçe karşılık) yapma üzerine odaklanmanı tavsiye ederim.

Bu arada, Nazım Koç'un kitabını ben de çok faydalı buluyorum.

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

Goo

#2
Tagli'in da dediği gibi u-boot için cpu'nun config dosyalarının hazırlanması gerekiyor. Bir ara ben de beaglebone'da uğraşmıştım. Sadece u-boot prompt ismini değiştirip, tekrar port etmiştim :D Beaglebone gibi örnek projelerden yola çıkarak ne gibi config. dosyaları gerekiyor, nasıl yazılır vs. iyi öğrenmek ve aynı zamanda kullanılacak CPU'ya da register seviyesinde kod yazabiliyor olmak gerekiyor. Onun dışında kendi cpu'umu seçer kartımı tasarlarım diyorsan u-boot tan sonra kernel'i cpu'na göre derleme, donanımına göre device driver'larını ekleme işi oldukça bilgi isteyen bir iş.

Vakit buldukça ben de bu işle uğraşmak istiyorum. Nazım Koç'un kitabı bende de var, oldukça faydalı bir kitap; fakat işin derinindeki config. kısmına hiç girmiyor. Bu konuda farklı kaynak arayışı içerisindeyim. Elimde bir de şu kitap var :http://shop.oreilly.com/product/9780596002220.do daha tam inceleyemedim ama ilk izlenimlerim, detaylı ve güzel bir anlatımı olduğu yönünde.

salih18200

Gömülü sistemin amacı spesifik tek bir işe odaklanması, ama geliştirme kartlarına baktığımız zaman bir bilgisayarın neredeyse tüm kabiliyetlerine sahip.
Benim amacım ihtiyaç dahilinde gerekli bileşenleri donanımdan çıkarmak. Gerekli revizyonları yapabilmek. U-boot' a takılmamın sebebi ise sistem açılışta donanım birimlerinin hazırlanmasından sorumlu olması.. Kendi kartımı tasarlayacağım zaman RAM, FLASH vs. değişikliğine gittiğimde direk olarak u-boot revize edilmesi gerekiyor. Bu işler zor diyerek kolay yolu seçmektense öğrenmek daha iyi olur diye düşünüyorum. Sonuçta elin oğlu bunu yapabiliyorsa bizlerde yapabilmeliyiz. Ben bu alanda uzmanlaşmak istiyorum. Artık devir gömülü sistem devri. Direk C kodu ile böylesine kapasiteli cihazları programlamak çok zor. Mecburen işletim sistemi gerekiyor. Dokunmatik ekranlar, kullanıcı etkileşimi, sistemlerin akıllı hale gelmesi sektördeki en basit ürünlerde bile müşteriler artık bir yenilik, akıllılık arayışı içerisindeler.

Şuan kavramları oturtma aşamasındayım. Mesela birincil yükleyici olan ROM kodu üretici tarafından SOC içerisine kazınmış olarak mı geliyor. Yoksa biz bunu üretim aşamasında kendimiz mi SOC içerisine yüklüyoruz. ikincil yükleyici olan MLO (SPL) ve üçüncü yükleyici U-Boot bizim tarafımızdan derlenebiliyor. Diyelim ben hazır modul halinde CPU birimini  kullandım. Çevre birimleri içinde alt kartı kendim tasarladım. Bu durumda u-boot'a müdahele etmem gerekmiyor mu? İstediğim pine istediğim özelliği atamam lazım. Mesela UART0 A portundan değilde B portundan kullanmak istiyorum. Mux olayı giriyor yanılmıyorsam işin içine, bu durumda da u-boot' a müdahale gerekiyor.


yamak

Mux olayı için U-boot'a bişey yapmanıza gerek yok.Yeni linux kernellerinde device tree diye bir olay var.Hangi pinleri kullanmak istiyosanız ona göre bir device tree oluşturmanız yeterli.

Goo

Birincil yükleyiciler ROM'a kazınmış olarak geliyor. Memory map'te genelde ilk sırada oluyor. İkincil yükleyiciyi-MLO yükleme görevini yerine getiriyor.

U-boot'ta sadece temel CPU ayarları yapılıyor diye biliyorum. Yani kernel ya da kendi kodunuzu CPU'ya yükleyebilecek kadar donanımı ayarlamanız gerekiyor. Yani CPU clock ayarları, Flash RAM conf. , serial port vs. bu ayarları içermesi gerekiyor. Donanıma ait diğer özel her türlü birim zaten kernel'e port ediliyor, kernel derleme aşamasında. Device driver'larının yazılması gerekiyor. TFT driver, ethernet controller, sd card vs. neler kullanılacaksa onların driver'ları yazılıyor.