Gömülü Linux
  • Giriş
  • Linux Çekirdeği
    • Gömülü Sistemlerdeki Kullanımı
    • Geliştirme Süreci ve Versiyonlar
    • Kod Sözdizim Rehberi
    • Konfigürasyon Süreci ve Kbuild Sistemi
    • Derleme ve Çapraz Derleme
    • Initramfs İmajının Eklenmesi
    • U-boot İmajı Haline Getirilmesi
  • Gömülü Sistemlerde Boot Yükleyiciler
    • U-boot
    • RedBoot
    • ARM Mimarisinde Açılış Süreci
  • Linux Açılış Süreci
    • Kernel Açılış Süreci
    • Kullanıcı Kipine Geçiş - Init Süreci
  • Kök Dosya Sistemi Oluşturma
  • Initramfs İle Erken Kullanıcı Kipi
  • Devtmpfs Dosya Sistemi
  • NfsRoot Çalışma Yöntemi
  • Çapraz Derleme ve Gerekli Ekipmanlar
  • NOR, NAND, eMMC ve Flash Tabanlı Depolama
  • Memory Technology Device - MTD Katmanı
  • Unsorted Block Images - UBI Katmanı
  • Gömülü Sistemlerde Kullanılan Dosya Sistemleri
    • JFFS2 Dosya Sistemi
    • YAFFS2 Dosya Sistemi
    • UBIFS Dosya Sistemi
    • Cramfs Dosya Sistemi
    • Squashfs Dosya Sistemi
    • Minix Dosya Sistemi
    • FAT Dosya Sistemi
    • Ext2,3,4 Dosya Sistemi
  • Watchdog Kullanımı
  • CPU Frequency Scaling
  • Buildroot
  • Android Platformu
    • Geliştirme Ortamının Hazırlanması
    • İnşa Süreci
  • Sistem Çağrıları
  • I2C Protokolü
    • I2C Protokolünün Tanıtılması
    • Linux Altında I2C İşlemleri
    • Board Seçimi ve İlk İşlemler
    • Sıcaklık Sensörünün Seçilmesi
    • Sıcaklık Değerinin Yazılımsal Olarak Elde Edilmesi
  • Strace Kullanımı
  • GNU Build Sistemi Araçları
    • Make
    • Autoconf, Automake
  • Orange Pi Zero
    • Orange Pi Zero Teknik Özellikleri
    • Gerekli Araçların Elde Edilmesi
    • U-boot Derleme Süreci
    • Kernel Derleme Süreci
    • Wifi Desteği - Problemli Senaryo Örneği
    • Dosya Sisteminin Hazırlanması
    • SD Kartın Hazırlanması
    • Cihazın Açılması
  • Raspberry Pi
    • Raspberry Pi 2 Teknik Özellikleri
    • Açılış Süreci
    • Gerekli Araçların Elde Edilmesi
    • Kernel Derleme Süreci
    • U-boot Derleme Süreci
    • Dosya Sisteminin Hazırlanması
    • Cihazın Açılması
    • NFS Root Çalışma
    • Sistem Konfigürasyonu
    • Raspberry Pi 3
  • Board Spesifik Kılavuzlar
    • Hawkboard
    • Olimex A20
    • TI DM6446 EVM
    • BeagleBoard
    • BeagleBoneBlack
    • Savage Board
  • EKLER
    • Seri Konsol Kullanımı
    • TFTP Sunucu Kurulumu
    • NFS Sunucu Kurulumu
    • TI işlemcilerinde DSP kullanımı
      • C6Run
      • DSP Testi
    • Ubuntu Sanal Makine Performansı
Powered by GitBook
On this page
  • Dezavantajları
  • Kullanım
  • Dosya Sisteminin Yazılması
  • İmaj Oluşturma
  • Erase Block Summary
  • Loopback Mount

Was this helpful?

  1. Gömülü Sistemlerde Kullanılan Dosya Sistemleri

JFFS2 Dosya Sistemi

Journalling Flash FileSystem'in 2. versiyonudur. David Woodhouse tarafından geliştirilmiş olup 2.4.10 kernel versiyonundan itibaren Linux kaynak kodu ile birlikte dağıtılmaya başlanmıştır.

Blok tabanlı aygıtlar üzerinde değil, raw flash aygıtlar üzerinde çalışır. Journal desteğiyle çalıştığı için, ani güç kesintilerinden sonra dosya sistemini kararlı bir yapıya döndürebilmektedir. Kendisinden önceki ilk versiyona göre aşağıdaki ek özelliklere sahiptir:

  • NAND flash desteğimo

  • Hard link oluşturabilme desteği

  • Dosya sistemini sıkıştırılmış formda kullanma desteği

  • Performansı artıran yeni garbage collection mekanizması

Dezavantajları

Aşağıda sıralanan temel sebeplerden ötürü JFFS2 kullanımı günümüzde oldukça azalmıştır:

  • Tüm node'ların mount işlemi sırasında taranması ihtiyacı gerektiğinden, flash kapasitelerinin GigaByte seviyelerine ulaşması nedeniyle çok uzun mount süreleri gerektirmesi

  • Çok sayıda küçük dosyanın yazılması durumunda sıkıştırma desteğinin negatif bir etki üretmesi

  • Bellekte her node için bir veri yapısı tuttuğundan kullanılan alan arttıkça bellek kullanımının artması ve performansın düşmesi

  • Tamamen senkron çalışan bir dosya sistemi olduğundan yazma işlemleri doğrudan flash ortama yapılır. Çok sayıda dosya üzerinde küçük değişiklikler yapıldıkça sıkıştırma işlemleri de tekrar yapılır, zamanla fragmentation artar, performans düşer.

