ARM İşlemciler İçin Linux Nasıl Yapılıyor?

Başlatan Farukc, 23 Temmuz 2013, 00:08:00

Farukc

Arkadaşlar çok merak ettiğim birşey var. Şuana kadar beaglebone, beaglebone black gibi kartlarda linux denemelerim oldu. ;D Fakat kart üzerinde yazılımsal işler yaptım. Cile program yazdım derledim falan. Ama hiç donanımı anlayamadım. :-\

Neyse uzatmadan sorularımı soruyum:

* Bu adamlar kartı hazırladıktan sonra 0 dan nasıl linux yüklüyorlar?
* Linux kart üzerinde nasıl çalışıyor?
* Bootloader nedir?
* Kernel nedir?
* Örneğin bu kernel veya bootloader Keil gibi bir derleyici ile mi yazılıyor. Yoksa Gcc gibi bir derleyici ile mi?
* Uzun çabalar sonucu öğrenmek amaçlı herhangi bir boarda linux yazıp çalıştırabilirmiyiz?
* Buildroot ile board için linux derlemek ve çalıştırmak mümkünmü?

Bu arada şunu söyliyim yardımcı olacak arkadaşlar elektronik bazında anlatırlarsa çok iyi olur. Sonuçta bilgisayarcı değiliz elektronikçiyiz... ;D

Saygılar...

Mr.Java

Bu beagleone nedir bir de onu anlasak.Tuttu gitti bir beagleone.Neler yapılır,neden linux diye uzar gider.

Farukc

Alıntı yapılan: Fkarizmatik - 23 Temmuz 2013, 00:14:58
Bu beagleone nedir bir de onu anlasak.Tuttu gitti bir beagleone.Neler yapılır,neden linux diye uzar gider.

Abicim herşey var beaglebone da linux ayrı bir dünya google da veya youtube da bir araştır bana hak vereceksin.

yldzelektronik

#3
Alıntı yapılan: Farukc - 23 Temmuz 2013, 00:08:00
Arkadaşlar çok merak ettiğim birşey var. Şuana kadar beaglebone, beaglebone black gibi kartlarda linux denemelerim oldu. ;D Fakat kart üzerinde yazılımsal işler yaptım. Cile program yazdım derledim falan. Ama hiç donanımı anlayamadım. :-\

Neyse uzatmadan sorularımı soruyum:

* Bu adamlar kartı hazırladıktan sonra 0 dan nasıl linux yüklüyorlar?
* Linux kart üzerinde nasıl çalışıyor?
* Bootloader nedir?
* Kernel nedir?
* Örneğin bu kernel veya bootloader Keil gibi bir derleyici ile mi yazılıyor. Yoksa Gcc gibi bir derleyici ile mi?
* Uzun çabalar sonucu öğrenmek amaçlı herhangi bir boarda linux yazıp çalıştırabilirmiyiz?
* Buildroot ile board için linux derlemek ve çalıştırmak mümkünmü?

Bu arada şunu söyliyim yardımcı olacak arkadaşlar elektronik bazında anlatırlarsa çok iyi olur. Sonuçta bilgisayarcı değiliz elektronikçiyiz... ;D

Saygılar...

Sorulara bildiğim ve yorum yapabildiğim kadarıyla cevap vereyim.İşin ehli falan değilim.Sadece meraklısıyım.

