Linux-ioctl什么时候会调用失败,而且返回-1
在测试程序中打开文件正常,也比较肯定调用ioctl要传进去的参数没有传错,但是返回值为-1,看了下linux源码,也没发现有什么特别的地方,想请教一下通常情况下是什么导致调用失败?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在测试程序中打开文件正常,也比较肯定调用ioctl要传进去的参数没有传错,但是返回值为-1,看了下linux源码,也没发现有什么特别的地方,想请教一下通常情况下是什么导致调用失败?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
测试文件一般调用失败主要有:1、你createfile失败,就是你没有和底层驱动建立连接2、你的驱动open进行的操作使你的访问失败,返回-1。从测试的角度,你只需要注意这两个地方。建议你抓一下debug,通过debug定位问题的位置
首先请检查open、read之类的正确。之后,
你的ioctl要是自己定义的cmd,需要同时在内核态以及用户态建立描述这个cmd的头文件。否则乱传cmd自然不能匹配。
cmd里包含你的ioctl的参数类型(是否有参数,参数是只传递进内核;还是只从内核取;还是既传递进内核又从内核取)以及混淆
具体cmd的定义你可以很容易到内核源码里找到例子,grep -rni "ioctl" ./drivers
跟着学就好了
驱动层的ioctl代码是你自己写的么?建议你在驱动层的ioctl函数中多添加一些 printk 看看,看看到底执行到那一步失败的。