驱动调试的一个问题

发布于 2022-09-23 15:22:51 字数 970 浏览 12 评论 0

我将一个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 技术交流群。

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

发布评论

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

评论(4

动听の歌 2022-09-30 15:22:51

要使bChScanning非0,可以有多种方式。除了直接赋值外,还能通过sysfs或者proc作为内核的参数传入。更隐晦的方法可能是变量所在的结构可能和驱动的某些寄存器关联,由设备控制器来改变这些值。

你又不是我 2022-09-30 15:22:51

谢谢!

我估计不太可能是内核的参数传入,感觉上也不可能与设备的寄存器关联。

xiegang112 兄,能否告诉我你的邮箱,我把驱动发给你,帮我看看???谢了!!

胡渣熟男 2022-09-30 15:22:51

你检查一下,进入这个循环的条件和退出这个循环的条件,不同的系统可能硬件参数不一样了,会出现这样的不兼容的问题。

杀お生予夺 2022-09-30 15:22:51

除了二楼所说的那些情况, 也可能是非法的赋值。比如说指针的错误使用,堆栈有问题,导致错误修改了某些区域的值。

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