* Bu adamları bilmem ama bizim adamlarımız kendi sbclerini yaptıktan sonra tasarladıkları karta uygun kernel derlediler ve testlerini yapıp yüklediler.Gerekli yerlerde driverler yazıldı ve yüklendi.Linux un yada bir işletim sisteminin yüklenmesi işi biraz uzun.
*Bu soruyu tam anlayamadım.Kart üzerinde nasıl çalışıyor derken?
*Boot-looader.Yani bir yükleyici olarak çalışır.Bellekte önceden belirlenmiş adrese yazılan bir program yükleyici programdır.Örneğin 0-7fffh e kadar adreslenen bir alanınınz var.Bu alana bootlaoder yükleyeceksiniz.Siz bootloaderi belleğin ilk yada son adresine yükleyebilirsiniz.Ben ilki tercih ederim.Yine örneğin ffh kadar yer kaplayan bir bootloaderiniz var.Siz yazdığınız kodu derliyorsunuz ve bu bootloader size jtag vs gibi işlerle uğraşmadan (bootloadere göre değişir.Seri var usb var ethernet var spi var.Çeşit çeşit.) işlemcinizi tekrar programlama imkanı veriyor.Bootloader sizin hex kodu alıp sizin için program memoriye kendi finish adresinden itibaren yazıyor.Böylece siz rahatlamış oluyorsunuz.  http://bekirkarul.com/post/bootloader-nedir-nasil-yazilir/
*Kernel çekirdek anlamına da gelmek ile beraber teknik manada işletim sisteminin kalbini/çekirdeğini oluşturur.Donanım ile işletim sistemi katmanını bir arada düzgün çalıştıran ara platform gibi düşünülebilir. http://tr.wikipedia.org/wiki/%C3%87ekirdek_(bilgisayar_bilimi)
*Eğer yanlış bilmiyorsam keil bir derleyici değil bir idedir.Ide compile etmez sadece metin editörlüğü vs gibi işlemlerle ilgilenir.Ide olarak kullanılabilir mi?Muhtemelen evet.Gcc bir derleyici/compiler dir.Bu derleyici kullanılarak ansi c ye uygun kodlar derlenebilir.
*Bir boarda linux yazmak mı?Sanırım irili ufaklı kernel derlemelerini kastediyorsunuz.Programcılık bilginize güveniyorsanız bence harika bir düşünce.Hedeflerim arasında.Sorunuza gelirsek teoride evet.Linux yazıp uygun şartları taşıyan herhangi bir boarda linux "yüklenebilir".
*Eğer yanlış anlamadıysam sorunuza cevap olabilecek bir yazı  http://www.mcu-turkey.com/arm-mimarisi-icin-linux-tabanli-isletim-sistemi-tasarimi/ 

Buildroot olayını şimdi öğrendim.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Farukc

Öncelikle çok Teşekkür ederim baya yardımcı oldunuz.Ama biraz zor anlayan birisiyim bir kaç sorum daha olacak:
* Yani bir işletim sistemi Bootloader ,Kernel ve File system den mi ibaret mi?
* Uboot,Xboot nedir? Bootloader la alakası varmı?
* Programcılık bilgilerim göz önüne alırsak (C/C++/JAVA biliyorum. C ile aram çok iyi.). Kernel derleyebilirmiyim?
* Eğer kernel derleyebilirsem. Hangi araçları kullanmalıyım?
* Bir board da Linux yüklemek için; Bootloader yazıp Kernel derleyip  gerekli Linux dosyalarını hafızaya atmak yeterlimi?

Bu arada Keilin derleyicisi Gcc göre farklı o yüzden derleyici dedim. ;D

polleme

Gömülü Linux Sistemleri adlı çok güzel bir kitap var, sorduğunuz veya aklınıza gelebilecek her tür soruya cevap bulabilirsiniz. İçinde uygulamalar da yaptırıyor. Şiddetle tavsiye ederim.

Farukc

Alıntı yapılan: polleme - 23 Temmuz 2013, 08:29:20
Gömülü Linux Sistemleri adlı çok güzel bir kitap var, sorduğunuz veya aklınıza gelebilecek her tür soruya cevap bulabilirsiniz. İçinde uygulamalar da yaptırıyor. Şiddetle tavsiye ederim.

O kitabı alacağım zaten de bu sorularla bir temel atıyım dedim.

yldzelektronik

Alıntı yapılan: Farukc - 23 Temmuz 2013, 08:21:07
Öncelikle çok Teşekkür ederim baya yardımcı oldunuz.Ama biraz zor anlayan birisiyim bir kaç sorum daha olacak:
* Yani bir işletim sistemi Bootloader ,Kernel ve File system den mi ibaret mi?
* Uboot,Xboot nedir? Bootloader la alakası varmı?
* Programcılık bilgilerim göz önüne alırsak (C/C++/JAVA biliyorum. C ile aram çok iyi.). Kernel derleyebilirmiyim?
* Eğer kernel derleyebilirsem. Hangi araçları kullanmalıyım?
* Bir board da Linux yüklemek için; Bootloader yazıp Kernel derleyip  gerekli Linux dosyalarını hafızaya atmak yeterlimi?

Bu arada Keilin derleyicisi Gcc göre farklı o yüzden derleyici dedim. ;D

