老规矩上笔记链接:

文档:项目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设置

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

挂载测试

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

/这样就把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

先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"

2.4、添加wpa_supplicant支持

确保config.mk文件中WPA_SUPPLICANT=y

.

2.5、编译生成驱动模块

(1)清理&编译

make clean && make -j2

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

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

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

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

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

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

直接搜索module_init(模块入口)

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

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

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

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

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

使用grep搜索该宏定义

四.WIFI网卡的配置过程1

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

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

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

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

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

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

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

需要的文件:

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

(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 命令如下:

(1)wpa_supplicant简介

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

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

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

(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                 //开启无线网卡

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

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

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

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

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

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

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

方法①:使用如下命令

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

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

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

nameserver 192.168.43.1

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

注意:

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

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

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

nameserver 192.168.43.1

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

总结:使用/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        //查看连接状态

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

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

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

udhcpc -i ra0

方法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

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模式

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

七.在自己定制的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中的

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

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

9.3、交叉编译iwconfig

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

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

需要的文件:

使iwconfig等命令可以使用

八.移植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时。,解决方法如下

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" }

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

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

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

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

改/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模式

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

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

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

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

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

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

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

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

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

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

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

  1. USB WIFI网卡在S5PV210上的移植和使用最全攻略(2)

    目录 一.在自己制作的rootfs中移植网卡 1.确认自己制作的rootfs可正常工作并启动 2.需要的工具集确认 3.交叉编译iwconfig 二.移植wpa_supplicant并制作镜像 1.交 ...

  2. USB WIFI网卡在S5PV210上的移植和使用最全攻略(1)

    目录 一.本季文章将会带来那些干货 1.MT7601网卡驱动的移植 2.无线网卡的配置和使用 3.在自己定制的rootfs中移植USB WIFI 4.在自己定制的rootf中添加dhcp支持 二.项目 ...

  3. mtk无线网卡 linux,模块编译问题 给MTK芯片的wifi网卡编译linux驱动 系统是mint

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我在RPI下也试了 都不行 错误信息 /home/mio/work/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/li ...

  4. linux系统如何安装mtk驱动程序,模块编译问题 给MTK芯片的wifi网卡编译linux驱动 系统是mint...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我在RPI下也试了 都不行 错误信息 /home/mio/work/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/li ...

  5. 基于stm32f407下的W5500网卡驱动(上)

    前段时间布置的任务是弄w5500的驱动,w5500本身硬件就具有tcp/ip协议,这样就省去了再把tcp协议栈移植到Uclinux的麻烦,而且我的存储空间一直是不够用的,所以选择w5500作为一个网卡 ...

  6. 《嵌入式 - Lwip开发指南》第4章 移植LWIP(基于RT-Thead系统-以太网+Wifi)

    开发环境: RT-Thread版本:4.0.3 操作系统:Windows10 Keil版本:V5.30 RT-Thread Studio版本:2.0.1 开发板MCU:STM32F746ZGT6U(N ...

  7. 基于wpa_supplicant库的WIFI连接功能实现--wpa_cli命令解析

    从这里开始,就正式进入到主题了,笔者分几节来介绍如何一点点实现基于wpa_supplicant库的WIFI连接功能.最终实现的就是类似于智能手机上的wifi连接界面功能.开发平台是linux3.2.0 ...

  8. MT7601 无线wifi网卡驱动移植

    注意:本博客来源于朱老师项目积木-usb wifi移植部分,本博客仅供学习和交流 一.准备工作 1.MT7601驱动下载 点击下载 2.插入usb WiFi 启动开发板linux,lsusb查看usb ...

  9. USB WiFi网卡驱动分析--经典

    初始化: 在Linux下,驱动大多都是module,可以被自由的装载卸载.Rt73 usb wireless驱动也不例外,是一个可独立编译的module.Module一般都是由module_init入 ...

最新文章

  1. Putty常用属性设置
  2. unity集成openinstall流程
  3. Java开发手册——嵩山版(清幽现云山,虚静出内功)
  4. 解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题
  5. OC反射机制获得该类全部属性并创建数据表
  6. 深度学习进行语音识别的方法 如何建立自己的语音识别系统
  7. Android 新建项目 页面
  8. IOS TableView详解
  9. pandas 之 set_index
  10. Windows 8部署系列PART7:配置MDT部署目标
  11. 混沌数学之CircuitChaotic(二维离散电路混沌系统)
  12. RocketMQ入门(5.单向(Oneway)发送)
  13. 什么是UTF-8编码
  14. mDNS原理的简单理解
  15. 使用ALLHiC基于HiC数据辅助基因组组装
  16. D3.js-基础知识
  17. ffmpeg 去除图片中的水印
  18. 数据嗨客 | 第3期:朴素贝叶斯和垃圾邮件过滤 机器学习 2016-11-01 0 摘要:概率论只不过是把常识用数学公式表达了出来。 概率论只不过是把常识用数学公式表达了出来。 —
  19. 加密卡华为怎么模拟_华为手机怎么复制加密NFC门卡?
  20. python sort 函数和sorted函数的简单区别

热门文章

  1. python石头剪刀布代码带注释_Python石头剪刀布
  2. 百度时间显示时间_DY28CFW时间程序PID调节带阀位数字光柱显示仪表
  3. BIOS实战之Power Sequence
  4. macOS: 使用新版plutil命令操作Plist文件更方便
  5. 卷积神经网络学习三:神经网络之深度学习与tinny_cnn中的层
  6. 使用pycharm画图不显示
  7. 对抗生成网络GAN系列——WGAN原理及实战演练
  8. POI渲染Excel表格模板替换其中指定表格参数,以及Microsoft联机文档查看器遇到的坑
  9. asp毕业设计—— 基于asp+access的网上考试系统设计与实现(毕业论文+程序源码)——网上考试系统
  10. word格式转换成pdf格式转换器