设备文件、ioctl、sysfs、netlink之间的使用区别

设备文件、ioctl、sysfs、netlink之间的使用区别

我试图澄清哪种是与 Linux 中的设备交互最有用(就功能而言)的方法。据我了解,设备文件仅公开部分功能(块设备中的地址块、字符设备中的流等)。 ioctl(2)好像是最常用的,但也有人说不安全等等。

欢迎一些好的文章或其他相关的指示。

答案1

ioctl往往与入场同时进行/dev;你的典型代码会做

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

这是完全标准的 Unix 行为。在内核驱动程序内部,您可以放置​​访问控制(例如,root只能执行某些操作,或者需要特定的功能来进行更细粒度的访问),这使其非常灵活和强大。

当然,这意味着设备可以暴露比使用块/字符读写活动更多的内容;很多事情都可以通过调用来完成ioctl。从 shell 脚本中使用起来不太容易,但是从Corperlpython或类似的脚本中使用起来相当容易。

sysfs条目是与司机互动的另一种方式。通常,每种类型的命令都有不同的条目,因此编写驱动程序可能很复杂,但它使得通过用户空间访问变得非常容易;简单的 shell 脚本可以操作很多东西,但可能效率不高

netlink主要关注(我认为!)网络数据传输,但它也可以用于其他用途。它非常适合大量数据传输,并且ioctl在某些情况下可以作为其继任者。

所有的选择都很好;您的用例可以更好地确定从驱动程序公开哪种类型的接口。

相关内容