Deniz Özkan | Gömülü Sistemler İçin Linux Geliştirme
15355
post-template-default,single,single-post,postid-15355,single-format-standard,ajax_fade,page_not_loaded,,footer_responsive_adv,qode-theme-ver-14.2,qode-theme-bridge,disabled_footer_top,wpb-js-composer js-comp-ver-5.4.7,vc_responsive

Gömülü Sistemler İçin Linux Geliştirme

Gömülü Sistemler İçin Linux Geliştirme

Gömülü sistemler, özel amaçlar için kullanılmak üzere tasarlanmış, sadece beklenilen görevleri yerine getirmeye programlanmış aygıtlardır. Buradaki amaç belirli bir görevi mümkün olduğu kadar iyi bir şekilde yerine getirmektir.Özellikle donanım teknolojisindeki hızlı gelişmelerle birlikte akıllı cihazlarla sıklıkla karşılaşır olduk. Gömülü aygıtlar (Embedded Devices) olarak adlandırılan bu sistemler yaptıkları i¸sin kapsamına göre özelleştirilmiş işletim sistemleri kullanırlar. Gömülü sistemlerde kullanılmak üzere geliştirilmiş pek çok ticari ve ticari olmayan işletim sistemi bulunmakla birlikte, bu yazıda sadece Linux işletim sisteminin bu anlamda kullanılabilmesinden bahsedilecektir.

Linux işletim sistemi Linus Torvalds tarafından 1991 yılında ilk duyurulduğunda ancak bir işletim sisteminden beklenen en temel özellikleri yerine getirebiliyor ve sadece Intel–x86 mimarisinde çalışabiliyordu. 2003 yılına gelindiğinde ise Linux çok sayıda mimariye taşınmış ve kaynak kodunun büyüklüğü devasa boyutlara ulaşmıştır. Modüler ve güçlü yapısı, özelleştirilmeye uygunluğu ve kaynak kodunun açık olması gibi özellikleriyle Linux, gömülü işletim sistemleri pazarında da giderek artan bir yoğunlukla kullanılmaya başlanmıştır. Yapılan tahminler ve piyasa araştırmaları sonuçları çok yakın gelecekte gömülü işletim sistemleri pazarına hitap eden ürünlerin büyük oranda Linux tabanlı olacağı yönündedir.

 

Bu belgede gömülü sistemler için Linux dağıtımı geliştiriminden bahsederken aslında kullandığımız donanım bir Tek Kartta Bilgisayar olacaktır. SBC, temel olarak bir masaüstü bilgisayarından çok farklı olmamakla birlikte, üzerinde kullanılan bazı bileşenlerde farklılıklar gösterir. Bu farklılık işlemciden başlar. SBC’ler üzerindeki işlemcilerin çoğunluğu Intel x86 uyumlu olsa da standart bir Intel işlemci değildir. Farklı firmalarca, Intel uyumluluğu göz önünde bulundurularak daha az güç tüketecek, daha az yer kaplayacak ve elbette daha düşük maliyetlerle üretilebilecek şekilde tasarlanmışlardır. Sistemin diğer bileşenleri için de aynı durum söz konusudur. Bellek, ekran kartı, ağ kartı, ses kartı gibi bileşenler genelde tümleşik olarak (on–board) gelmektedir. Depolama amacıyla Flash Disk teknolojileri kullanılır: Disk On Module, Disk On Chip veya Compact Flash.

 

Bir Tek Kartta Bilgisayar üzerine Linux iiletim sisteminin kurulması temelde bir Linux dağıtımı geliştiriminden farksızdır. Yani Red Hat, Debian vb. gibi Linux dağıtımlarının geliştirimi aşamasında yapılanlara benzer işlemlerin yapılması gereklidir. Fakat gömülü bir sistem geliştirirken çok kapsamlı bir kurulum programı hazırlamak gereksizdir, hemen her durumda ana sistem bir defa kurulur ve sonra bire bir kopyalama ve güncellemeler yoluyla yeni sistemler oluşturulur. Bütün mesele sistemi ilk başta kurabilmek ve sisteme hakim olabilmektir. Linux üzerinde verimli çalışabilmek için sistemin işleyişi hakkında bilgi sahibi olunması gerekir. Sorunların büyük çoğunluğu sistem bileşenlerin seçimi ve kullanımından kaynaklanır. Sistem belirli bir kararlılığa ulaştıktan sonra sürekli sisteme müdahale gerekmeyecektir, ancak o aşamaya gelene kadar mutlaka ciddi çaba sarfedilmelidir. Sistemin geliştirimine başlamadan önce kullanılan donanımın karakteristik özelliklerinin belirlenmesi ve buna göre sistemin tasarlanması gerekir. Küçük disk ve bellek hacmi bunların başında gelir. Ancak sistemin temel olarak yapacağı işlemlerin özellikleri ve sık kullanılan donanım bileşenlerinin kısıtlamaları birlikte düşünüldüğünde ek tasarım prensipleri de ortaya çıkacaktır.

 

