imx6q平台上移植mt7601

时间:2024-05-30 22:24:35

本文描述如何将MT7601 WiFi模块移植到IMX6Q开发板上,分析移植过程中碰到的问题,分析错误原因,提供解决办法。

一、MT7601实物图

imx6q平台上移植mt7601

二、验证开发板和USB MT7601硬件是否正常

步骤1:将MT7601插入到IMX6Q开发板上

步骤2:在串口终端敲入命令lsusb

如下图所示,表示硬件上正常。

imx6q平台上移植mt7601

三、开发环境及准备资料

开发环境:ubuntu 14.04

准备资料

1)MT7601源码:DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2

2)工具:wireless_tools.29.tar.gz、libnl-3.4.0.tar.gz、openssl-1.0.1.tar.gz、wpa_supplicant-2.7.tar.gz

四、移植源码

1)将MT7601源码拷贝到共享文件夹,并解压

imx6q平台上移植mt7601

2)驱动源码修改及编译

A. 确认USB的VID和PID

源码路径:

/share/mt7601_wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/common/rtusb_dev_id.c

imx6q平台上移植mt7601

B. 确认或修改网卡名称

源码路径:

/share/mt7601_wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/rtmp_def.h

imx6q平台上移植mt7601

C.确认添加支持wpa_supplicant

源码路径:

/share/mt7601_wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/config.mk

imx6q平台上移植mt7601

D.修改Makefile

路径:

/share/mt7601_wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/Makefile

imx6q平台上移植mt7601

其中LINUX_SRC是内核源码树、CROSS_COMPILE是交叉编译工具链前缀

E. 编译并生成驱动模块

命令:make clean && make –j2

编译中出错:

imx6q平台上移植mt7601

问题原因:我们指定的内核在配置时不支持802.11的无线设备驱动,这是因为前期在做裁剪的时候,将wireless部分不参与编译。

解决办法:

使能wireless部分参与编译,重新生成config文件,再编译Linux内核。

编译MT7601源码得到驱动安装文件:

路径:/share/mt7601_wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux

文件:mt7601Usta.ko

F.将mt7601Usta.ko拷贝到rootfs文件

命令:cp ./mt7601Usta.ko /imx6q-c/rootfs-qt4/driver-test -f

imx6q平台上移植mt7601

五、移植iwconfig

A.  下载iwconfig源码

网址:

http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz

B.  将iwconfig源码拷贝到共享文件夹,并解压

imx6q平台上移植mt7601

C.  修改Makefile,指定交叉编译工具链和安装路径

修改前:

imx6q平台上移植mt7601

修改后:

imx6q平台上移植mt7601

C.  编译并安装

命令:make && make install

imx6q平台上移植mt7601

D. 检验时候安装成功

在rootfs下,输入相关命令,出现下图提示表示iwconfig工具已成功移植到rootfs。

imx6q平台上移植mt7601

六、移植wpa_supplicant

A.  下载wpa_supplicant源码

网址:

http://w1.fi/wpa_supplicant/

B.  将wap_supplicant-2.7.tar.gz拷贝到共享文件夹并解压

imx6q平台上移植mt7601

C.   进入到wpa_supplicant目录,并生成.config

imx6q平台上移植mt7601

D.  修改Makefile

修改前:

imx6q平台上移植mt7601

修改后:

imx6q平台上移植mt7601

E.  编译

命令:make

出现错误提示:

imx6q平台上移植mt7601

分析错误:找不到libnl-3.0.pc库文件、找不到openssl/ssl.h头文件

分析原因:可能在wpa_supplicant安装的过程中是要依赖其他库

解决办法:

1)将错误信息贴到浏览器进行搜索,查找解决办法

2)查看README文本,安装相匹配的版本

imx6q平台上移植mt7601

结论:在安装wpa_supplicant时是要先安装libnl、openssl,然后再修改Makefile,指定安装时加载的库文件和头文件。

七、移植libnl

A.   下载libnl源码

网址:

https://github.com/thom311/libnl/releases/download/libnl3_4_0/libnl-3.4.0.tar.gz

B.  将libnl-3.4.0.tar.gz拷贝到共享文件夹并解压

imx6q平台上移植mt7601

C.  进入到libnl-3.4.0目录进行配置

命令:

sudo ./configure --host=arm-linux --prefix=/share/mt7601_wifi/libnl_install --enable-static --enable-shared CC=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-linux-gcc

