一尘不染

IOCTL Linux设备驱动程序

linux

谁能解释我,

  1. 什么IOCTL
  2. 这有什么用途?
  3. 如何使用?
  4. 为什么我不能定义与之功能相同的新功能IOCTL

阅读 343

收藏
2020-06-02

共1个答案

一尘不染

一个ioctl,表示“输入-
输出控制”是一种特定于设备的系统调用。Linux(300-400)中只有几个系统调用,不足以表示设备可能具有的所有独特功能。因此,驱动程序可以定义一个ioctl,它允许用户空间应用程序向其发送订单。但是,ioctl并不是很灵活,并且会变得有些混乱(数十个“魔术数字”可以正常工作…不管用还是无效),并且在将缓冲区传递到内核时也可能不安全-
错误的处理可能会破坏事情很容易。

另一种方法是在该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块驱动程序。

大量使用的另一种方法是netlink,它是一种IPC(进程间通信)方法,用于通过BSD套接字接口与驱动程序进行通信。例如,这由WiFi驱动程序使用。然后,您可以使用libnllibnl3库从用户空间与其进行通信。

2020-06-02