Kurulum çalışmasına başlayabilmemiz için ihtiyaç duyduğumuz bileşenler aşağıdaki gibidir:

• Elbette bir Tek Kartta Bilgisayar:)

• Linux ve geliştirme uygulamalarının kurulu olduğu bir kişisel bilgisayar

• SBC’den Linux’u açabilmek amacıyla bir disket veya CD–ROM sürücü

• Şart olmamakla birlikte seri port üzerinden dosya aktarımı yapılacaksa bir “seri iletişim kablosu”

 

Bundan sonra “Sistem”den kastımız, geliştirmekte olduğumuz, SBC üzerinde çalışacak olan sistemdir. Gerekli donanım hazır durumdaysa, SBC’yi VGA çıkışına bir monitor bağlayarak geliştirmeye başlayabiliriz. İlk olarak yapmamız gereken SBC üzerindeki diski bölümlendirmek olacaktır. Bunun için çalışan bir Linux sistemine ihtiyaç oldğundan dolayı sistemi herhangi bir dağıtımın kurulum için kullandığı açılış disketleriyle veya varsa kurulum CD’si ile açmalıyız. Ardından bellekte oluşan geçici Linux sisteminde yer alan uygulamalar ile diskimizi bölümlendirebilir ve biçimlendirebiliriz.

 

Disketten Açılış

Eğer SBC sisteminize bir CD–ROM sürücü bağlı ise bu adımı atlayabilirsiniz. Ancak düşük kapasiteli SBC’ler genelde CD–ROM desteği ile gelmezler ya da CD–ROM bağlayabilmek için gerekli olanağı size sunmazlar. Bu durumda yapmanız gereken Linux açılış disketleri oluşturarak sisteminizi açmak olacaktır.

Örnek olarak Debian GNU/Linux dağıtımının kurulum için kullandığı açılış disketlerinin bir kopyasını aşağıdaki adreslerden bilgisayarınıza indirip diskete yazabilirsiniz.

• http://ftp.debian.org/debian/dists/woody/main/disks-“i386/3.0. 23-“2002-“05-“21/images-“1.44/rescue.bin

• http://ftp.debian.org/debian/dists/woody/main/disks-“i386/3.0. 23-“2002-“05-“21/images-“1.44/root.bin

Dosyaları bilgisayarınıza indirdikten sonra bilgisayarınıza boş bir disket takıp aşağıdaki komutla indirmiş olduğunuz disket görüntüsünü diskete doğrudan yazabilirsiniz:

dd if=rescue.bin of=/dev/fd0

dd if=root.bin of=/dev/fd0

Disketler hazırlandıktan sonra SBC rescue ve root disketleri sırasıyla takılıp sistem açılmalıdır. Açılış işlemi sonrasında, yukarıdaki adreste yer alan disketleri kullandı iseniz Debian GNU/Linux kurulum programı açılacaktır. Bu esnada Alt – F2 tuşlarına basarak 2. konsol ekranına geçebilirsiniz. Burada temel Linux uygulamalarını kullanabilirsiniz

Disk üzerinde kullanılacak dosya sisteminin seçimi de oldukça önemlidir. Çoğu gömülü sistem için ext2 kadar karma¸sık bir dosya sistemine ihtiyaç duyulmayacaktır. İhtiyaç olmadığı halde ext2 dosya sistemi kullanıldığı takdirde gereksiz yere dosya sistemi tarafından bir yük oluşturulacaktır.İleride dosya sistemleri konusuna ayrıntılı olarak değineceğiz. Biz geliştireceğimiz gömülü sistem için minix dosya sistemini kullanalım. Minix dosya sisteminde bir disk bölümü maksimum 64 MB, dosya adları maksimum 31 karakter olabilir. Kullanılacak dosya sistemi seçilmeden önce bu gibi özelliklerinin araştırılıp, geliştirilecek olan sistemin yapısını etkileyip etkilemeyeceği önceden belirlenmelidir. Son olarak SBC sistemimizi disketler ile açmış ve Alt – F2 tuşları ile 2. sanal konsola geçiş yapmıştık. Diskimizin Linux çekirdeği tarafından nasıl tanındığını öğrenelim:

