我是靠谱客的博主 坚强金针菇,最近开发中收集的这篇文章主要介绍将USB-WiFi网卡移植到X210开发板一、移植前的准备工作二、编译驱动源码得到mt7601Usta.ko文件三、配置无线网卡以实现上网功能四、在自己定制的rootfs中移植网卡,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

一、移植前的准备工作

1、搭建开发环境

(1)虚拟机运行着ubuntu14.04系统。

(2)X210开发板运行着linux内核镜像、QT4.8文件系统镜像。相关的镜像文件在开发板光盘资料的X210V3S_BlinuxQT4.8目录中,账号与密码是root、123456。

(3)虚拟机中有内核源码树,这个内核源码树主要用来编译无线网卡驱动源码,它的版本必须与板载系统的内核版本一致,否则编译后的驱动程序在开发版上运行时,会遇到不匹配的问题。这里的内核源码树位于位于/home/xjh/iot/embedded_basic/kernel/x210_kernel。

(4)搭建好NFS服务器,制作好文件夹形式的rootfs。


2、下载与解压无线网卡驱动

(1)下载地址:DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2。

(2)将驱动源码压缩包解压至/home/xjh/iot/embedded_basic/x210_usb-wifi目录。

通过对比博文第五季2:STA模式USB-WIFI网卡移植与测试的无线网卡驱动的内容,可以看出两者是完全一样的。

#本课程的无线网卡驱动内容
root@ubuntu:/home/xjh/iot/embedded_basic/x210_usb-wifi# ls
DPO_MT7601U_LinuxSTA_3.0.0.4_20130913  DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
root@ubuntu:/home/xjh/iot/embedded_basic/x210_usb-wifi# cd DPO_MT7601U_LinuxSTA_3.0.0.4_20130913
root@ubuntu:/home/xjh/iot/embedded_basic/x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913# ls
ate    common   iwpriv_usage.txt  Makefile  mgmt  phy        README_STA_usb     RT2870STA.dat  sta_ate_iwpriv_usage.txt
chips  include  mac               mcu       os    rate_ctrl  RT2870STACard.dat  sta            tools
root@ubuntu:/home/xjh/iot/embedded_basic/x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913# 

#第五季2:STA模式USB-WIFI网卡移植与测试
root@ubuntu:/home/xjh/iot/hisi_development/usb-wifi/MT7601_driver# ls
ap  sta
root@ubuntu:/home/xjh/iot/hisi_development/usb-wifi/MT7601_driver# cd sta/
root@ubuntu:/home/xjh/iot/hisi_development/usb-wifi/MT7601_driver/sta# ls
DPO_MT7601U_LinuxSTA_3.0.0.4_20130913          openssl-0.9.8za         wpa_supplicant-2.5
DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2  openssl-0.9.8za.tar.gz  wpa_supplicant-2.5.tar.gz
root@ubuntu:/home/xjh/iot/hisi_development/usb-wifi/MT7601_driver/sta# cd DPO_MT7601U_LinuxSTA_3.0.0.4_20130913
root@ubuntu:/home/xjh/iot/hisi_development/usb-wifi/MT7601_driver/sta/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913# ls
ate    common   iwpriv_usage.txt  Makefile  mgmt  phy        README_STA_usb     RT2870STA.dat  sta_ate_iwpriv_usage.txt
chips  include  mac               mcu       os    rate_ctrl  RT2870STACard.dat  sta            tools
root@ubuntu:/home/xjh/iot/hisi_development/usb-wifi/MT7601_driver/sta/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913# 

3、确认无线网卡的硬件信息

在板载系统上使用lsusb命令查看无线网卡的“VID:PID”,分别是厂商ID和产品ID。

[root@x210v3 ~]# lsusb 
Bus 001 Device 009: ID 148f:7601

二、编译驱动源码得到mt7601Usta.ko文件

以下的操作,主要为了得到无线网卡的驱动,即mt7601Usta.ko文件。

1、确认USB的VID和PID

在x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/common/rtusb_dev_id.c文件中的rtusb_dev_id[ ]数组里,列出了该驱动所支持的USB的VID和PID,如果USB-WIFI网卡的USB的VID和PID不在该数组中,移植时要添加。

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文件

该文件位于x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/目录下。

(1)注释掉之前的PLATFORM,然后在67行添加“PLATFORM = SMDK”。

//省略部分代码,注释掉这些
#PLATFORM = BLPMP
#PLATFORM = MT85XX
#PLATFORM = MT53XX
#PLATFORM = NXP_TV550
#PLATFORM = MVL5
#PLATFORM = RALINK_3352
#PLATFORM = UBICOM_IPX8
#PLATFORM = INTELP6
#PLATFORM = MSTARTV
 
