Cihaz dosyaları, ioctl, sysfs, netlink arasındaki kullanım farkı


12

Linux'taki aygıtlarla etkileşimde bulunmanın en kullanışlı (işlevsellik açısından) yöntemini açıklığa kavuşturmaya çalışıyorum. Anladığım kadarıyla, cihaz dosyaları işlevselliğin sadece bir kısmını ortaya çıkarır (blok cihazlardaki adres blokları, karakter cihazlarındaki akışlar, vb.). ioctl(2)en sık kullanılan gibi görünüyor, ancak bazı insanlar güvenli olmadığını söylüyor, vb.

Bazı iyi makaleler veya diğer ilgili işaretçiler memnuniyetle karşılanacaktır.

Yanıtlar:


9

ioctl/devgirişle el ele gitme eğilimi gösterir ; tipik kodunuz

fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);

Bu mükemmel standart Unix davranışıdır. Çekirdek sürücüsünün içine erişim denetimleri koyabilirsiniz (örn. Yalnızca rootbazı şeyler yapabilir veya daha ince taneli erişim için belirli bir yetenek gerektirebilir), bu da onu oldukça esnek ve güçlü hale getirir.

Tabii ki bu, cihazların blok / karakter okuma-yazma etkinliğini kullanmaktan çok daha fazlasını ortaya çıkarabileceği anlamına gelir; birçok şey ioctlçağrılar yoluyla yapılabilir . O kadar kolay gelen oldukça kolay kabuk komut dosyalarından kullanmak, ama Cya perlya pythonya da benzer.

sysfsgirişler sürücülerle etkileşimin başka bir yoludur. Genellikle her komut türünün farklı bir girişi olur, bu nedenle sürücüyü yazmak karmaşık olabilir, ancak kullanıcı alanı üzerinden erişimi çok kolaylaştırır; basit kabuk komut dosyaları birçok şeyi işleyebilir, ancak çok verimli olmayabilir

netlinköncelikle ağ veri aktarımlarına odaklanmıştır (sanırım!), ancak diğer şeyler için kullanılabilir. Daha büyük hacimli veri aktarımı için gerçekten iyi ve ioctlbazı durumlarda halef olması gerekiyor .

Tüm seçenekler iyidir; kullanım durumunuz sürücünüzden hangi arabirim türünün gösterileceğini daha iyi belirleyebilir.


1
Karıştırmak için daha fazla ekleme: "ioctl: Bununla birlikte, ioctl çekirdeğinde kullanımdan kaldırıldı ve ioctl'un yeni akış yukarı kullanımı ile herhangi bir sürücüyü elde etmeyi zor bulacaksınız. ve her ikisini de çekirdek sürümleri ve mimariler arasında adım adım tutmak zor. " [Sayfa 255] Chris Simmonds [2017] tarafından "Gömülü Linux Programlamada Ustalaşma".
Israr

Bu bir soru ekler: O zaman C'den sysfs'ye erişebilir miyiz?
Israr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.