# dmesg | grep –i disk RAM disk driver initialized:  16 RAM disks of 16384K size

hda: 64MB ATA Flash Disk, ATA DISK drive …

Diskimizin /dev/hda olarak Linux tarafından tanındığını gördük. ¸Simdi fdisk programı ile diski bölümlendirelim.

#

fdisk /dev/hda

Command (m for help): n

Command action e extended p primary partition (1–4)

p

Partition number (1–4): 1

First cylinder (1–489, default 1): 1

Last cylinder or +size or +sizeM or +sizeK (1–489, default 489): 489

Command (m for help): a

Partition number (1–4): 1

Command (m for help): w

The partition table has been altered! Calling ioctl() to re–read partition table.

Syncing disks.

#

 

Yukarıda örnekte görüldüğü gibi disk üzerinde 64 MB’lık bir Linux disk bölümü yarattık. Debian açılış disketlerinde (ve büyük olasılıkla diğer dağıtımların kullandığı disketlerde de) minix dosya sistemi yaratmak için gereken mkfs.minix programı bulunmamaktadır. Dolayısıyla bu programı çalışan bir Linux sisteminden disket ile SBC üzerine taşımalıyız. Bunun için bir Linux bilgisayardan gerekli dosya diskete kopyalanır. Ardından disket SBC’ye bağlı disket sürücüye takılır (Açılış tamamlandıktan sonra, açılış için kullanılan disketlerin sürücüde kalmasına gerek yoktur). Disketi SBC’ye taktıktan sonra,

# mount /dev/fd0 /floppy

# ls /floppy mkfs˜1

#

 

Dosyayı taşımak için kullandığım disket üzerindeki dosya sistemi vfat idi. Ancak SBC’nin açılışında kullandığım sistemde vfat desteği yok, bu nedenle disket msdos dosya sistemi ile bağlandı. ls komutunun çıktısında görülen mkfs˜1.min bundan kaynaklanmaktadır. ¸Simdi dosyayı disketten /tmp dizini altına olması gerektiği ad ile kopyalayıp disketi çıkartalım:

# cp /floppy/mkfs˜1.min /tmp/mkfs.minix

# umount /floppy

#

Şimdi artık mkfs.minix ile hazırlamış olduğumuz disk bölümü üzerinde minix dosya sistemi oluşturabiliriz:

# /tmp/mkfs.minix /dev/hda1 20864 inodes

62576 blocks

Firstdatazone=665 (665)

Zonesize=1024

Maxsize=268966912

#

Simdi dosya sistemi de oluştuğuna göre diski bağlayabiliriz. Bunun için /hedef ismiyle bir dizin açıp disk bölümünü bu dizine bağladıktan sonra, geliştirmelerimizi burada yapalım.

# mkdir /hedef

# mount /dev/hda1 /hedef

# mount

/dev/ram0 on / type ext2 (rw)

/proc on /proc type proc (rw)

/dev/hda1 on /hedef type minix (rw)

#

Artık diskimiz üzerindeki bölüm ve dosya sistemi /hedef dizini altında kullanımımız için hazır bulunuyor.

Temel Ayarlamalar

Her Linux sisteminde mutlaka bulunması gereken bazı dizinler vardır (/etc, /sbin vb.) ve bu dizin yapılarının oluşturulması gereklidir. Aynı şekilde bazı dizinlerin erişim hakları diğerlerinden farklılık gösterebilir (/tmp gibi), bazı dizinlerin başka yerlere sembolik olarak bağlanması gerekebilir. Sistemin çalışabilmesi için /etc dizini altında birtakım ayarlamaların yapılması gereklidir.

Dizinlerin Oluşturulması

Aşağıdaki komutla temel dizinleri oluşturabiliriz. Unutulan bir dizin olursa herhangi bir anda oluşturulabilir.

# cd /hedef

# mkdir –p bin boot etc floppy home root lib proc sbin tmp usr var

usr/bin usr/lib usr/sbin var/lib var/lock var/log var/run var/tmp

#

 

Dizinlere Erişimlerin Düzenlenmesi

