ppc-linux平台的奇怪问题
应用程序在一个循环中通过ioctl()给驱动发命令,结果发送第9次时候出现Segmentation fault,百思不得其解,请高人指点一二
char dat[20];
...
for(...)
{
GetData(dat);
if(Valid(dat))
{
ioctl(fd,...,dat);
}
}
...
据说这种错误常是非法指针引起的,但怎么也不能发现问题。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
用打印跟踪过了,发现还没有跑到驱动file_operations.ioctl()中就出错了
听听版主怎么解释,也好学习学习
GetData(dat);
if(Valid(dat))
这两个函数是做什么的?
全是框架,没有代码,让版主怎么说啊
GetDat(dat) -- 读入dat数组大小的数据,会进入内核阻塞读
Valid(dat) -- 检查数据格式是否正确,不会修改数据
ioctl()之前有过memcpy()操作,但是memcpy()的第三个参数限制大小,不会有数组越界的问题
调用ioctl()之前的printk()都可以输出的,第9次调用ioctl()之后就出错而且出错时会自动调用file_operations.release()卸载驱动,最后打印出: Segmentation fault,回到命令行。
你最好把代码实现贴出来,不然根本没办法分析定位啊
问题已经解决了。是因为有个地方把一个函数指针修改到了一个非函数入口地址,导致用这个函数指针调用函数时候出现Segmentation fault,看来这种错误十有八九都是指针相关问题引起的,还以为是ioctl()进入内核里面出错了,内核BUG不是那么容易被碰到的^_^
恭喜解决,希望总结经验供大家分享
经验很简单:多读源码,要有耐心!