//添加下面代码
PLATFORM = SMDK

(2)根据实际情况设置内核源码树的路径、交叉编译工具链路径。如果交叉编译工具链没有export出来的话就要添加绝对路径。

ifeq ($(PLATFORM),SMDK)
#LINUX_SRC = /home/bhushan/itcenter/may28/linux-2.6-samsung
#CROSS_COMPILE = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
LINUX_SRC = /home/xjh/iot/embedded_basic/kernel/x210_kernel
CROSS_COMPILE = arm-linux-
endif

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

(1)有线网卡的名字一般叫做eth0、eth1…ethn,无线网卡的名字一般叫做ra0、ra1…ran(或者wlan0、wlan1…wlann)。

(2)在x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/include/rtmp_def.h文件中修改内容如下。

1600 //#ifdef ANDROID_SUPPORT
1601 #define INF_MAIN_DEV_NAME               "wlan"
1602 #define INF_MBSSID_DEV_NAME             "wlan"
1603 //#else
1604 //#define INF_MAIN_DEV_NAME             "ra"
1605 //#define INF_MBSSID_DEV_NAME           "ra"
1606 //#endif /* ANDROID_SUPPORT */

4、添加wpa_supplicant支持

(1)在x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/config.mk文件中,搜索“HAS_WPA_SUPPLICANT”,确保“HAS_WPA_SUPPLICANT=y”。

  24 # Support Wpa_Supplicant
  25 # i.e. wpa_supplicant -Dralink
  26 HAS_WPA_SUPPLICANT=y
  27 
  28 
  29 # Support Native WpaSupplicant for Network Maganger
  30 # i.e. wpa_supplicant -Dwext
  31 HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

(2)继续搜索“SMDK”,大概在1089行处进行如下修改。

ifeq ($(PLATFORM),SMDK)
         EXTRA_CFLAGS := $(WFLAGS)
         export EXTRA_CFLAGS
endif

5、编译驱动源码得到mt7601Usta.ko文件

(1)在x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/下执行“make clen”,然后执行“make”,此时在该目录下的os/linux/目录中生成mt7601Usta.ko文件。为了挂载,将该文件拷贝到/home/xjh/iot/embedded_basic/rootfs/rootfs_xjh目录中。

(2)可以使用“modinfo mt7601Usta.ko”命令查看驱动信息。

root@ubuntu:/home/xjh/iot/embedded_basic/x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux# ls mt*
mt7601Usta.ko  mt7601Usta.mod.c  mt7601Usta.mod.o  mt7601Usta.o
root@ubuntu:/home/xjh/iot/embedded_basic/x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux# modinfo mt7601Usta.ko 
filename:       /home/xjh/iot/embedded_basic/x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/mt7601Usta.ko
version:        3.0.0.3
description:    RT2870 Wireless Lan Linux Driver
author:         Paul Lin <paul_lin@ralinktech.com>
license:        GPL
srcversion:     B2632BD2D7AD40A63B72D9E
alias:          usb:v148Fp760Bd*dc*dsc*dp*ic*isc*ip*
alias:          usb:v148Fp7601d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v148Fp6370d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v148Fp7650d*dc*dsc*dp*ic*isc*ip*
depends:        
vermagic:       2.6.35.7 preempt mod_unload ARMv7 
parm:           mac:rt28xx: wireless mac addr (charp)
root@ubuntu:/home/xjh/iot/embedded_basic/x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux# 

三、配置无线网卡以实现上网功能

1、安装无线网卡驱动mt7601Usta.ko文件

(1)首先将上面生成的mt7601Usta.ko文件复制到板载系统的/usr/xjh_usb-wifi目录中。即启动开发板进入系统(账号密码是root、123456),然后“ifconfig eth0 up”开启有线网卡,接着“ifconfig eth0 192.168.1.11”配置有线网卡的IP地址,然后利用下面命令将mt7601Usta.ko文件所在的虚拟机目录挂载到板载系统的/mnt目录,接着将mt7601Usta.ko文件复制到板载系统/usr/xjh_usb-wifi目录中。

mount -t nfs -o nolock 192.168.1.141:/home/xjh/iot/embedded_basic/rootfs/rootfs_xjh /mnt

(2)然后将无线网卡插入X210开发板的任意USB插槽。