imx6q平台上移植mt7601

出现错误:

imx6q平台上移植mt7601

解决办法:

步骤1: 根据提示安装flex: sudo apt-get install flex

步骤2:再次进行配置

配置成功标志:

imx6q平台上移植mt7601

D.  编译并安装

命令:make && make install

imx6q平台上移植mt7601

E.  进入到安装目录 libnl_install

imx6q平台上移植mt7601

八、移植openssl

A.  下载源码

网址:

http://www.openssl.org/

B.  将openssl-1.0.1.tar.gz拷贝到共享文件夹并解压

imx6q平台上移植mt7601

C.   进入到openssl-1.0.1目录修改Makefile

步骤1:修改安装目录

修改前:

imx6q平台上移植mt7601

修改后:

imx6q平台上移植mt7601

步骤2:修改交叉编译工具链

修改前:

imx6q平台上移植mt7601

修改后:

imx6q平台上移植mt7601

D.  编译和安装

命令:make && make install

imx6q平台上移植mt7601

出现错误:在编译完成后,进行安装时出现了错误。

分析原因:在安装docs出错了

解决办法:1)分析源码,解决安装出错的问题

                     2)由于我们不需要看openssl的手册,只是利用安装后的一些lib文件在编译wap_supplicant时使用。

选择第二种方法,修改Makefile,避开安装man手册。

修改Makefile:

修改前:

imx6q平台上移植mt7601

修改后:

imx6q平台上移植mt7601

E.  进入到安装目录:openssl_install

imx6q平台上移植mt7601

九、接着移植wpa_supplicant

F.  修改Makefile

修改前:

imx6q平台上移植mt7601

修改后:

imx6q平台上移植mt7601

G.  编译

命令:make

imx6q平台上移植mt7601

还是出现错误。

解决办法:

查找命令:find -name “libnl-3.0.pc”

imx6q平台上移植mt7601

添加环境变量:

export PKG_CONFIG_PATH="/share/mt7601_wifi/libnl_install/lib/pkgconfig:$PKG_CONFIG_PATH"

imx6q平台上移植mt7601

重新编译:在源码目录下生产一些工具文件:如 wpa_cli、wpa_passphrase、wpa_supplicant

imx6q平台上移植mt7601

H.  将工具wpa_cli、wpa_passphrase、wpa_supplicant拷贝到rootfs中

imx6q平台上移植mt7601

I.   在开发板控制台上验证wpa_supplicant工具

出现错误:

imx6q平台上移植mt7601

分析错误:在运行wpa_supplicant指令时找不到动态库。

imx6q平台上移植mt7601

通过查看wpa_supplicant是一个动态链接文件,在运行时依赖动态库。

解决办法:移植动态库 libnl-3.so.200, 从libnl_install/lib下移植到开发板rootfs中。

步骤1:在rootfs中创建文件夹usr/local/mt7601/lib用于存放mt7601库文件

/share/imx6q-c/filesystem/qt4/rootfs/usr/local/mt7601/lib

步骤2:添加到rootfs环境变量

修改/etc/qt_env_profile.sh

imx6q平台上移植mt7601

步骤3:拷贝libnl-3.so.200、libnl-genl-3.so.200到usr/local/mt7601/lib

imx6q平台上移植mt7601

步骤4:验证wpa_supplicant

imx6q平台上移植mt7601

表明成功移植wpa_supplicant。

十、在开发板上验证MT7601

步骤1:将MT7601模块插入到开发板的USB口上

步骤2:安装驱动程序

命令:insmod mt7601Usta.ko

imx6q平台上移植mt7601

imx6q平台上移植mt7601

步骤3:开启无线网卡

命令:ifconfig ra0 up

imx6q平台上移植mt7601

出现了错误。

错误分析:找不到/etc/Wireless/RT2870STA/RT2870STA.dat文件。

解决办法:查找RT2870STA.dat所在位置,将其拷贝到/etc/Wireless/RT2870STA目录下。

imx6q平台上移植mt7601

可知RT2870STA.dat在MT源码目录下。

imx6q平台上移植mt7601

再次启动无线网卡,成功启动,提示如下:

imx6q平台上移植mt7601

步骤4:连接无线网络

命令:wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0

出现错误:

imx6q平台上移植mt7601

