记录一下编译新的mt7603驱动

之前拿到的mt7603驱动和之前ralink的其他驱动如7601等没有什么大的区别,控制接口也都是ioctl,然后根据/etc/Wireless下的配置文件来配置wifi的属性。不过老版本的7603驱动据说有些问题,现在拿到的新的驱动据说已经修复了……而且增加了netlink的接口,可以直接用hostapd来控制ap。

新驱动果然是新驱动,只是编译就遇到很多问题。

1、配置文件依然是Makefile和/os/linux/config.mk,把其中的编译器和内核目录修改为自己的目录;

2、修改好了可以直接编译,然后问题就来了:

 error: implicit declaration of function 'RTMP_DRIVER_ADAPTER_RT28XX_WOW_DISABLE' [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors

看起来是编译器把warning被当成error了,去掉config.mk中的Werror选项,继续编译,还是出现此错误,后面怎么找也找不到驱动的哪个配置里还有配这个Werror选项。想想此驱动编译时应该会依赖内核的Makefile,是否是内核Makefile的问题。找到内核的makefile,果然发现了-Werror-implicit-function-declaration,去掉重新编译,错误变成了警告,驱动编译成功。

3、驱动放到文件系统,然后insmod,结果出现错误如下:

<pre name="code" class="plain">[ 1374.080000] mt7603u_sta: Unknown symbol cfg80211_scan_done (err 0)
[ 1374.080000] mt7603u_sta: Unknown symbol cfg80211_remain_on_channel_expired (err 0)
[ 1374.090000] mt7603u_sta: Unknown symbol regulatory_hint (err 0)
[ 1374.110000] mt7603u_sta: Unknown symbol cfg80211_new_sta (err 0)
[ 1374.110000] mt7603u_sta: Unknown symbol cfg80211_disconnected (err 0)
[ 1374.120000] mt7603u_sta: Unknown symbol cfg80211_ready_on_channel (err 0)
[ 1374.130000] mt7603u_sta: Unknown symbol wiphy_register (err 0)
[ 1374.150000] mt7603u_sta: Unknown symbol wiphy_new (err 0)
………………
<span style="font-family:SimSun;font-size:10px;"></span><pre name="code" class="plain">[ 1374.190000] <span style="font-family: SimSun;">mt7603u_sta: Unknow symbol RTMP_DRIVER_ADAPTER_RT28XX_WOW_DISABLE ( err 0)</span>

 
<pre name="code" class="plain">[ 1374.200000] <span style="font-family:SimSun;">mt7603u_sta: Unknow symbol RTMP_DRIVER_ADAPTER_RT28XX_WOW_ENABLE ( err 0)</span>
 
 

看了下前面的unknow symbol应该是cfg80211的接口没找到?将内核中的cfg80211编译成module,然后insmod,再加载7603的ko,果然前面的错误去掉了。后面的错误看起来和之前Werror遇到的是同一个问题,果然还是不能直接去掉Werror选项。查找了一下出错代码的位置,发现出错代码由ifdef控制:

#ifdef MT_WOW_SUPPORT
	RTMP_DRIVER_ADAPTER_RT28XX_WOW_DISABLE(pAd);
#endif
于是想到这功能能不能先去掉,在config.mk中将HAS_MT_WOW_SUPPORT选项配置为n重新编译,这个错误没了,cfg80211.c又出现错误了,错误是error: 'struct _RTMP_ADAPTER' has no member named 'WOW_Cfg'即pAd中没有WOW_Cfg这个成员:

	NdisCopyMemory(pAd->WOW_Cfg.PTK, data->kck, LEN_PTK_KCK);
	NdisCopyMemory(&pAd->WOW_Cfg.PTK[LEN_PTK_KCK], data->kek, LEN_PTK_KEK);
	NdisCopyMemory(pAd->WOW_Cfg.ReplayCounter, data->replay_ctr, LEN_KEY_DESC_REPLAY);
查看了pAd结构体中的定义,发现WOW_Cfg还是由HAS_MT_WOW_SUPPORT选项来控制的,因为之前被我们配成了n,所以在此刻找不到WOW_Cfg了。于是直接在上述出错的代码上加上ifdef HAS_MT_WOW_SUPPORT的控制继续编译,终于编译成功。放到文件系统,先挂cfg80211.ko再挂mt7603u_sta.ko,没有错误,并且可以找到节点wlan0了。


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值