在 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() 命令的主要内容,如果未能解决你的问题,请参考以下文章
在python的自定义类中实现'with object() as f'的使用