Yukarıda sayılan nedenler yüzünden yerini büyük oranda UBIFS'e bırakmasına karşılık, dosya sistemi için ayrılmış alanın çok küçük olduğu senaryolarda (örneğin konfigürasyon işlemleri için 1 MB'lık bir bölüm ayırmış olabilirsiniz), UBIFS overhead'i fazla olduğundan birinci alternatif olmaktadır.

Kullanım

Bir MTD bölümü JFFS2 formatında veri içermese dahi, blok tipi aygıt ismi üzerinden jffs2 türünde doğrudan mount edilmeye çalışıldığında işlem başarılı olur, ancak bu yöntem önerilmez.

Bunun yerine öncelikle ilgili MTD bölümünün flash_erase ile silinmesi gereklidir:

flash_erase /dev/mtd8 0 0

Sonra mount işlemi aşağıdaki gibi gerçekleştirilebilir:

mount -t jffs2 /dev/mtdblock8 /mnt

flash_erase ile yapılan silme işleminin MTD'nin istenilen bölümüne ait karakter aygıt dosyası üzerinden, mount işleminin ise gene MTD'nin aynı bölümüne ait blok aygıt dosyası üzerinden gerçekleştirildiğine dikkat ediniz.

Not: jffs2 dosya sistemi raw flash çiplerine özel üretilmiş olmasına rağmen ilgili MTD bölümünü mount uygulamasına mtdblock emülasyonu üzerinden gösteriyor olmamız, tamamen mount uygulamasının blok tabanlı aygıt arayüzleri ile çalışmasından kaynaklanmaktadır. Mount sonrası jffs2 tarafından mdtblock emülasyon katmanı kullanılmaz.

Yukarıdaki örnekte mount işlemi sonrası /mnt dizini altına kopyalama yapmak suretiyle ilgili bölüme yazılabilir.

Dosya Sisteminin Yazılması

Bir MTD bölümünü flash_erase ile silip jffs2 türünde mount ettikten sonra standart yöntemlerle kopyalama yaparak ilerlemek yerine, dosya sistemini başka bir yerde oluşturup, tüm dosya sistemine ait jffs2 imajını hazırlayıp tek seferde kopyalamak da mümkündür.

Bunun için flash_erase ile ilgili MTD bölümü silindikten sonra, nandwrite ile imajın yazılması sağlanır:

flash_erase /dev/mtd8 0 0
nandwrite -p /dev/mtd8 /tmp/jffs.image

Ardından ilgili bölüm mount edildiğinde, imaj içerisinde yer alan verilere ulaşılabilecektir:

mount -t jffs2 /dev/mtdblock8 /mnt

İmaj Oluşturma

Geliştirme yapılan bilgisayardaki bir dizin hiyerarşisini jffs2 imajına çevirmek için, mtd-utils paketinden çıkan mkfs.jffs2 uygulaması kullanılır. Örnek kullanım:

mkfs.jffs2 -p -n -e 128 -d /dizin -o /tmp/jffs.img
  • -p parametresi ile eraseblock'ların sonuna dek padding yapılması sağlanır.

  • -n parametresi cleanmarker'ların konmaması gerektiğini belirtir. Cleanmarker özel bir JFFS2 node'udur ve blok silme işleminin düzgün tamamlandığını tutmak için kullanılır. NAND flash tiplerinde bu bilgi OOB alanında tutulduğundan cleanmarker node'larını istemiyoruz, NOR flash tiplerinde ise bu gereklidir.

  • -e parametresi ile eraseblock büyüklüğünü belirtiyoruz, kullanılan flash tipine göre doğru değerin ne olduğu öğrenilmelidir. Burada 128 KB verilmiştir.

Erase Block Summary

EBS hesaplamasının temel amacı mount süresinin kısaltılmasıdır.

Temel mantık, özet (summary) bilgilerinin her eraseblock sonunda tutulmasından ibarettir.

Bu sayede mount esnasında tüm node'ların taranmasına gerek kalmaz ve sadece özet bilgiler okunur.

mkfs.jffs2 ile oluşturulan imaj dosyasına summary bilgilerini eklemek için mtd-utils paketinden çıkan sumtool uygulaması kullanılır. Örnek:

sumtool -p -n -e 128 -i /tmp/jffs.img -o /tmp/jffs-summed.img

Bu yöntem hem NOR hem de NAND tipi flash'lar ile çalışmaktadır. NAND flash tiplerinde hız artışı daha çok olur.

Loopback Mount

Geliştirme yapılan PC mimarisindeki bilgisayarda muhtemelen raw flash aygıtı bulunmayacağından ötürü, jffs2 imajını bilgisayarımızda mount etmek için, MTD emülasyon modülünü kullanabiliriz. İzlenmesi gereken adımlar sırasıyla:

  • Eraseblock büyüklüğü bulunur ve byte cinsine çevrilir (128 Kb = 131072 byte)

  • losetup ile imaj dosyasından bir loopback device oluşturulur:

      $ sudo losetup /dev/loop0 /tmp/jffs.image
  • mtdblock modülü yüklenir:

      $ sudo modprobe mtdblock
  • block2mtd modülü aşağıdaki şekilde yüklenir:

      $ sudo modprobe block2mtd block2mtd=/dev/loop0,131072
  • Oluşan mtdblock aygıtı mount edilir:

      $ sudo mount -t jffs2 /dev/mtdblock0 /mnt
PreviousGömülü Sistemlerde Kullanılan Dosya SistemleriNextYAFFS2 Dosya Sistemi

Last updated 5 years ago

Was this helpful?