デバイスファイル、ioctl、sysfs、およびnetlinkの使用法の違い

デバイスファイル、ioctl、sysfs、およびnetlinkの使用法の違い

私はLinuxでデバイスと対話する最も有用な(機能的な面で)方法が何であるかを明確にしようとしています。私が知る限り、デバイスファイルは機能の一部(ブロックデバイスのアドレスブロック、文字デバイスのストリームなど)だけを公開します。 ioctl(2)最も一般的に使用されているようですが、一部の人は安全ではないと言います。

良い記事やその他の関連アドバイスを歓迎します。

答え1

ioctl/dev一般的なコードでは、アイテムと同時に発生する傾向があります。

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

これは完全に標準的なUnixの動作です。カーネルドライバの内部には、アクセス制御(root特定の操作のみを実行したり、より細かいアクセスのために特定の機能が必要)を配置することができ、非常に柔軟で強力です。

もちろん、これは、デバイスがブロック/文字の読み取りおよび書き込みアクティビティを使用するよりも多くを公開できることを意味しますioctl。シェルスクリプトでは使用するのは簡単ではありませんが、同様のスクリプトではC非常にperl使いやすいですpython

sysfsアイテムは、ドライバーと対話する別の方法です。一般に、各コマンドタイプには異なるエントリがあるため、ドライバの作成は複雑になる可能性がありますが、単純なシェルスクリプトで多くのことを実行できますが、効率的ではありません。

netlink主にネットワークデータ転送に焦点を当てていますが、他の目的にも使用できます。これは大規模なデータ転送に非常に適しており、ioctl場合によっては後続の製品として使用することができます。

すべてのオプションは大丈夫です。ユースケースによって、ドライバが公開するインターフェイスの種類がより決定されます。

関連情報