4.基于MTK的7601 WIFI网卡在X210上的移植和使用

 老规矩上笔记链接:

文档:项目4.基于MTK的7601 WIFI网卡在X210上...
链接:http://note.youdao.com/noteshare?id=5f494ebf7bf8d7b0a505449b5191a955&sub=3DE1E8BBCA75401897955BD3772C8AF3

 

总结:

所需资源:

  1. x210(cortex-a8)+MTK7601网卡模块
  2. 内核: 2.6.35.7 + android2.3/QT4.8.3
  3. PC 环境:ubuntu14.04  32位
  4. 交叉编译工具链:arm-none-linux-gnueabi-gcc-4.4.1(来自三星的arm-2009q3)
  5. 开发板已装载好 Linux
  6. 挂载x210开发板根文件系统方式:NFS(自行制作开发板根文件系统)
  7. 移植无线网卡工具包支持(iwconfig、iwlist、iwpriv、wpa_supplicant)

涉及技术:

、在官方的已经配置好的rootfs上配置USB WIFI

  1. (1)移植wifi驱动并安装
  2. (2)网卡的配置,wconfig工具集及其使用方法
  3. (3)wpa_supplicant的配置过程及手动分配IP、连接路由器、ping通网关、设置dns并最终能够访问外网域名。
  4. (4)使用dhcp方式获取本地IP
  5. (5)使用interfaces文件来配置网卡信息

、在自己定制的rootfs中移植USB WIFI

  1. (1)自己定制rootfs
  2. (2)移植wifi驱动并安装
  3. (3)移植iwconfig工具集(LWE)
  4. (4)移植wpa_supplicant和交叉编译
  5. (5)制作ext2格式镜像使之最终能够ping通外网域名

一.项目各项材料的准备和确认

1.1、MTK7601

联发科的低成本wifi解决方案。

1.2、无线网卡的配置和使用

(1)常用无线网卡工具介绍:iwconfig、iwlist、iwpriv、wpa_supplicant

(2)常见WIFI加密格式介绍和路由器端查看:WEP、WPA

(3)wpa_supplicant使用详解

(4)配置本地IP地址、网关、dns等并确认外网连接

1.3、确认环境

  1. (1)ubuntu14.04
  2. (2)内核源码树

