驱动调试的一个问题
我将一个usb wifi驱动移植到不同的两个平台上,一个平台上能正常工作,但另一个不能,通过print发现:
在不能正常工作的平台上,程序进入了一个循环:
while(dot11Obj.bChScanning)
{
dot11Obj.DelayUs(1000*1000);
if(ScanWaitCnt++ > 10)
{
printk("Change Mode wait too long\n");
break;
}
}
而在那个能正常工作的平台上,程序没有进入这个循环。
我用source insight没有在源码中查找到“bChScanning=1”这样的句子,请问:程序是怎么进入这个循环的??或者源码中有其它句子或方式给bChScanning赋值??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
要使bChScanning非0,可以有多种方式。除了直接赋值外,还能通过sysfs或者proc作为内核的参数传入。更隐晦的方法可能是变量所在的结构可能和驱动的某些寄存器关联,由设备控制器来改变这些值。
谢谢!
我估计不太可能是内核的参数传入,感觉上也不可能与设备的寄存器关联。
xiegang112 兄,能否告诉我你的邮箱,我把驱动发给你,帮我看看???谢了!!
你检查一下,进入这个循环的条件和退出这个循环的条件,不同的系统可能硬件参数不一样了,会出现这样的不兼容的问题。
除了二楼所说的那些情况, 也可能是非法的赋值。比如说指针的错误使用,堆栈有问题,导致错误修改了某些区域的值。