错误分析:找不到 /etc/wpa_supplicant.conf文件

解决办法:在/etc目录下创建wpa_supplicant.conf,并输入以下内容。

   ctrl_interface=/var/run/wpa_supplicant

   network={

       key_mgmt=WPA-PSK

       ssid="vip-01"

       psk="12345678"

   }

imx6q平台上移植mt7601

从wpa_supplicant.conf的内容可知,要在/var目录下要有run文件夹,于是创建目录/var/run。

再次连接无线网络。

出现错误:

imx6q平台上移植mt7601

解决办法:指定是Linux wireless extensions

wpa_supplicant -B -i ra0 -c /etc/wpa_supplicant.conf -Dwext

imx6q平台上移植mt7601

成功连接提示。

步骤5:查看连接状态

命令:wpa_cli -i ra0 status

成功连接上热点。

imx6q平台上移植mt7601

当前状态就是:wifi网卡已经启动并且连接上路由器了,但是本地没有ip地址

步骤6:设置ra0 IP地址

命令:ifconfig ra0 192.168.0.10

imx6q平台上移植mt7601

步骤7:ping网关

命令:ping 192.168.0.1

imx6q平台上移植mt7601

步骤8:ping 外网IP

命令:ping 8.8.8.8

imx6q平台上移植mt7601

不能ping通外网IP。

分析原因:需要配置网关

命令:route add default gw 192.168.0.1 dev ra0

imx6q平台上移植mt7601

步骤9:ping外网

命令:ping www.taobao.com

imx6q平台上移植mt7601

不能ping通,需要配置dns

修改/etc/resolv.conf

imx6q平台上移植mt7601

imx6q平台上移植mt7601

十一、设置开机自启动Wifi模块

步骤1:在/share/imx6q-c/filesystem/qt4/rootfs/etc/rc.d目录下创建rc.network文件

imx6q平台上移植mt7601

步骤2:修改rc.network内容为如下所示:

imx6q平台上移植mt7601

步骤3:修改/share/imx6q-c/filesystem/qt4/rootfs/etc/rc.d/rcS文件,使用rc.network文件被执行

imx6q平台上移植mt7601

步骤4:添加或修改/etc/network/interfaces文件

imx6q平台上移植mt7601

步骤5:修改interfaces文件为如下所示:

imx6q平台上移植mt7601

步骤6:确保配置了DNS,查看/etv/ resolv.conf

imx6q平台上移植mt7601

步骤7:以上是在ubuntu14.04中进行修改的,将修改后的rootfs 打包成rootfs.qt4.tar.bz2并烧录到开发板上,启机进行验证。

步骤8:使用烧录工具Mfgtools-Rel-13.01.00_ER_MX6Q_UPDATER进行烧录

imx6q平台上移植mt7601

步骤9:进行测试验证

动态分配得到的IP

imx6q平台上移植mt7601

ping 192.168.0.1

imx6q平台上移植mt7601

ping 8.8.8.8

imx6q平台上移植mt7601

ping www.taobao.com

imx6q平台上移植mt7601

通过以上验证,已成功移植MT7601 WIFI模块到IMX6Q开发板,并可以正常使用。

 

总结:

  1. 要具备linux下的开发基础,VI工具以及一些常用命令的使用,如:

ls、cd、pwd、mkdir、mv、cp、rm、find、grep、which、chmod、tar等

      2. Linux下移植模块,一般流程:

源码下载、配置、交叉编译、部署安装、测试

     3.测试过程中遇到问题与解决

    1)ra0的配置和上网前,一定要先关掉eth0(ifconfig eth0 down),否则你ping或者设置等等都是默认使用的eth0而不是ra0。

    2) 当我们wifi网卡连接上路由器后,想要ping通路由器(网关),必须本地wifi网卡有一个和网关同一网段的ip地址才可以。这个本地的ip地址可以dhcp分配,也可以手工配置一个。

   3) 本地有了ip地址,并且wifi网卡通过wpa_supplicant配置连上路由器后,就能ping通网关了。但是这时还不能ping通外网,因为本地还没有添加网关配置。添加网关配置有两种方法:通过route命令动态添加,或者通过/etc/network/interfaces文件添加。

  4) 添加网关后就能ping通外网IP了,但是还ping不通www.taobao.com等域名,因为还没有DNS。需要修改/etv/ resolv.conf文件。