USB-WiFi在x210板子上的移植

以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。


一、本课程内容

1、MT7601驱动的移植

(1)开发环境搭建和确认

(2)源码获取和解压

(3)配置、编译、安装

最后得到网络设备文件。

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

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

(2)常见WIFI加密格式介绍:WEP、WPA(一般使用这个)

(3)wpa_supplicant使用详解

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


上面是在官方的已经配置好的rootfs上配置,下面是在自己制作rootfs上配置。

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

(1)自己定制rootfs

(2)移植wifi驱动并安装

(3)移植iwconfig工具集(LWE)

(4)移植wpa_supplicant


上面是静态分配ip。下面是自动获取ip地址,通过dhcp功能。

4、在自己定制的rootf中添加dhcp支持

(1)在内核和busybox配置中添加dhcp支持

(2)移植dhcpc和dhcpd并使用



二、项目各项材料的准备和确认

1、开发环境搭建和确认

(1)ubuntu14.04

(2)内核源码树

(3)开发板运行着官方linux+QT4.8镜像(在开发版光盘资料\X210V3S_B\linux\QT4.8)root 123456

(4)nfs服务器和文件夹形式的rootfs

mount -t nfs -o nolock 192.168.1.100:/root/rootfs /opt

2、网卡驱动源码确认

(1)DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2

3、USB WIFI网卡硬件确认

(1)网卡基本信息介绍

(2)lsusb查看网卡的VID(产商id):PID(产品id)

Bus 001 Device 003: ID 148f:7601



三、驱动源码修改及编译

1、确认USB的VID和PID

(1)源码包中rtusb_dev_id.c文件。如果没有该usb对应的vid和pid在该数组中,移植时要添加。

  • find -name "rtusb_dev_id.c"得知在/common/rtusb_dev_id.c中。
  • 或者grep "rtusb_dev_id"

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、修改Makefile

(1)平台换成:三星

  • PLATFORM = SMDK

(2)内核源码树路径设置

  • LINUX_SRC =  //改为实际的linux内核源码树

(3)交叉工具链路径设置

  • CROSS_COMPILE =  //交叉编译环境

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

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

  • 有线的一般叫ethn

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

  • #define INF_MAIN_DEV_NAME "ra"
  • #define INF_MBSSID_DEV_NAME "ra"

4、添加wpa_supplicant支持

  • 确保config.mk文件中WPA_SUPPLICANT=y

5、编译生成驱动模块

(1)清理&编译

  • make clean,make -j2,生成os/linux/mt7601Usta.ko就是驱动模块

(2)modinfo mt7601Usta.ko可以查看驱动信息。


四、USB WIFI网卡驱动源码简单分析

主要对应上节设置的解释。



上面安装驱动后,还需要进一步装载、配置等。

五、WIFI网卡的配置过程

挂载,然后安装驱动(成功后肯定得到一个设备文件(可以ifconfig -a查看),可以打开网卡ifconfig ra0 up),打印出一系列信息。



但是打开后还不能上网,因为没有经过配置。


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

(1)linux下专用来配置无线网络的一些命令集,这些命令集比较老了。

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


2、路由器端基础知识

ap(路由器端)和station(手机)

(1)路由器的WAN、LAN



(2)无线参数:SSID(路由器的名字)、频段(2.4G附近分割成若干频段,每个用户使用不同频段)、模式(工作在哪种标准)

(3)安全类型:WEP(早版本)和WPA(升级版)、WPA2(完整版)

(4)安全选项

(5)加密算法

(6)PSK密码



3、wpa_supplicant配置文件

(1)wpa_supplicant简介

  • 进行wifi网络管理的工具,也集成到了busybox中,即可以直接用。

(2)建立/etc/Wireless/RT2870STA/目录(mkdir -p /etc/Wireless/RT2870STA/(这是wifi网卡的配置文件)),然后拷贝RT2870STA.dat(源码中有)到此目录下。

(3)编辑/etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant


network={
        key_mgmt=WPA-PSK
        ssid="newifi_inaqui"
        psk="inaqui12"
}          

4、网卡配置(上网)命令顺序

(1)安装驱动程序:insmod mt7601Usta.ko

(2)开启无线网卡:ifconfig ra0 up

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

(4)查看连接状态:wpa_cli -i ra0 status

至此,usb_wifi已经连上了路由器。


(5)关于手工设置静态IP


因此,我只能使用dhcp的形式,ping通内网。如果能通过qt界面登录校园网账号,就可以ping外网的内容了。

-----------------------------------------------------------------------------------------------

因此下面的操作,无法正常运行。

(1)ifconfig eth0 down

(2)ifconfig ra0 192.168.1.200  //手动配置ra0的ip地址,和路由器处于同一网段

(3)route add default gw 192.168.1.1 dev ra0  //配置网关(配置网关才能访问外网)

  • ping 192.168.1.1    //ping 网关
  • ping 8.8.8.8        //ping 外网(谷歌某地址)

(4)vi /etc/resolv.conf  //配置dns。即在此文件里添加nameserver xx.xx.xx.xx(根据实际)

  • ping www.baidu.com   

(5)注意:

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。

5、使用interfaces文件静态配置IP地址

(1)手工操作

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

ifconfig ra0 up                 //开启无线网卡

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

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


(2)interface文件

第一步,编辑好interface文件

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

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

-----------------------------------------------------------------------------------------

6、使用dhcp动态分配IP

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

(2)前导步骤

ifconfig eth0 down

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 -i ra0命令来分配

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

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

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

(1)etc/init.d/下的目录,和rcS文件的遍历执行该目录下的文件。



(2)在etc/init.d/目录下新建文件S41WIFI,添加如下内容,保存够修改权限。

insmod (具体路径)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
然后修改chmod 777 S41WIFI。


六、在自己定制的rootfs中移植网卡

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

(1)busybox交叉编译

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

(3)挂载参数bootargs和bootcmd

setenv bootargs root=/dev/nfs nfsroot=192.168.1.100:/root/rootfs ip=192.168.1.10:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off  init=/linuxrc console=ttySAC2,115200 
set bootcmd 'tftp 30008000 zImage; bootm 30008000'

2、确认需要的移植的工具集

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

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

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

3、交叉编译iwconfig

(1)源码下载

(2)配置

(3)交叉编译

(4)部署安装

(5)测试


七、移植wpa_supplicant并制作镜像

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

2、在nfs中测试wpa_supplicant使用

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

http://blog.csdn.net/oqqhutu12345678/article/details/72246299

猜你喜欢

转载自blog.csdn.net/oqqHuTu12345678/article/details/78945699