Gömülü Linux Sistemler - 1 : Linux Dosya Sistemi (RootFs)

Linux sistemlerin yapısını iyi anlamak gerektiğini düşünüyorum. Çünkü özellikle bizim gibi Linux'un gömülü sistemlerdeki uygulamalarında çalışma yapan insanlar için çalışma yapılan platformun (burada işletim sisteminden bahsediyoruz)  doğasını ince ayrıntılarına kadar bilmek tasarım süreçlerinde hız ve esneklik kazandıracaktır. O yüzden gelin Linux Sistemlerin hangi yapılardan, altyapılardan ooluştuğunu dikkatlice inceleyelim. 

Ben burada işe Linux dizin hiyerarşisinden başlamak istiyorum. Linux sistemlerle az buçuk uğraşmış herkesin bildiği klasör yapısını şöyle bir görselle özetleyelim ve sonrasında bunların ne işe yaradıklarını ve hangi verileri sakladıklarını detaylıca inceleyelim.

Şekil-1. Rootfs altyapısı

Yukarıdaki görselde görünen dizinler bir Linux işletim sisteminin Root FS diye adlandırılan Kök Dosya Sistemi'ni oluyşturan hiyerarşinin görüntüsüdür. Burada root olarak belirtilen kısım en tepedeki "/-slash" sembolü ile gösterilen kısımdır. Root altındaki dosya sisteminden bahsetmek gerekirse:

/bin : çalışmaya hazır (executable) programları içeren dizindir. bu programlardan bazıları "ls" , "cp" gibi komut satırından çalıştırılan programlardır. Bu dizin altındaki nerdeyse tüm programlar (veya komutlar) C derleyiciler tarafından oluşturulmuş .bin uzantılıdır. Modern sistemlerde bunlar shell script halinde de olabiliyor. 


/dev : aslında orjinal haliyle device driver şeklinde isimlendirildiğinde daha çok anlam ifade eden cihaz sürücülerinin yer aldığı dizindir. Bu kısım hakkında daha detaylı bahsedeceğiz ama kısaca bluetooth, i2c , USB gibi donanımsal sürücüleri düşünebiliriz.


/etc : Bu dizin çekirdek sistem konfigürasyonu dizini olarak da adlandırılır ve kullanıcı paroları, boot, cihaz, network    ve diğer setup dosyalarını içerir. /etc dizini içeriğinin çoğu makinenin donanımına özgüdür. Örneğin /etc/X11 dizini grafik kartı ve pencere sistem konfigürasyonlarını içerir. 



/lib : library kavramının kısaltmasıdır anlaşılacağı üzere ve yürütülebilir dosyanın kullanabileceği kodu içeren kütüphane dosyalarını tutar. İki tip kütüphane türü vardır: statik ve paylaşılan. /lib dizini yalnızca paylaşılan kütüphaneleri içerir fakat diğer kütüphane dizinleri, mesela /usr/lib dizini diğer yedek dosyaların yanı sıra başka varyantları da içerir. 


/proc : Bu dizin kullanıcıyla göz atılabilir dizin ve dosya arayüzü aracılığıyla sistem istatistiklerini sağlar . Linux'taki /proc alt dizin yapısı özeldir. Fakat çoğu diğer Unix varyantları türleri benzer özelliktedir.  /proc dizini bazı kernel parametreleri yanı sıra mevcut çalışmakta olan işlemler (processes) hakkında bilgileri içerir 


/sys : Bu dizin  Cihaz (device) ve sistem arayüzü sağlama konusunda /proc diiznine benzerdir. 


/sbin : Yürütülebilir sistemin dizinidir.  /sbin dizini altındaki programlar sistem yönetimi ile ilişkilidir ve normal kullanıcılar (root dışındakiler) komut path'inde /sbin klasörüne sahip değildirler.  Eğer root değilseniz bu klasörle bir işiniz olamaz.


/tmp : Geçici ve daha ufak dosyaların depolandığı dizindir. Herhangi bir kullanıcı bu dizinden okuma veya bu dizine yazma yapabilir fakat hiçbir kullanıcı diğer kullanıcının /tmp altında tuttuğu dosyaya erişim hakkına sahip değildir. Birçok program bu dizini workspace olarak kullanır. Eğer birşey çok kritik ve önemli ise onu /tmp altına koymak mantıklı değildir. Çünkü birçok Linux dağıtımı boot işleminden sonra bu dizinin altını uçurur.  

/usr  : İsmi user kelimesine yakın olsa da hiçbir user (kullanıcı) dosyasını içermez. Bunun yerine geniş bir dizin hiyerarşisine sahiptir ve Linux sisteminin büyük yoğunluğunu içerir. /usr içindeki     birçok dizinin ismi root dizini altındakilerle aynıdır /usr/bin , /usr/lib gibi) ve aynı tip dosyaları saklar. Root dizininin tüm sistemi içermemesinin sebebi tarihsel bir şeydir. Geçmişte root için geçerli olan saklama alanı gereksinimleri düşüktü.


/var : variable dizini olarak bilinir. programların çalışma süresinin kaydedildiği yerdir. sistem loglama, kullanıcı takibi, cach'ler ve diğer yaratan ve yöneten sistem programları buradadır. Mesela /var/log dizinindeki syslog ile sistem açılırken ki log'lar gözlemlenebilir (cat syslog). boot.log ile de boot süresince ekrana basılan log'lar görüntülenebilir.


Kernel Lokasyonu

Linux sistemlerde kernel lokasyonunu ele alırken örnek olarak Ubuntu sistemini inceleyelim. Kernel genel olarak /boot dizini altında bulunur. /boot/vmlinux-xxx şeklinde versiyon numarasıyla birlikte görebiliriz.. Şekil-2 'de kernel'ın nerede olduğu görülmektedir.


Şekil-2. Ubuntu'da Kernel lokasyonu

Aşağıdaki çıktı da Raspberry Pi v3 'ten alınmıştır.



Linux'ta bir bootloader bu kernel dosyasını belleğe yükler ve sistem boot olduğunda set olmasını sağlar. Bootloader bir kere çalışıp da kernel'ı set ettiği an, ana kernel dosyası çalışan sistem ile kullanılmaz. Fakat kernel'ın normal sistem çalışması boyunca talebe bağlı olarak yüklediği veya kapadığı birçok modülü /lib/modules dizini altında bulabiliriz. 


Yorumlar

Bu blogdaki popüler yayınlar

KV260 Kria Starter Kit Series: 3 - Petalinux Install and Boot

KV260 Kria Starter Kit Series: 1 - Power and Boot Up

KV260 Kria Starter Kit Series: 2 - Smartcam Application (Ubuntu)