Con*_*ine 14 devices sysfs ioctl
我试图阐明哪种是在 Linux 中与设备交互的最有用(就功能而言)方法。据我了解,设备文件只公开了部分功能(块设备中的地址块,字符设备中的流等......)。 ioctl(2)
似乎是最常用的,但有人说它不安全,等等。
一些好的文章或其他相关的指针将受到欢迎。
ioctl
往往与/dev
条目齐头并进;你的典型代码会做
fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);
Run Code Online (Sandbox Code Playgroud)
这是完全标准的 Unix 行为。在内核驱动程序中,您可以放置访问控制(例如,只能root
做一些事情,或者需要特定的能力来进行更细粒度的访问),这使得它非常灵活和强大。
当然,这意味着设备可以公开的不仅仅是使用块/字符读写活动;很多事情都可以通过ioctl
调用来完成。从 shell 脚本中使用起来不是那么容易,但是从C
或perl
或python
或类似的东西中使用起来却很容易。
sysfs
条目是与驱动程序交互的另一种方式。通常,每种类型的命令都有不同的条目,因此编写驱动程序可能很复杂,但通过用户空间访问它非常容易;简单的 shell 脚本可以操作很多东西,但可能效率不高
netlink
主要关注(我认为!)网络数据传输,但它可以用于其他东西。它非常适合大量数据传输,并且ioctl
在某些情况下是继任者。
所有的选择都很好;您的用例可能会更好地确定从您的驱动程序公开哪种类型的接口。