Linux sistemlerde /tmp dizini geçici işler için sistemdeki tüm kullanıcılar tarafından kullanabilir. Geliştirmekte olduğunuz sisteme sadece bir kişi giriş yapacak olacak olsa dahi bu ayarlamalar yapılmalıdır. Çünkü sisteminizdeki bazı servisler kendilerine özel kullanıcı haklarıyla çalışacak ve /tmp dizini altına yazılabilir olduğunu varsayacaklardır. Bu nedenle /tmp dizini mutlaka kullanıcılar tarafından yazılabilir bir alan olmalı ve yapışkan biti ile verilmelidir.

# chmod –R 1777 tmp

# ls –lad tmp

drwxrwxrwt                       2 root   root                                   64 May 25 19:53 tmp

#

Geliştirdiğimiz sistem için çok gerekli olmamakla birlikte /root dizinine sadece root kullanıcısının girebilmesi için erişim hakkını düzenleyelim:

# chmod 700 root

#

/dev Dizini Altındaki Aygıtların Oluşturulması

Linux sistemlerde aygıtlara erişmek için kullanılan özel dosyalar /dev dizini altında bulunur. Gömülü bir sistemde kullanılabilecek olan aygıtlar bellidir ve çok ender olarak değişir. Çok geçerli bir neden olmadıkça gömülü sistemlerde SCSI aygıtlar kullanmazsınız veya sisteminize yüzlerce kişi sisteme giriş yapmaz.Bu nedenle normal bir Linux sistemindeki /dev dizini altında yer alan aygıt dosyalarının çoğu bizim için geçerli değildir. Burada önerebileceğim yol, Linux’a hakimseniz, sadece kullanacak olduğunuz aygıtlarla ilgili dosyaları mknod ile ana ve alt düğüm numaraları, karakter veya blok veri transferi özelliklerine göre oluşturmanızdır. Ancak bu yol epey zahmetli olacağından hazır bir /dev dizininden yararlanmak da mantıklı olabilir. Sistemimizi açtığımız disketler de bellekte küçük bir Linux sistemi oluşturduğundan buradaki /dev dizinini aynen kopyalayabiliriz:

# cp –a /dev .

#

Varolan bir sistemdeki /dev dizini kopyalandıktan sonra gereksiz gördüğünüz aygıt dosyalarını sonradan da silebilirsiniz.

Gerekli Kütüphanelerin Taşınması

Geliştirdiğimiz Linux sistemimizde kullanacak olduğumuz uygulamalara göre gerekli kütüphanelerin sisteme kurulması gereklidir. Bunun için çalışan bir Linux sistemden ilgili dosyalar, uygun yerlere kopyalanmalıdır. Dosyaları taşıyabilmek için bu aşamada tek çözüm disket kullanmak olacaktır. Aşağıdaki temel paylaşımlı kütüphaneler hemen her sistem için gerekli olduğundan, bunları çalışan Linux sisteminizin /lib dizininden bir disket üzerine kopyalamalısınız:

• libc.so.6

• ld–linux.so.2

• libdl.so.2

• libnsl.so.1

• libm.so.6

• libcrypt.so.1

Daha sonra disketi SBC üzerine takıp mount /dev/fd0 /floppy komutu ile sisteme bağlayın. Disketin üzerindeki dosya sistemi FAT ise dosyalarda 8.3 karakter problemi yaşayabilirsiniz. Bu durumda dosyaları yeniden adlandırmakla uğraşmak istemiyorsanız mkfs.minix /dev/fd0 veya mkfs.ext2 /dev/fd0 komutuyla çalışan Linux sisteminizde disketi biçimlendirip dosya taşıma işlemini yeniden yapınız. Tüm bu adımları geçtiğinizi varsayarsak disket SBC’ye takılı ve bağlı durumda iken

# cp /floppy/* /hedef/lib

komutuyla dosyaları olması gereken yere kopyalayın. Normalde kütüphane dosyaları doğrudan çalıştırılmadığı için erişim kipinin sadece okumaya izin vermesi yeterlidir. Ancak libc.so.6 ve ve ld–linux.so.2 kütüphanelerine çalıştırılabilir dosya erişimi de vermeniz gereklidir:

# chmod 755 /hedef/lib/libc.so.6

# chmod 755 /hedef/lib/ld–linux.so.2

Artık sistemimiz için gerekli olan temel yazılımlar hazır. Bu yazımı burada sona erdiriyorum. Bir sonraki yazımda sistem için gerekli olan uygulamaların kurulumu hakkında bilgi verilecektir.

Henüz yorum yok

Yorum yapmak ister misiniz?