(可参考十六.linux开发之Kernel移植——内核的配置和编译原理)

  1. (3)开发板提供的官方linux+QT4.8镜像(必须用这个九鼎官方系统,因为自己的系统很多包都不支持,后面我们会在自己定制的rootfs中移植USB WIFI

首先要拿到开发板提供的官方linux+QT4.8镜像,这个内核之前我们做了很多修改(改了屏幕参数和更换触摸屏驱动),根文件系统则使用九鼎bsp提供的根文件

刷机:将官方linux+QT4.8镜像刷进开发板,具体刷机参考裸机篇

启动开发板,在终端中检查,输入ifconfig

如果开发板地址不是192.168.1.10,则使用ifconfig eth0 192.168.1.10设置

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第1张图片

     

1.4  最后将ubuntu的nfs文件夹挂载到开发板文件系统中的opt文件夹下:

挂载测试

mount -t nfs -o nolock 192.168.1.141:/root/porting_x210/rootfs/rootfs /opt

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第2张图片

/这样就把rootfs文件夹 以 NFS的方式挂载到了/opt下。 

//在opt中的操作就是在rootfs中的操作。

//注意最好不要挂载在/mnt目录下。最好在opt或者tmp下 

//用了mnt就会导致共享文件夹不能使用。

1.5、网卡驱动源码确认

(1)DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2

1.6、USB WIFI网卡硬件确认

  1. lsusb查看网卡的VID和PID

Bus 001 Device 003: ID 148f:7601

VID和PID主要功能就是用来识别设备,并挂接相应的驱动。

二..驱动源码修改及编译

在开发板跟文件系统中创建一个文件夹mt7601_wifi, 用于移植wifi

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第3张图片

先make clean 清除

2.1、确认USB的VID和PID

(1)源码包中rtusb_dev_id.c文件,添加如下源码

 vi  DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/common/rtusb_dev_id.c

USB_DEVICE_ID rtusb_dev_id[] = {#ifdef RT6570{USB_DEVICE(0x148f,0x6570)}, /* Ralink 6570 */#endif /* RT6570 */{USB_DEVICE(0x148f, 0x7650)}, /* MT7650 */#ifdef MT7601U{USB_DEVICE(0x148f,0x6370)}, /* Ralink 6370 */{USB_DEVICE(0x148f,0x7601)}, /* MT 6370 */  // 我们的模块就是这个#endif /* MT7601U */{ }/* Terminating entry */};

2.2、修改Makefile

  1. (1)平台换成:                      三星  PLATFORM = SMDK
  2. (2)内核源码树路径设置:    LINUX_SRC =/root/x210v3_bsp/kernel

//linux内核源码树

  1. (3)交叉工具链路径设置:    CROSS_COMPILE =arm-linux-   //交叉编译环境

2.3、修改网卡名字(可选)

(1)常用无线网卡名称:rax、wlanx

(2)修改include/rtmp_def.h文件

#define INF_MAIN_DEV_NAME "ra"

#define INF_MBSSID_DEV_NAME "ra"

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第4张图片

2.4、添加wpa_supplicant支持

确保config.mk文件中WPA_SUPPLICANT=y

.

2.5、编译生成驱动模块

(1)清理&编译

make clean && make -j2

生成os/linux/mt7601Usta.ko就是驱动模块

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第5张图片

modinfo命令用于显示kernel模块的信息

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第6张图片

将生成的mt7601Usta.ko文件拷贝到我们的开发板根文件系统中的home目录下

三...USB WIFI网卡驱动源码简单分析

在windows下建立source insight工程,用来分析驱动源码

第一步:拿到一个新的驱动源码如何入手分析???

直接搜索module_init(模块入口)

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第7张图片

继续跟踪rtusb_init函数中的usb_register,根据前面我们驱动学习,可以知道,这里是注册usb的driver,函数内部我们根本没必要深究,只需要研究rtusb_driver这个变量即可。

继续跟踪rtusb_driver,发现定义了两个,其中适合我们内核版本的是下面这一个:

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第8张图片

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第9张图片

这里肯定要定义这个宏MT7601U,但我们搜索了整个工程,发现没有该宏定义

猜想可能在linux下的Makefile中脚本文件可能有定义,故在linux网卡驱动源码目录下使用grep搜索该宏定义,找到了 ,故上面的条件成立。

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第10张图片

我们这里继续跟踪一下ANDROID_SUPPORT这个宏,看看在哪里定义的,但我们搜索了整个工程,发现没有该宏定义,则猜想可能和上面一样

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第11张图片

使用grep搜索该宏定义

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第12张图片

四.WIFI网卡的配置过程1

上面我们已经将生成的mt7601Usta.ko文件拷贝到我们的开发板根文件系统中的home目录下

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第13张图片

insmod xxx 装载ko文件,发现打印了很多信息,那怎么看出我们的驱动装载成功没有

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第14张图片

使用ifconfig -a,查看信息,其中ra0就是我们的网卡设备文件

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第15张图片

fconfig ra0 up用来打开这个网卡驱动(因为我们还没有对网卡进行配置,肯定是上不了网的)

4.1、iwconfig工具集的介绍和使用演示

如果使用iwconfig显示-sh: iwconfig: not found

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第16张图片

参考这里解决:https://blog.csdn.net/zjf30366/article/details/84975180

需要的文件:

(1)linux下专用来配置无线网络的一些命令集

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第17张图片

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第18张图片

(2)因为iwconfig本身有一定限制,只支持一定的加密格式,在我们这里不用

五.WIFI网卡的配置过程

5.1、wpa_supplicant配置文件

如果你的系统中的没有wpa_supplicant的支持,即

如果使用wpa_supplicant 显示-sh: iwconfig: not found

参考这里移植wpa_supplicant解决,https://blog.csdn.net/zgrjkflmkyc/article/details/46122551

需要的文件:

移植成功后的终端使用wpa_

使用supplicant 命令如下:

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第19张图片

(1)wpa_supplicant简介

(2)/etc/Wireless/RT2870STA/RT2870STA.dat

使用mkdir -p /etc/Wireless/RT2870STA 创建RT2870STA文件夹

其中配置文件RT2870STA.dat在之前的驱动源码里面有,在源码的根目录中。将RT2870STA.dat文件拷贝到/etc/Wireless/RT2870STA/文件夹中。

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第20张图片

(3)修改 /etc/wpa_supplicant.conf文件

ctrl_interface=/var/run/wpa_supplicant network={         ssid="aliya"         scan_ssid=1         key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE         pairwise=TKIP CCMP         group=CCMP TKIP WEP104 WEP40         psk="as5201314" }

      其中key_mgmt是加密方式

      ssid和psk则是wifi的账号和密码

5.2、网卡配置命令序列(依次输入以下命令)

、insmod mt7601Usta.ko            //安装驱动程序

、ifconfig ra0 up                 //开启无线网卡

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第21张图片

、wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0  //连接无线网络连接手机热点,一直重复执行下面的连接操作,始终没有连接

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第22张图片

解决方法:将手机热点AP要设置为2.4g才行,5g无法识别。

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第23张图片

、wpa_cli -i ra0 status      //查看连接状态 出现以下,说明我们连接上了。

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第24张图片

但还是不能上网,因为我们的ra0现在并没有IP地址,肯定是ping不通的

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第25张图片

、ifconfig ra0 192.168.43.200   //手动配置ip,同一网段

因为手机wifi热点的ip是固定的192.168.43.1,故我们设置为同一网段

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第26张图片

配置网关,让RA0网卡能访问外网

方法①:使用如下命令

route add default gw 192.168.43.1 dev ra0  //配置网关ping 192.168.43.1       //ping 网关ping 8.8.8.8           //ping 外网

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第27张图片

添加DNS域名解析(让能ping通baidu等域名)

vi /etc/resolv.conf     // 添加一下内容,配置dns

nameserver 192.168.43.1 

ping www.baidu.com   //能ping通了。

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第28张图片

注意:

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

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

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

4、添加网关后就能ping通外网IP了,但是还ping不通www.baidu.com等域名,因为还没有dns。

六.WIFI网卡的配置过程3

方法②:通过静态配置方法

使用interfaces文件静态配置

(1)还是之前的操作,先让RA0连接到热点wifi

insmod mt7601Usta.ko            //安装驱动程序

ifconfig ra0 up                 //开启无线网卡

mkdir /var/run//创建这个文件夹,用于存放wpa_supplicant.conf文件 不然去执行连接无线网络, 会有问题

wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0   //连接无线网络

wpa_cli -i ra0 status        //查看连接状态

(2)interface文件

第一步,编辑好interface文件

vi /etc/network/interfaces

# Configure Loopback auto lo iface lo inet loopback      auto eth0 iface eth0 inet dhcp         auto ra0              iface ra0 inet static                   address 192.168.43.20 #ra0网卡的ip,必须与热点wifi同一网段 netmask 255.255.255.0 gateway 192.168.43.1 #gateway网管用来ping外网

第二步,使interface文件生效(重启网卡),方法是先ifdown ra0然后ifup ra0

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第29张图片

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第30张图片

添加DNS域名解析(让能ping通baidu等域名)

vi /etc/resolv.conf     // 添加一下内容,配置dns

nameserver 192.168.43.1 

ping www.baidu.com   //能ping通了。

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第31张图片

总结:使用/etc/network/interfaces文件其实就是替代了手工配置时的ifconfig分配本地ip地址,和route添加网关这两步。

6.2、使用dhcp动态分配IP

(1)原理:路由器中有个dhcp服务器,本地有dhcp客户端

(2)前导步骤

insmod mt7601Usta.ko            //安装驱动程序

ifconfig ra0 up                 //开启无线网卡

wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0   //连接无线网络

wpa_cli -i ra0 status        //查看连接状态

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第32张图片

(3)当前状态就是:wifi网卡已经启动并且连接上路由器了,但是本地没有ip地址,所以没法ping通路由器。怎么办?我们这里使用dhcp分配一个本地ip。

方法1:命令行使用udhcpc命令来分配

意思是使用本地的ra0网卡的dhcp客户端

udhcpc -i ra0 

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第33张图片

方法2:使用interface文件选择dhcp模式然后重启网卡

vi /etc/network/interfaces

# Configure Loopback auto lo iface lo inet loopback      auto eth0 iface eth0 inet dhcp         auto ra0              iface ra0 inet dhcp                  address 192.168.43.20 #ra0网卡的ip,必须与热点wifi同一网段 netmask 255.255.255.0 gateway 192.168.43.1 #gateway网管用来ping外网

第二步,使interface文件生效(重启网卡),方法是先ifdown ra0然后ifup ra0

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第34张图片

6.3、让开发板开机自动连上路由器上网

改/etc/init.d/rcS及其相关文件

在/etc/init.d/目录下新建S41wifi文件,添加一下信息。并将该文件赋值权限 chmod 777 S41wifi

mkdir /var/run insmod /home/mt7601Usta.ko ifconfig eth0  down ifconfig ra0 up wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0 wpa_cli -i ra0 status ifdown ra0 ifup ra0

保证我们使用的interface文件里面是选择dhcp模式

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第35张图片

然后重启开发板,在终端中看见系统启动开始就有RA0网卡的一系列部署信息,启动完毕后,ifconfig&&ping 都能完成,说明实现了。

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第36张图片

七.在自己定制的rootfs中移植网卡

9.1、确认自己制作的rootfs并启动

(1)busybox交叉编译

(2)启动后直接nfs方式挂载文件夹形式的rootfs,测试ok后再做成镜像烧录

(3)挂载参数bootargs:

set bootcmd 'tftp 30008000 zImage; bootm 30008000'

 

setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200

一定记得save保存,然后重启开发板,应该就可以正常挂载根文件系统。

我们拷贝到tftp目录下的的linux系统目录为:/root/x210v3_bsp/kernel

拷贝zimage镜像到TFTP目录下,开发板重新启动,tftp方式自动更新系统。

root@wwj:~/x210v3_bsp/kernel# cp arch/arm/boot/zImage  /tftpboot/ -f

9.2、需要的工具集确认

(1)iwconfig工具集:另外移植的,不是busybox中的

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第37张图片

(2)dhcp工具集:是busybox中集成的,确认busybox的menuconfig中配置支持了这个

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第38张图片

(3)wpa_supplicant工具集:另外移植的,不是busybox中的

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第39张图片

9.3、交叉编译iwconfig

如果使用iwconfig显示-sh: iwconfig: not found

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第40张图片

参考这里解决:https://blog.csdn.net/zjf30366/article/details/84975180

需要的文件:

使iwconfig等命令可以使用

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第41张图片

八.移植wpa_supplicant并制作镜像1_2

8.1、交叉编译wpa_supplicant

(1)下载wpa_supplicant源码并配置编译。参考http://blog.csdn.net/hktkfly6/article/details/48949863

(2)下载配套版本的openssl并配置编译

(3)去掉配置NL相关的选项省去移植libnl。参考:http://www.cnblogs.com/helloworldtoyou/p/6145995.html

这里,默认我们的rootfs已经支持wpa_supplicant功能了

(1)还是之前的操作,先让RA0连接到热点wifi

insmod mt7601Usta.ko            //安装驱动程序

ifconfig ra0 up                 //开启无线网卡

wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0  //连接无线网络

出现问题: 当执行wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0 显示rt28xx_close时。,解决方法如下

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第42张图片

wpa_cli -i ra0 status        //查看连接状态

这个错误来源于etc/wpa_supplicant.conf文件中的第一行内容

ctrl_interface=/var/run/wpa_supplicant network={         ssid="aliya"         scan_ssid=1         key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE         pairwise=TKIP CCMP         group=CCMP TKIP WEP104 WEP40         psk="as5201314" }

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第43张图片

我们的/var/目录下并没有run这个目录,故需要创建这个目录,然后重新执行连接无线网络。

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第44张图片

ok 从新执行连接wifi的命令,可以了

和之前的WIFI网卡的配置过程一样,配置后,这里能ping通了。

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第45张图片

让开发板开机自动连上路由器上网(和上面的配置过程一样)

改/etc/init.d/rcS及其相关文件

在/etc/init.d/目录下新建S41wifi文件,添加一下信息。并将该文件赋值权限 chmod 777 S41wifi

mkdir /var/run insmod /home/mt7601Usta.ko ifconfig eth0  down ifconfig ra0 up wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0 wpa_cli -i ra0 status ifdown ra0 ifup ra0

保证我们使用的interface文件里面是选择dhcp模式

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第46张图片

然后重启开发板,在终端中看见系统启动开始就有RA0网卡的一系列部署信息,启动完毕后,ifconfig&&ping 都能完成,说明实现了。

补充:ra0的配置和上网前,一定要先关掉eth0(ifconfig eth0 down),否则你ping或者设置等等都是默认使用的eth0而不是ra0.(但我们使用了NFS挂载跟文件系统,如果关闭eth0,则终端的跟文件系统会直接奔溃了,那怎么解决:制作ext2镜像并刷机测试)

九、制作ext2镜像并刷机测试

参考笔记一样的过程:二十.Linux开发之根文件系统构建及过程详解中的

                      ==》十二、制作ext2格式的镜像并烧录启动

具体过程就不详细赘述了。镜像文件我也分享在这,可以直接使用:

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第47张图片

这个镜像文件包括了让开发板开机MTK7601网卡自动连上路由器上网等配置

具体怎么配置的在上面我们使用九鼎官方的QT系统也做过,过程一样。

这里需要注意的是,在制作镜像的过程中 将S41wifi文件添加信息之后,要在rcS文件中以下做修改,然后再打包生成镜像烧录,因为镜像重启之后,只保存最初的状态和文件,所以,需要在制作镜像之前把这些步骤弄完成。

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第48张图片

然后重启开发板,不用任何设置(在开机启动中就可以看见已经在配置我们的mtk7601网卡信息了),直接能ping通外网及其百度等域名,说明我们的基于MTK的USB WIFI网卡在X210上的移植和使用就搞定了。

4.基于MTK的7601 WIFI网卡在X210上的移植和使用_第49张图片

你可能感兴趣的:(ARM(项目合集),ARM+Linux探索之旅)