在 FreeBSD 中实现 ioctl() 命令

发布于 2024-08-26 05:21:53 字数 494 浏览 10 评论 0原文

我正在向现有的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑红尘 2024-09-02 05:21:53

您是否在 ?devsw (字符/块设备切换表)中注册了 ioctl 处理程序

.d_ioctl  = ioctl_handler

Did you register your ioctl handler with

.d_ioctl  = ioctl_handler

in ?devsw (char/block device switch table)?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文