Answers:
ioctl
倾向于与/dev
条目并驾齐驱;您的典型代码会做
fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);
这是完全标准的Unix行为。在内核驱动程序内部,您可以放置访问控制(例如,只能root
做一些事情,或者需要特定的功能才能进行更细粒度的访问),这使其变得非常灵活和强大。
当然,这意味着与使用块/字符读写活动相比,设备可以暴露更多的东西。许多事情可以通过ioctl
电话来完成。从shell脚本使用起来不是那么容易,但是从C
or perl
或python
or或类似的东西就很容易使用。
sysfs
条目是与驱动程序进行交互的另一种方式。通常,每种类型的命令都有不同的条目,因此编写驱动程序可能会很复杂,但是通过用户空间进行访问非常容易。简单的shell脚本可以操纵很多东西,但可能不是很有效
netlink
(我认为!)主要集中在网络数据传输上,但也可以用于其他方面。这对于大量数据传输确实非常有用,并且ioctl
在某些情况下可以替代它。
所有选项都不错;您的用例可能会更好地确定从驱动程序公开的接口类型。