回答:
ioctl
/dev
エントリと密接に関連する傾向があります。あなたの典型的なコードは
fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);
これは完全に標準的なUnixの振る舞いです。カーネルドライバーの内部にアクセス制御を置くことができ(たとえばroot
、いくつかのことしか実行できない、またはよりきめ細かいアクセスのために特定の機能が必要になるなど)、非常に柔軟で強力になります。
もちろん、これはデバイスがブロック/文字の読み取り/書き込みアクティビティを使用する以外にも多くのことを公開できることを意味します。多くのものがを介して行うことができますioctl
呼び出し。ではないので、簡単に使用するシェルスクリプトから、しかしかなり簡単からC
か、perl
またはpython
または類似。
sysfs
エントリは、ドライバと対話するもう1つの方法です。通常、コマンドのタイプごとに異なるエントリがあるため、ドライバーの記述は複雑になる可能性がありますが、ユーザー空間を介して非常に簡単にアクセスできます。単純なシェルスクリプトは多くのものを操作できますが、あまり効率的ではないかもしれません
netlink
は主にネットワークデータ転送に焦点を当てています(私はそう思います!)が、他のものに使用することもできます。大量のデータ転送に最適ioctl
で、場合によっては後継となることを意図しています。
すべてのオプションが優れています。ユースケースにより、ドライバーから公開するインターフェースのタイプをより適切に決定できる場合があります。