# 插进第一个USB插槽时的输出
[root@x210v3 ~]# 
[root@x210v3 ~]# [  425.611753] usb 1-1.1: new high speed USB device using s5p-ehci and address 4
[  425.716551] usb 1-1.1: New USB device found, idVendor=148f, idProduct=7601
[  425.722827] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  425.730077] usb 1-1.1: Product: 802.11 n WLAN
[  425.734381] usb 1-1.1: Manufacturer: MediaTek
[  425.738685] usb 1-1.1: SerialNumber: 1.0

# 拔掉usb-wifi网卡时的输出
[root@x210v3 ~]# [  564.425135] usb 1-1.1: USB disconnect, address 4

(3)然后安装无线网卡驱动,即在/usr/xjh_usb-wifi目录下执行“insmod mt7601Usta.ko”。

[root@x210v3 xjh_usb-wifi]# ls
mt7601Usta.ko
[root@x210v3 xjh_usb-wifi]# insmod mt7601Usta.ko
[  589.033836] rtusb init rt2870 --->
[  589.036208] ===>rt2870_probe()!
[  589.040985] --> RTMPAllocAdapterBlock
[  589.044569] 
[  589.044572] 
#省略部分内容
[  589.215602] Allocate net device ops success!
[  589.219828] The name of the new wlan interface is wlan0...
[  589.225298] RtmpOSNetDevAttach()--->
[  589.232064] <---RtmpOSNetDevAttach(), ret=0
[  589.235286] <===rt2870_probe()!
[  589.238079] usbcore: registered new interface driver rt2870
[root@x210v3 xjh_usb-wifi]#

(4)此时使用“ifconfig -a”查看,可以得知无线网卡wlan0的一些信息。

[root@x210v3 xjh_usb-wifi]# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:09:C0:FF:EC:48  
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::209:c0ff:feff:ec48/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9603 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5241 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:14523906 (13.8 MiB)  TX bytes:367990 (359.3 KiB)
          Interrupt:42 Base address:0x4300 

# 省略部分代码

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
#省略部分代码
#无线网卡对应的“设备文件”wlan0
wlan0     Link encap:Ethernet  HWaddr 00:00:00:00:00:00  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

2、开启无线网卡并设置IP地址

(1)首先使用命令“ifconfig wlan0 up”开启无线网卡。

[root@x210v3 xjh_usb-wifi]# ifconfig wlan0 up
# 省略部分输出
[ 1492.081350] ==>  DMAIdle, GloCfg=0x40000050
[ 1492.085317] Driver auto reconnect to last OID_802_11_SSID setting - 11n-AP, len - 6
[ 1492.093366] CntlOidSsidProc():CNTL - 0 BSS of 0 BSS match the desire RTMPDrvOpen(2):Check if PDMA is idle!
[ 1492.101944] (6)SSID - 11n-AP
[ 1492.105507] CNTL - All roaming failed, restore to channel 1, Total BSS[00]
[ 1492.111625] ==>  DMAIdle, GloCfg=0x40000050

(2)接着设置无线网卡的IP地址。

通过查看windows主机的无线网络信息,可知其连接的无线路由器的地址为192.168.1.1。

SSID:	XJH-ChinaNet-2.4G
协议:	802.11n
安全类型:	WPA2-个人
网络频带:	2.4 GHz
网络通道:	2
IPv6 地址:	240e:3b6:30f4:ad80:912d:a070:e7d1:14ac
IPv6 DNS 服务器:	fe80::1%17
IPv4 地址:	192.168.1.2 #笔记本的IP地址
IPv4 DNS 服务器:	192.168.1.1 #路由器的IP地址
制造商:	Intel Corporation
描述:	Intel(R) Dual Band Wireless-AC 8265
驱动程序版本:	20.70.4.2
物理地址(MAC):	88-B1-11-9A-37-5B

于是我们执行命令“ifconfig wlan0 192.168.1.211”,将无线网卡的IP地址设置成和无线路由器IP地址同一网段的,然后使用“ifconfig”命令查看wlan0是否启动。

[root@x210v3 xjh_usb-wifi]# ifconfig wlan0 192.168.1.211
[root@x210v3 xjh_usb-wifi]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:09:C0:FF:EC:48  
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::209:c0ff:feff:ec48/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9600 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5247 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:14523684 (13.8 MiB)  TX bytes:368318 (359.6 KiB)
          Interrupt:42 Base address:0x4300 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 1C:BF:CE:2C:B2:5E  
          inet addr:192.168.1.211  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::1ebf:ceff:fe2c:b25e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1078 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:312870 (305.5 KiB)  TX bytes:0 (0.0 B)

[root@x210v3 xjh_usb-wifi]#