Üstat sorular hakikaten güzel de cevaplayacak kişi ben olursam o kadar güzel değilim ne yazık ki :D Ama bakıp kaynaklarıyla cevaplamaya çalışayım.Dedim ya işin müdavi değilim.Şimdilik.Öğrenmeye çalışıyorum.Sayende ben de tekrardan bakıp bilmediklerimi de öğrenmiş olurum.

*Öncelikle açıkçası hangi bileşenlerden oluşuyor tam olarak bilmiyorum.Ancak saydıklarınızın olduğunu biliyorum.Bir farkla.Boot loader işletim sisteminin bir parçası değildir.O sadece is (işletim sistemi)i yüklemek için çalışır.Yani işlemciyi belleğin işletim sisteminin çalıştığı adrese yönlendirir.Sonra vazifesi biter.Ancak kernel ve file system kısmı doğru.Eksiği var mı bilmiyorum.
*http://www.linux-mips.org/wiki/U-Boot bir yazı var.Ancak çok da okumadım.Bildiğim kadarıyla booloader.
*Programcılık bilgilerini eleştrirmemi muhakkak istemedin ancak ben eleştirmem ve göz önüne de almam çünkü bu konuya dair ne paylaşımını hatırlıyorum ne de seni tanıyorum.Ancak bir şey var.Eğer iyi olduğunu düşünüyorsan ki düşündüğün belli; O zaman Ya Allah.Durmak olmaz.Ben de istiyorum.Hatta kernel indirdim inceliyorum.Ne nedir diye.Cross compile konularını araştırıyorum falan filan.Zaman buldukça.Kernel derleyebilir misin?Bilmiyorum sana soruyorum derleyebilir misin?Ama bence derleyebilmelisin.
*İşin aslı hocam bilmiyorum. Google amca karşıma şöyle seçenekler çıkardı;
https://www.google.com.tr/search?q=kernel+derleme&oq=kernel+derleme&aqs=chrome.0.69i57j0l3j69i62l2.3022j0&sourceid=chrome&ie=UTF-8
BUrada gömülü sistem de var, pc de var.Sen hangisini istiyorsun.Araçları gördüğüm kadarıyla biraz değişiyor.Ancak değişmeyen kısmı bildiğim kadarıyla Eclipse üzerinde gcc derleyicisi.C için.Yanlış biliyor olabilirim.
*Şimdi düşünelim;
Bir bilgisayarın çalışması için donanımları kullanabilecek bir işletim sistemi gerekir.Bu işletim sistemini ilk enerjilendirmeden sonra koşturabilecek bootloader (burada işlemciyi işletim sistemiyle tanıştırma şekline böyle söyledim.Yoksa işletim sistemini koşturan işlemci. :) ) gerekir.Eee geriye ne kaldı ki?Ancak burada olay şu;
Derleyeceğin kernel senin mevcut donanımına uygun şekilde derlenmiş olmalı.Senin donanımında buletout var ancak sürücülerinin arasında yok ve sen o donanımı kullanmaya çalışıyorsun.?Anlatabildim mi bilmiyorum.Başka bir örnek; Omap işlemci var kartta ancak kernel imaj s3c2440 için derlenmiş ve sen yüklemeye çalışıyorsun?Gibi.

Önemli not:İsterdim ki bu bilgiler referans alınabilsin ancak en başta belirttiğim gibi işin aslına hakim değilim yanıldığım noktalar yüksek ihtimalle çoğunlukta.İşin ehli de yanıtlarsa, yanlışlarımı düzeltirse ben de öğrenirim.
Saygılar.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Farukc

Dediğiniz gibi keşke işin ehli olup bize yardım etse fakat şuan beklemekteyiz. Bende zaten forumla bir kaç haftadır haşır neşir oluyorum. :D Yardımınızla ulaştığım sonuçlar :

* Kernel derleme ile ilgila araştırmalar yapmayı düşünüyorum.
* Bir bootloader yazmayı deneyeceğim.
* C ile Kernel arasındaki ilişki ile ilgili araştırma yapacağım.

Eğer bunları yaptıkdan sonra Kernel derleyebilir bir seviyeye gelirsem o zaman kolları sıvayıp Ya ALLAH deme zamanı geldi. Ama sanki daha tam hazır değilim gibi :-\ . İşin ehli yardımcı olsa şahsım adına çok mutlu olurum. ;D

Saygılar...

