当前位置: 代码迷 >> 驱动开发 >> 驱动开发过程中报undefined警告,该如何解决
  详细解决方案

驱动开发过程中报undefined警告,该如何解决

热度:75   发布时间:2016-04-28 10:05:54.0
驱动开发过程中报undefined警告
这阵子在弄海思对rt3070的WiFi支持情况,进行到现在差不多最后一步了,整个编译下来已经能生成.ko文件了,但报了两个警告:
WARNING: "RT33xx_Init" [/home/wifi_test/3716m/source/msp/component/wifi/drv/usb_rt3070/sta/os/linux/rt3070sta.ko] undefined!
WARNING: "RT33xxLoadRFNormalModeSetup" [/home/wifi_test/3716m/source/msp/component/wifi/drv/usb_rt3070/sta/os/linux/rt3070sta.ko] undefined!

当我把这个生成的.ko文件下到板子上insmod时,出了两个报错:
rt3070sta: Unknown symbol RT33xxLoadRFNormalModeSetup (err 0)
rt3070sta: Unknown symbol RT33xx_Init (err 0)
insmod: can't insert 'rt3070sta.ko': unknown symbol in module, or unknown parameter

我在对应的.c文件里也查看了,这两个函数已经定义好了,而且函数声明我也给它拷到一起了,网上说要加入EXPORT_SYMBOL(函数名);我也加了,可就是不见效果,这东西拖时间太长了,领导的耐心也是有限的,希望路过的前辈能出手相助!
------解决思路----------------------
我也编译过rt3070的内核模块,并没有出现你遇到的这个错误。我就记录文章在这里《Android 4.2上调试RT3070 WiFi模块》,你参考一下,是不是驱动版本的问题。
------解决思路----------------------
引用:
Quote: 引用:

我也编译过rt3070的内核模块,并没有出现你遇到的这个错误。我就记录文章在这里《Android 4.2上调试RT3070 WiFi模块》,你参考一下,是不是驱动版本的问题。

驱动是海思SDK里面就有的,里面还有其他型号的,什么3370啊,5370啊等等,按理说应该是能跟海思SDK适配的,但在编译过程中,其实是有很多小地方需要修改的,比如包含的头文件路径(这个是改的最多的),函数声明等,我觉得在雷凌官网上下载最新驱动,可能还不如现在手上现成的适配度高。另外,你帖子里的驱动下载链接已经“404”了。


1.关于驱动如果以「DPO_RT5572_LinuxSTA_2.6.1.3_20121022」为关键字在Google搜索,还是能够找到下载地址的。
2.关于适配度的问题,这个本来就是mtk厂家提供的模块,没有什么需要适配的就可以编译出来,我适配它是因为要在Android上使用。
3.关于模块出现undefined的问题,一般的方向是编译的时候头文件是有,但是相关的C文件没有编译或者没有链接到最后的模块中。
比如我在我的这个源码中查得:./chips/rt33xx.c:194:VOID RT33xx_Init
那么就有可能是rt33xx.c这个文件没有编译或者没有链接进去。这和一般的C程序一样的道理。先找一下查看ELF文件或者ko文件的工具比如readelf还有其它暂时想不起来了,编译好后看ko文件中是否真正存在这个符号。不存在就要考虑上述说的问题了。
  相关解决方案