Devtmpfs Dosya Sistemi
Çalışan bir Linux dosya sisteminin en temel bileşenlerinden biri /dev
dizini altında yer alan aygıt dosyalarıdır. Dosya sisteminde normal bir dosya gibi görünen bu dosyalar, diğerlerinden farklı olarak bir adet MAJOR bir adet de MINOR numarası içerirler. Linux çekirdeği tarafından dosyaların isimlerinin bir anlamı yoktur, önemli olan ilişkili oldukları major:minor numaralarıdır.
Örnek olarak /dev/ttyS0
özel dosyasının major numarası 4, minor numarası 64'tür. Aynı major:minor numaralarına sahip /dev/seriport
isminde bir aygıt dosyası üretilirse, hangi dosya üzerinden erişim yaparsak yapalım, gerçekte hep aynı aygıt üzerinde çalışmış oluruz (örneğimizde birinci seri port).
Sistemde çalışan uygulamalar /dev
dizini altındaki fiziksel ve soyut aygıt dosyalarına ihtiyaç duyarlar. Kendisine yazılan tüm içeriği yok eden /dev/null
, istendiği kadar rastgele veri üreten /dev/random
, istendiği kadar NULL veri üreten /dev/zero
vb. gibi dosyaların da kendilerine özgü bir major ve minor numaraları bulunmaktadır.
Özetle major:minor ikilisi, ilgili aygıt dosyasının çekirdek içerisindeki hangi katmanla ilişkili olduğunu ve hangi driver/fonksiyonların kullanılacağını da belirtmiş olur.
Linux sistemlerinde /dev
dizini altındaki aygıt dosyalarının oluşturulması için 3 temel yöntem bulunur:
mknod
uygulamasıyla statik olarak önceden gerekli tüm aygıt dosyaları hazırlanabilir. Zahmetli bir süreçtir.udev
servisi üzerinden çekirdek tarafından gönderilen mesajlar dinlenir ve yeni bir aygıt ilklendirildiğinde veya ortadan kalktığında üretilmesi/silinmesi gereken aygıt dosyalarıudev
tarafından düzenlenir.devtmpfs
sistemiyle Linux çekirdeği tarafından,tmpfs
dosya sisteminde mount edilmiş bir alan üzerinde otomatik olarak üretilebilir. Gömülü sistemler için oldukça uygundur, Linux dağıtımlarında da kullanılmaya başlandığı görülmektedir.
devtmpfs
özelliği, Linux çekirdeğinin 2.6.32 versiyonuyla birlikte sunulmaya başlanmıştır. Bu özelliği destekleyen bir çekirdeğe sahipseniz diğer opsiyonlara bakmanıza hiç gerek yoktur. Bu yöntemin hem kullanımı kolay (neredeyse hiç bir işlem yapmak zorunda kalmıyoruz) hem de çalışma zamanında özellikle açılış sürecinde getirdiği ek yavaşlık sıfıra yakındır (udev modelinde ilk açılışta sysfs üzerinden parse işlemi yapıp tüm aygıtları bulması ve gerekli aygıt dosyalarını oluşturması 5-20 saniye arası alabilmektedir).
Bazı gömülü sistemlerle birlikte gelen öntanımlı çekirdek konfigürasyon dosyalarında, çoğu zaman üretici devtmpfs
desteğinden habersiz olduğundan veya bir şekilde eski konfigürasyon dosyaları yeni özellikler dikkate alınmadan dağıtılmaya devam ettiğinden, devtmpfs
desteğinin kapalı olarak geldiği görülmektedir. Bu gibi senaryolarda, konfigürasyon dosyasında CONFIG_DEVTMPFS
ve CONFIG_DEVTMPFS_MOUNT
seçeneklerini aktif hale getiriniz.
CONFIG_DEVTMPFS
desteği, çekirdeğin devtmpfs
özelliğiyle üretilmesini sağlar. Ancak sadece bu seçenek aktif ise, açılış sırasında devtmpfs
özel dosya sistemini aşağıdaki gibi bir komutla sizin mount etmeniz gerekir:
mount -t devtmpfs none /dev
Ancak bu mount işleminden sonra sistemi kullanabilir olursunuz.
CONFIG_DEVTMPFS_MOUNT
seçeneğini de aktifleştirdiğinizde, çekirdek kök dosya sistemini mount ettiğinde, otomatik olarak devtmpfs
dosya sistemini de /dev
dizini altına mount eder. Bu senaryoda açılış sürecinden bizim yukarıdaki gibi mount komutuyla ek bir işlem yapmamıza gerek kalmaz. Önerilen yöntem her iki seçeneğin de aktif edilmesidir.
Bu iki özellik sayesinde, /dev
dizini altında sadece o an sistemde mevcut olan aygıtlara ilişkin dosyaların barındırılması garantilenmiş olur. İlgili aygıt çıkartıldığında veya çekirdek modülü kaldırıldığında, ilişkili aygıt dosyaları da çekirdek tarafından kaldırılır (örneğin usb seri port çeviricinin çıkartılması durumu).