3、使用wpa_supplicant工具将无线网卡接入网络

经过上面的操作,无线网卡wlan0已经启动并且配置有IP地址,就等待着接入无线路由器。此时我们可以使用 wpa_supplicant 工具将无线网卡wlan0接入网络。wpa_supplicant 工具主要用于管理无线网络,它已经集成到busybox中,因此可以直接使用。

[root@x210v3 xjh_usb-wifi]# find / -name "wpa_supplicant"
/usr/sbin/wpa_supplicant
[root@x210v3 xjh_usb-wifi]#

(1)在板载系统中创建/etc/Wireless/RT2870STA目录,然后将虚拟机的x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/RT2870STA.dat文件拷贝到该目录。

(2)在板载系统中创建并编辑/etc/wpa_supplicant.conf文件(注意删掉注释)。

ctrl_interface=/var/run/wpa_supplicant
 
network={
ssid="XJH-ChinaNet-2.4G"                # 当前我房间的无线路由器的网络名字
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE # 加密方式
pairwise=TKIP CCMP
group=CCMP TKIP WEP104 WEP40
psk="xie732787"                         # 路由器的密码
}

(3)使用命令“wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -dd &”,将无线网卡接入连接无线网络。

[root@x210v3 xjh_usb-wifi]# wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -dd &
#省略部分输出
EAPOL: SUPP_BE entering state IDLE
EAPOL authentication completed - result=SUCCESS
RTM_NEWLINK: operstate=1 ifi_flags=0x11043 ([UP][RUNNING][LOWER_UP])
RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added
WEXT: if_removed already cleared - ignore event
SYNC - AP changed N OperaionMode to 0
EAPOL: startWhen --> 0
EAPOL: disable timer tick
MT7601AsicTemperatureCompensation::Change to TEMPERATURE_MODE_HIGH
SYNC - AP changed N OperaionMode to 3
SYNC - AP changed B/G protection to 0
SYNC - AP changed N OperaionMode to 0
SYNC - AP changed N OperaionMode to 1
SYNC - AP changed B/G protection to 1
#这是动态的输出,需要按下回车继续下一步

(4)使用命令“wpa_cli -i wlan0 status”查看连接状态。

[root@x210v3 xjh_usb-wifi]# wpa_cli -i wlan0 status
RX ctrl_iface - hexdump_ascii(len=6):
     53 54 41 54 55 53                                 STATUS          
wlan0: Control interface command 'STATUS'
bssid=28:93:7d:25:a5:bd
ssid=XJH-ChinaNet-2.4G
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=TKIP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.1.211
address=1c:bf:ce:2c:b2:5e
[root@x210v3 xjh_usb-wifi]# 

4、ping通路由器与外网的测试

(1)注意先使用“ifconfig eth0 down”关掉eth0,否则开发板默认使用eth0而非wlan0。

(2)经过上面操作之后,开发板可以ping通路由器(ping 192.168.1.1),但是因为还没有设置网关,所以不能ping通外部网络(比如ping 8.8.8.8)。我们可以通过在命令行输入下面命令来设置网关信息。

route add default gw 192.168.1.1 dev wlan0

(3)设置网关之后,因为还没有设置DNS,因此不能ping www.baidu.com等域名。我们可以在/etc/resolv.conf文件中配置DNS,即创建此文件并添加“nameserver 192.168.1.1”。注意这里的IP是无线路由器的IP。

[root@x210v3 xjh_usb-wifi]# ping www.baidu.com
PING www.baidu.com (14.215.177.38): 56 data bytes
64 bytes from 14.215.177.38: seq=0 ttl=56 time=19.485 ms
64 bytes from 14.215.177.38: seq=1 ttl=56 time=7.584 ms
64 bytes from 14.215.177.38: seq=2 ttl=56 time=7.942 ms
64 bytes from 14.215.177.38: seq=3 ttl=56 time=8.450 ms

--- www.baidu.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 7.584/10.865/19.485 ms
[root@x210v3 xjh_usb-wifi]# 

5、在interface文件中配置静态IP或动态IP(可选操作)

之前都是通过手动设置IP地址,其实也可以修改板载系统的/etc/network/interfaces文件来配置静态或者动态IP地址。设置静态IP的修改如下,其实就是替代手工配置时的ifconfig分配IP地址、route添加网关这两步。简单起见,这里删除有线网卡的配置,保留无线网卡的配置。

auto lo
iface lo inet loopback

#auto eth0
#iface eth0 inet static
#address 192.168.1.11  
#netmask 255.255.255.0 
#gateway 192.168.1.1

