在 FreeBSD 中实现 ioctl() 命令
我正在向现有的 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()
时,我得到: Inproperioctl for device
作为错误消息。猜猜可能做错了什么?我在设备驱动程序中定义了相同的宏,并将其添加到 case
语句中。
I am adding some code to an existing FreeBSD device driver and I am trying to pass a char*
from user space to the driver. I've implemented a custom ioctl()
command using the _IOW
macro like so: #define TIBLOOMFILTER _IOW(0,253,char*)
My call looks something like this:
int file_desc = open("/dev/ti0", O_RDWR);
ioctl(file_desc, TIBLOOMFILTER, (*filter).getBitArray());
close(file_desc);
When I call ioctl()
I get: Inappropriate ioctl for device
as an error message. Any guess as to what may be doing wrong? I've defined the same macro in my device driver, and added it to the case
statement.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您是否在 ?devsw (字符/块设备切换表)中注册了 ioctl 处理程序
?
Did you register your ioctl handler with
in ?devsw (char/block device switch table)?