谁能解释我,
IOCTL
一个ioctl,表示“输入- 输出控制”是一种特定于设备的系统调用。Linux(300-400)中只有几个系统调用,不足以表示设备可能具有的所有独特功能。因此,驱动程序可以定义一个ioctl,它允许用户空间应用程序向其发送订单。但是,ioctl并不是很灵活,并且会变得有些混乱(数十个“魔术数字”可以正常工作…不管用还是无效),并且在将缓冲区传递到内核时也可能不安全- 错误的处理可能会破坏事情很容易。
ioctl
另一种方法是在该sysfs接口下建立文件/sys/并对其进行读写,以从驱动程序中获取信息。如何设置的示例:
sysfs
/sys/
static ssize_t mydrvr_version_show(struct device *dev, struct device_attribute *attr, char *buf) { return sprintf(buf, "%s\n", DRIVER_RELEASE); } static DEVICE_ATTR(version, S_IRUGO, mydrvr_version_show, NULL);
在驱动程序安装过程中:
device_create_file(dev, &dev_attr_version);
这样,你会为您的设备在一个文件中/sys/,例如,/sys/block/myblk/version块驱动程序。
/sys/block/myblk/version
大量使用的另一种方法是netlink,它是一种IPC(进程间通信)方法,用于通过BSD套接字接口与驱动程序进行通信。例如,这由WiFi驱动程序使用。然后,您可以使用libnl或libnl3库从用户空间与其进行通信。
libnl
libnl3