在 FreeBSD 中实现 ioctl() 命令

Posted

技术标签:

【中文标题】在 FreeBSD 中实现 ioctl() 命令【英文标题】:implementing ioctl() commands in FreeBSD 【发布时间】:2010-03-22 01:40:33 【问题描述】:

我正在向现有的 FreeBSD 设备驱动程序添加一些代码,并且我正在尝试将 char* 从用户空间传递给驱动程序。我已经使用_IOW 宏实现了一个自定义ioctl() 命令,如下所示:#define TIBLOOMFILTER _IOW(0,253,char*)

我的电话看起来像这样:

int file_desc = open("/dev/ti0", O_RDWR);
ioctl(file_desc, TIBLOOMFILTER, (*filter).getBitArray());
close(file_desc);

当我调用ioctl() 时,我得到:Inappropriate ioctl for device 作为错误消息。任何猜测可能做错了什么?我在设备驱动程序中定义了相同的宏,并将其添加到case 语句中。

【问题讨论】:

请在驱动程序中发布您的 ioctl 处理程序代码。并发布您的司机的注册信息。 【参考方案1】:

您是否注册了您的 ioctl 处理程序

.d_ioctl  = ioctl_handler

在 ?devsw(字符/块设备切换表)中?

【讨论】:

不,但处理程序已经到位,因为它是现有的驱动程序,我只是向已经编写的处理程序添加另一个命令。这不正确吗? 你使用正确的返回码吗?在switch 之前和case 之后添加调试打印 我们已经尝试过了,似乎该命令甚至从未到达驱动程序中的句柄。 @thecoffman,那么请发布您的驱动程序(主要部分,带有 devsw 和 ioctl 处理程序) 是否调用了 ioctl 处理程序(到达)?您可以使用现有驱动程序中的任何其他 ioctl 吗?你对 _IOW(?,?,...) 使用相同的参数吗

以上是关于在 FreeBSD 中实现 ioctl() 命令的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中实现函数超时

linux中ioctl函数集的目的是啥?

在python的自定义类中实现'with object() as f'的使用

在freebsd下如何自动获取网通和电信IP段

尝试在 python 中使用 ioctl 读取驱动器属性时出现溢出错误

尝试以持续时间和频率发出哔声时出现 ioctl 错误