CoşkuN

Embedded Linux konusunda şuradaki kaynaklardan da faydalanabilirsiniz: http://free-electrons.com/docs/

Tagli

#10
Bunların hepsi çok derin konular ve korlarım ben de bu işlerin pek üstadı sayılmam. Ama zamanında - her ne kadar sonunda elle tutulur bir sonuç alamamış olsam da - bu işlerle uğraşmışlığım var. O yüzden sanırım birkaç soruya cevap verebilirim. Gerçi sorular büyük oranda cevaplanmış ama yine de aklıma gelenleri yazacağım.

Kernel derleme ve Linux sistemi kurlumu ile C bilgisinin doğrudan bir ilgisi yok aslına. Derleme sistemleri ve de çapraz derleme bence üzerinde uzmanlaşma gerektiren bambaşka bir konu. Olayın ne kadar karmaşık ve meşakkatli olabileceğini görmenin en kolay yolu, gömülü sistemleri bir kenara bırakarak, normal bilgisayar için sıfırdan bir dağıtım (distro) toplamaya çalışmak. Bunun adım adım nasıl yapılacağını gösteren bir kaynak var, hatta sürekli de versiyonu değişiyor. İş bittiğinde yarım yamalak bir Linux dağıtımınız oluyor. http://www.linuxfromscratch.org/. İşin içine "öte derleme" (cross compiling için kendi uydurduğum bir çeviri, çünkü çapraz derleme ifadesini sevmiyorum) girince ortalık iyice karışıyor. Gerçi LFS de aslında öte derleme yapıyor bir çeşit, ama aynı mimari için.

Bence bootloader yazma işine hiç girme. Çok ileri seviyede donanım bilgisi gerektirir. Bunları zaten genelde o işlemcinin üretici firmasında çalışanlar yazıyor. Bazen de bu firmalar açık kaynaklı projelere kendi ürünleri için destek sağlıyorlar. uboot benzeri projelerin de o şekilde yürüdüğünü sanıyorum. Yine de "bilgisayarcı değil elektronikçiyim" demişsin, bu durumda konu ilgini çekebilir. Ben kendimi daha çok bilgisayarcı gibi gördüğüm için, donanım seviyesine bu kadar bulaşmak istemediğimden dolayı yukarıdaki yorumu yaptım.

Kernel derleme işi fazla zor değil. Ama ana kaynaktan (kernel.org) çekersen, o kernel senin gömülü sistemin için çalışmayabilir veya bazı özellkleri bulunmayabilir. Genelde üreticiler, işlemcileri için kendi kernel ağaçlarını oluştururlar. Bunlar zaman içinde ana hatta (mainline) kabul edilip kernel.org'da yerini alabilir ama bu genelde zaman alır. Bu sebeple, gömülü bir sistem için kernel'i kendi üreticisinden çekmek daha uygun olur. Bu işte en sıkıcı kısımlardan biri kernel konfigürasyonunu yapmak sanırım. Burada yapacağın ayarlar, sistemin yeteneklerini belirliyor. Ayarları yanlı yaparsan hiç çalışmama ihtimali de var. Kernel'i veren üretici genelde varsayılan bir konfigürasyon ayar dosyası da veriyor. Bunun üzerinde gidip değişiklik yapmak daha rahat oluyor. Yoksa körlemesine iş çok zor.

İşletim sistemi kernel ve root file system (rootfs)'den ibaret. Bootloader onun bir parçası değil. Gömülü sistemlerde en popüler olanı uboot, çünkü pek çok popüler karta destek veriyor. Nornal bilgisayarlarda ise genelde GRUB kullanılıyor. yldzelektronik'in de dediği gibi, işletim sistemi başladıktan sonra bootloader'ın işi biter. Yalnız bu başlatma sırasında "kernel argümanları" denilen bazı ayarlar vardır. Bunlar bootloader'dan girilir. Bootloader kernel'i başlatırken bu ayarları (ne olduklarını bilmeden ve pek de umursamadan) kernel'a geçirir.

