USB Linux API:从用户空间应用调用 ioctl 请求

Posted

技术标签:

【中文标题】USB Linux API:从用户空间应用调用 ioctl 请求【英文标题】:USB Linux API: call ioctl requests from user space app 【发布时间】:2019-07-09 10:34:53 【问题描述】:

我想创建负责获取/设置一些 USB 设置的 Linux 应用程序,尤其是负责以下设置的设置:

USB 端口

USB 主机控制器和 USB 驱动程序

USB 设备

我跟着linux api文档:https://www.kernel.org/doc/html/v4.14/driver-api/usb/usb.html发现可以通过ioctl完成 我找到了一个 ioctl 请求列表,例如 USBDEVFS_GETDRIVER。

我发现如果我想要第一个小测试,可以这样:

struct usbdevfs_getdriver usbdriver;
int fd = open("device_file_name", O_RDWR);
ioctl(fd, USBDEVFS_GETDRIVER, (struct usbdevfs_getdriver*) &usbdriver);

这是正确的方法吗?我的代码第二行中的 device_file_name 应该是什么?

【问题讨论】:

【参考方案1】:

字符串device_file_name 应替换为USB 设备节点文件的路径。您提到的文档解释说,此类文件的路径类似于/dev/bus/usb/BBB/DDD

您应该检查openioctl 返回的值以查看操作是否成功。

【讨论】:

【参考方案2】:

device_file_name:应该是挂载usb的文件。通常它位于/mnt/ 下。 您可以使用命令 dmesg。

【讨论】:

以上是关于USB Linux API:从用户空间应用调用 ioctl 请求的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统调用及用户编程接口(API)

Socket与系统调用深度分析

系统调用

USB开发——内核USB驱动+libusb开发方法

Linux系统I/O模型及select、poll、epoll原理和应用

linux申请用户空间内存原则?