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

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

kralsam

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 ?

Koyulaştırılmış kısmı cevaplıyorum. Evet var. İTÜ ARI-2 de EMDC bu işle ilgileniyor. Nokia N95 telefonun wireless - bluetooth chiplerini onlar tasarlamış. Örneğini mikroskop ile birlikte seminere getirmişlerdi. Bu sadece aklıma gelen ilk örnek. Dahasıda var.

salih18200

4 sene önce lisans bitirme projemde FPGA üzerinde gömülü linux üzerine bir çalışmam olmuştu.

https://320volt.com/altera-de2-70-fpga-%C2%B5clinux-sd-kart-jpeg-uygulama-bilgi/

Bu çalışmada;
1. aşamada FPGA üzerinde VHDL ile donanım tasarlanmıştır (soft cpu+çevre birimleri)
2. aşamada ise tasarlanan sisteme linux kernel derlenmiştir.
3. aşamada ise derlenen kernel üzerinde çalışan küçük bir jpeg slayt programı yazılmıştır.

Belki bir faydası olur..

Farukc

#17
Alıntı yapılan: Tagli - 23 Temmuz 2013, 10:00:17
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.

Çok Teşekkür ederim çok güzel anlatmışsınız. Acaba Türkiyede bu işi yapan kimseler varmı?

mesaj birleştirme:: 23 Temmuz 2013, 18:01:42

Alıntı yapılan: salih18200 - 23 Temmuz 2013, 16:30:52
4 sene önce lisans bitirme projemde FPGA üzerinde gömülü linux üzerine bir çalışmam olmuştu.

https://320volt.com/altera-de2-70-fpga-%C2%B5clinux-sd-kart-jpeg-uygulama-bilgi/

Bu çalışmada;
1. aşamada FPGA üzerinde VHDL ile donanım tasarlanmıştır (soft cpu+çevre birimleri)
2. aşamada ise tasarlanan sisteme linux kernel derlenmiştir.
3. aşamada ise derlenen kernel üzerinde çalışan küçük bir jpeg slayt programı yazılmıştır.

Belki bir faydası olur..

Bayaa faydası olur. Çok güzel bir çalışma olmuş. Teşekkürler...