auto wlan0
iface wlan0 inet static
address 192.168.1.211
netmask 255.255.255.0
gateway 192.168.1.1

6、设置开发板开机自动连接路由器

这里是前面内容的总结,可以忽略前面1~4的操作,完成第5点后直接进行下面操作。开发板开机自动连接路由器,这个功能可以通过修改板载系统的/etc/init.d/rcS文件来实现。

(1)rcS文件所在目录及内容如下,可知它会遍历执行/etc/init.d目录下S??*的文件。

[root@x210v3 init.d]# pwd
/etc/init.d
[root@x210v3 init.d]# ls
S01logging* S20urandom* S50sshd*    rcK*
S10mdev*    S40network* S99qttest*  rcS*
[root@x210v3 init.d]#
#!/bin/sh

# Start all init scripts in /etc/init.d
# executing them in numerical order.   
#                                      

for i in /etc/init.d/S??* ;do          
                                       
     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue           
                                         
     case "$i" in                        
        *.sh)                            
            # Source shell script for speed.
            (                               
                trap - INT QUIT TSTP        
                set start                   
                . $i                        
            )                       
            ;;                      
        *)               
            # No sh extension, so fork subprocess.
            $i start                              
            ;;                                    
    esac                                          
done

(2)于是在板载系统/etc/init.d/目录下创建S41WIFI文件并添加以下内容,然后使用“chmod 777 S41WIFI”命令修改该文件权限。

insmod /usr/xjh_usb-wifi/mt7601Usta.ko
ifconfig wlan0 up
wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -dd &
wpa_cli -i wlan0 status

ifconfig wlan0 up

(3)在板载系统下执行“reboot”重启系统,完全启动后使用“ifconfig”查看,可见wlan0分配的IP地址和interfaces文件配置的一致,而且可以ping通“ 8.8.8.8 ”,但不能ping域名,这是因为之前的DNS配置文件/etc/resolv.conf文件重启后会消失。

Welcome to Buildroot
x210v3 login: root
Password: 
[root@x210v3 ~]# ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 1C:BF:CE:2C:B2:5E  
          inet addr:192.168.1.211  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::1ebf:ceff:fe2c:b25e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:892 errors:0 dropped:0 overruns:0 frame:0
          TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:304603 (297.4 KiB)  TX bytes:2980 (2.9 KiB)

[root@x210v3 ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=116 time=15.673 ms
64 bytes from 8.8.8.8: seq=1 ttl=116 time=25.335 ms
64 bytes from 8.8.8.8: seq=2 ttl=116 time=22.043 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 3 packets received, 25% packet loss
round-trip min/avg/max = 15.673/21.017/25.335 ms
[root@x210v3 ~]# ping www.baidu.com
ping: bad address 'www.baidu.com'
[root@x210v3 ~]#

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

1、确认自制的rootfs正常工作

(1)在板载系统中删除上节的/etc/init.d/S41WIFI文件,修改/etc/network/interfaces文件如下,然后重启开发板。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.141
netmask 255.255.255.0
gateway 192.168.1.1

(2)在uboot控制台依次输入下面指令,修改环境变量bootargs和bootcmd并保存。

setenv bootargs "root=/dev/nfs nfsroot=192.168.1.141:/home/xjh/iot/embedded_basic/rootfs/rootfs_xjh ip=192.168.1.88:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200"
set bootcmd "tftp 30008000 zImage;bootm 30008000"
save

原来的环境变量bootargs和bootcmd的内容如下:

setenv bootargs "console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3"
setenv bootcmd "movi read kernel 30008000; movi read rootfs 30B00000 300000; bootm 30008000 30B00000"

busybox交叉编译

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

(3)挂载参数

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

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

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

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

3、交叉编译iwconfig

(1)源码下载

(2)配置

(3)交叉编译

(4)部署安装

(5)测试

4、交叉编译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.htm

5、在nfs中测试wpa_supplicant使用

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

制作ext2格式的根文件系统镜像_天糊土的博客-CSDN博客_ext2 文件系统制作

最后

以上就是坚强金针菇为你收集整理的将USB-WiFi网卡移植到X210开发板一、移植前的准备工作二、编译驱动源码得到mt7601Usta.ko文件三、配置无线网卡以实现上网功能四、在自己定制的rootfs中移植网卡的全部内容,希望文章能够帮你解决将USB-WiFi网卡移植到X210开发板一、移植前的准备工作二、编译驱动源码得到mt7601Usta.ko文件三、配置无线网卡以实现上网功能四、在自己定制的rootfs中移植网卡所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部