USB wifi 驱动分析-RTL8821cu

2019-07-28  本文已影响0人  Hemsl

“人生若只如初见,何事秋风悲画扇”,这句话用来开头作为最近的状态表述吧!
最近愈发觉得年龄大了,技术上很多事情只如初见,隔天就秋风悲画扇,丢了、再也无法寻回,没了思想灵魂、成不了体系战斗力,剩下孤独的自己。
如此敏感的情怀下、又容不下躁动的心、毕竟技术和哲学的结合是种追求、超越感觉之后的理性是我的追求啊。
言归正传、上属扯淡,人生是被随机的命运主宰的,一切追求只不过是机会来临的准备!这不,让我遇到了一个usb wifi设备故障的bug,关键客户给我搜集了完整的日志。
要知道平时要看懂一个这么复杂设备驱动得花很久时间的,但是根据故障信息回推半个小时就可以有个大概的流程映像,这就是运气。恰好前几天综合研究了一下usb驱动架构,简直是证明实力的机会啊。

错误的关键信息:

RTW: ERROR [HALMAC][ERR]Dump efuse in suspend

所以20分钟后有了以下的结果:

rtl8821cu/os_dep/linux/usb_intf.c 入口
module_init(rtw_drv_entry)
--->usb_register(&usb_drv.usbdrv);
--->rtw_drv_init()
--->rtw_usb_primary_adapter_init()
--->rtw_set_hal_ops()
--->rtl8821cu_set_hal_ops()
--->rtl8821cu_set_hal_ops()
--->rtl8821cu_halmac_init_adapter()
---> rtw_halmac_init_adapter()
---> halmac_init_adapter()
---> mount_api_88xx()
---> mount_api_8821c()
--->mount_api_8821c(根据pcie、usb、sdio等接口区分,初始化wifi设备依赖的接口函数)
--->mac_pwr_switch_usb_8821c(读取寄存器的值:value8 = HALMAC_REG_R8(REG_CR);)
---> dump_efuse_map_88xx(halmac_ret_status: 获取halmac 的状态)
出现RTW: ERROR [HALMAC][ERR]Dump efuse in suspend错误的地方

好吧,有了这个架构流程,至少可以大致描述是因为驱动读取wifi模块的寄存器信息的时候返回的状态是异常的,猜测是硬件故障了导致的。
那么具体的原因可以进一步分析、甚至根据自己的理解找芯片原厂确认。再进一步wlan协议也可以学习了解下。

上一篇下一篇

猜你喜欢

热点阅读