MTK7601网卡移植

环境:4418 kernel3.4.39 MTK7601 usb wifi

1)、进入源码根目录,修改Makefile。

#PLATFORM: Target platform
PLATFORM = s5p4418

在末尾添加

ifeq ($(PLATFORM),s5p4418)
LINUX_SRC = /home/work/linux/linux/kernel/kernel-3.4.39/                            //注:内核源码目录
CROSS_COMPILE = /opt/arm-cortex_a9/bin/arm-cortex_a9-linux-gnueabi-  //注:交叉编译器安装目录
export ARCH=arm
endif

2)、修改源码根目录下的os/linux/config.mk文件
218:#ifdef CONFIG_ELIAN_SUPPORT 
219:HAS_CONFIG_ELIAN_SUPPORT=n    ----- 把y改成n,不支持smartlink功能
220:#endif
注:之所以不支持smartlink功能,是因为这部分源码MTK保密,且该功能是wifi万能钥匙才能用到。如果选择该功能,编译不过。
添加:
ifeq ($(PLATFORM),s5p4418)
EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include
export EXTRA_CFLAGS
endif

3)、make clean
4)、make

编译出现错误:

1、

/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/rt_main_dev.c:345:11: error: ‘struct net_device’ has no member named ‘wireless_handlers’
make[2]: *** [/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/rt_main_dev.o] 错误 1
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2555:2: error: unknown field ‘private’ specified in initializer
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2555:2: warning: initialization from incompatible pointer type [enabled by default]
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2555:2: warning: (near initialization for ‘rt28xx_iw_handler_def.get_wireless_stats’) [enabled by default]
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2556:2: error: unknown field ‘num_private’ specified in initializer
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2556:2: warning: excess elements in struct initializer [enabled by default]
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2556:2: warning: (near initialization for ‘rt28xx_iw_handler_def’) [enabled by default]
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2557:2: error: unknown field ‘private_args’ specified in initializer
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2557:26: warning: excess elements in struct initializer [enabled by default]
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2557:26: warning: (near initialization for ‘rt28xx_iw_handler_def’) [enabled by default]
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2558:2: error: unknown field ‘num_private_args’ specified in initializer
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2558:2: warning: excess elements in struct initializer [enabled by default]
/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.c:2558:2: warning: (near initialization for ‘rt28xx_iw_handler_def’) [enabled by default]
make[2]: *** [/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/../../os/linux/sta_ioctl.o] 错误 1
make[1]: *** [_module_/home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux] 错误 2
make[1]:正在离开目录 `/home/work/linux/linux/kernel/kernel-3.4.39'
make: *** [LINUX] 错误 2
 

解决办法:重新配置编译指定的Linux Kernel,将Device Drivers==>Network deivce support==>Wireless LAN==><*> USB ZD1201 based Wireless device support,编译即可

继续重新编译

make[1]:正在离开目录 `/home/work/linux/linux/kernel/kernel-3.4.39'
/opt/arm-cortex_a9/bin/arm-cortex_a9-linux-gnueabi-strip -g /home/work/NETC.MT7601U.MP1.KK.V1.5/wifi_driver/os/linux/mt7601Usta.ko

编译成功
 

将.ko文件放板子上加载

接下来编译WiFi应用软件 wpa_supplicant (网上很多)

#tar xvfz wpa_supplicant-0.7.3.tar.gz

将wpa_supplicant中的补丁拷贝到openssl中:

cp wpa_supplicant-0.7.2/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8za/

如果是wpa_supplicant-2.4的话,那么补丁文件在patches目录下,文件名为:

openssl-0.9.8za-tls-extensions.patch,注意这里我们下载的openssl的版本一定是为0.9.8za,不然的话会出错的。

 

 #tar zxvf openssl-0.9.8za.tar.gz

二、编译openssl库

make 之前要进行这步cp wpa_supplicant-0.7.2/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8za/

#make 

#make install

在/usr/local/ssl/lib目录下安装了ssl库

拷贝下面文件驱动到目标系统/usr/lib/  这步很重要,不然会提示找不到这个库文件的。

libssl.a

libcrypto.a

 

openssl 移植完成

三、编译wpa_supplicant

进入wpa_supplicant-0.7.3.tar.gz解压生成的wpa_supplicant-0.7.3/wpa_supplicant目录中:

#cp defconfig .config

 #gedit .config

复制:

 #CFLAGS += -I/usr/local/openssl/include

#LIBS += -L/usr/local/openssl/lib

修改成

CFLAGS += -I/usr/local/ssl/include

LIBS += -L/usr/local/ssl/lib

#make

出现错误:

../src/drivers/driver_nl80211.c:25:31: fatal error: netlink/genl/genl.h: No such file or directory

compilation terminated.

make: *** [../src/drivers/driver_nl80211.o] Error 1

 

这时需要使用命令:apt-get install libnl-dev

          apt-get install libpopt-dev

来安装需要的支持库头文件,之后再次执行make命令。

将编译好的wpa_supplicant wpa_cli 放在板子上;

wpa_supplicant是核心程序,它和wpa_cli的关系 就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。

 

打开网卡

网上有ifconfig ra0 up 或则ifconfig wlan0 up

是ra0还是wlan0取决于

include/rtmp_def.h文件
#define INF_MAIN_DEV_NAME “ra”
#define INF_MBSSID_DEV_NAME “ra”

ifconfig wlan0 up

ifconfig wlan0 192.168.0.248 netmask 255.255.255.0 
route add default gw 192.168.0.1  

wpa_supplicant -Dwext -iwlan0 -c/etc/wifi/wpa_supplicant.conf &

但是我这里用这些命令始终不能连上

我又换成如下命令成功了

wpa_cli

> scan
OK

> add_net
0
> set_net 0 ssid "wifi name"
OK
> set_net 0 psk "password"
OK
> select_net 0
OK
> enable_net 0
OK
> q

dhcpcd wlan0  

猜你喜欢

转载自blog.csdn.net/wwy__/article/details/81274435