Kernel GCC ile derlenir. Ancak, normal bir bilgisayar için derlemiyorsan bir "öte derleyici"ye ihtiyacın var. Bunun oluşturulması ise bambaşka bir konu ve söylendiğine göre, konunun uzmanlarına bile saç baş yoldurtacak kadar sorunlu ve zor bir süreç. Hazır oluşturulmuş bir öte derleyici kullanmak daha rahat olacaktır. "Sourcery CodeBench" (eski adıyla Sourcery G++) bu konuda en popüler derleyicidir. Kendi derleyicini oluşturma işini kolaylaştıran crosstool-ng diye bir sistem de vardı, ama o da çok kolay sayılmaz. Buildroot da kendi derleyicisini otomatik olarak oluşturuyor. LFS'de ise adımları takip ederek sen yapıyorsun bu işi. Ne kadar pis bir iş olduğunu o adımları takip ederek görebilirsin.

Buildroot, bu sancılı süreci biraz otomatikleştirmiş bir sistem. Yapılan ayarlara göre kendisi ilgili yerlerden kaynak kodları çekiyor, önce bir "öte" GCC derliyor, sonra bunu kullanarak kernel'i ve rootfs içine yerleşecek başta busybox olmak üzere diğer yazılımları derleyerek bir rootfs oluşturuyor. Bu arada, sorular arasında geçmiyor ama busybox yazılımını da bir araştır. Gömülü sistemlerde sıkça kullanılır.

Cevaplarım biraz karmaşık oldu, kusra bakma. Aklıma geldiği gibi yazdım.
Gökçe Tağlıoğlu


polleme

Alıntı yapılan: yamak - 23 Temmuz 2013, 12:05:22
http://www.ucanlinux.com/2012/08/29/basit-bir-gomulu-sistemin-kurulusu/
Bu yazıyı incelemeni tavsiye ederim


Bu yazı zaten Gömülü Linux Sistemleri kitabından alınma. Aynı yazarın yazdığı bir yazı.

restore

ben cok uzagım bu konuya belki ama eskiden düşündüğümde komut seti felan duymuştum. intel işlemciler 32 komut setine sahip gibi bir yorumdu.  sanırım donanımı bu 32 temel komuta göre tasarlıyorlar. böyle büyük bir transistör yıgını yaratıyorlar.  sonra gönderilen bilgiler -ram den yada başka bi sıga dan - komut setinin denklemlerine kombinasyonlarına göre  şekillenebilecek derleyici hazırlıyorlar. bu işlemler ihtiyaca göre çeşitleniyordur diye tahmin ediyorum.

benim merak ettigim ve bu konuya dahil etmek istedigim sorum ise bu yıgınları hayal edince cok büyük yapılar gibi geliyor. bunu  mühendis arkadaşlar nasıl kurguluyorlar ? - tabiki pc tabanlıdır -  yada fiziki olarak nasıl silikona işliyorlar. kullandıkları matematiğin seviyesini  teknolojinin boyutunu anlamaya calışıyorum . bir noktadan sonra da teknolojik sır olabilecegini kabullenmem gerekiyor. türkiye de bu calışmalar var mıdır ?

yldzelektronik

Alıntı yapılan: restore - 23 Temmuz 2013, 15:05:03
ben cok uzagım bu konuya belki ama eskiden düşündüğümde komut seti felan duymuştum. intel işlemciler 32 komut setine sahip gibi bir yorumdu.  sanırım donanımı bu 32 temel komuta göre tasarlıyorlar. böyle büyük bir transistör yıgını yaratıyorlar.  sonra gönderilen bilgiler -ram den yada başka bi sıga dan - komut setinin denklemlerine kombinasyonlarına göre  şekillenebilecek derleyici hazırlıyorlar. bu işlemler ihtiyaca göre çeşitleniyordur diye tahmin ediyorum.

benim merak ettigim ve bu konuya dahil etmek istedigim sorum ise bu yıgınları hayal edince cok büyük yapılar gibi geliyor. bunu  mühendis arkadaşlar nasıl kurguluyorlar ? - tabiki pc tabanlıdır -  yada fiziki olarak nasıl silikona işliyorlar. kullandıkları matematiğin seviyesini  teknolojinin boyutunu anlamaya calışıyorum . bir noktadan sonra da teknolojik sır olabilecegini kabullenmem gerekiyor. türkiye de bu calışmalar var mıdır ?

Burada anlamadığım bir nokta var.Pc üzerinde çalışan mevcut programlar işlemcinin komut setine göre derlenmiyor diye biliyorum.Yani run time da derlenen programlar var diye biliyorum.Hani şu .net yada java platformu hikayesi
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.