USB接口WIFI(MT7601芯片)的驱动源码移植过程详解(驱动源码编译、wpa_supplicant工具交叉编译、文件系统移植)

news2024/11/16 17:45:59

1、MT7601的移植步骤

(1)确认你的WT7601网卡硬件是正常的;
(2)修改驱动源码,依赖内核源码树编译并加载;
(3)交叉编译wpa_supplicant工具,移植到根文件系统里;
(4)添加驱动和wpa_supplicant工具依赖的配置文件;
(5)在终端手动执行命令进行上网;
(6)在启动脚步中添加配置网卡并上网的命令,实现开机自动连接WIFI上网;

2、网卡硬件的确认

[root@X210 ]# lsusb 
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 002: ID 05e3:0608
[root@X210 ]# lsusb 
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 002: ID 05e3:0608
Bus 001 Device 005: ID 148f:7601

(1)将MT7601WIFI网卡插到开发板的USB口,用lsusb命令可以看到在插网卡后多出来一个usb设备(ID 148f:7601);
(2)其中148f是厂商的ID,表示是哪家厂商生产的芯片;
(3)7601是产品的ID,表示是哪款产品;我们用的是MT7601芯片,MT代表厂商联发科,产品ID是7601;

3、驱动源码移植

3.1、修改源码的Makefile

# 指定WIFI是在什么平台上运行
PLATFORM = SMDK

# 指定内核源码树和编译链
ifeq ($(PLATFORM),SMDK)
LINUX_SRC = /home/daizhixin/S5PV210/kernel/kernel/
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
endif

(1)MT7601驱动源码已经在各种芯片平台上做过移植,需要先选择芯片平台;
(2)设置内核源码树和编译链,这是编译驱动的基础;

3.2、修改USB的VID和PID

/* module table */
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 */
	{USB_DEVICE(0x148f,0x760b)},
#endif /* MT7601U */
	{ }/* Terminating entry */
};

struct usb_driver rtusb_driver = {
		name:RTMP_DRV_NAME,		//用于驱动和设备匹配的名字
		probe:rtusb_probe,
		disconnect:rtusb_disconnect,
		id_table:rtusb_dev_id,	//驱动用来和设备匹配的数组表
	};

(1)在第一步的网卡硬件确认中已经知道了WIFI网卡USB的VID和PID;
(2)rtusb_dev_id数组是此驱动支持的设备的USB的VID和PID,所以rtusb_dev_id数组里必须要配置USB_DEVICE(0x148f,0x7601),也就是必须要定义MT7601U宏;
(3)USB_DEVICE(0x148f,0x7601)是驱动和设备做匹配用的,驱动和设备匹配基本上是两种方式:直接用name去匹配或者在数组中去查找匹配,先匹配name再匹配数组;

3.3、MT7601U的定义

# 驱动的顶层Makefile
ifeq ($(CHIPSET),)
CHIPSET = 7601U
endif

# os/linux/config.mk
ifneq ($(findstring 7601U,$(CHIPSET)),)
WFLAGS += -DMT7601U -DMT7601 -DRLT_MAC -DRLT_RF -DRTMP_MAC_USB -DRTMP_USB_SUPPORT -DRTMP_TIMER_TASK_SUPPORT -DRX_DMA_SCATTER -DVCORECAL_SUPPORT -DRTMP_EFUSE_SUPPORT -DNEW_MBSSID_MODE -DRTMP_INTERNAL_TX_ALC -DCONFIG_ANDES_SUPPORT -DDPD_CALIBRATION_SUPPORT
ifneq ($(findstring $(RT28xx_MODE),AP),)
#WFLAGS += -DSPECIFIC_BCN_BUF_SUPPORT
endif

(1)在顶层Makefile中,有CHIPSET变量,我们在编译时没有传参就默认等于7601U;
(2)在config.mk配置文件中,会判断CHIPSET 的值,如果等于7601U就会在WFLAGS 变量中追加配置,其中就包括"-DMT7601",效果就是定义了MT7601宏;

3.4、开启Wpa_Supplicant支持

# Support Wpa_Supplicant
# i.e. wpa_supplicant -Dralink
HAS_WPA_SUPPLICANT=y

修改os/linux/config.mk配置文件的HAS_WPA_SUPPLICANT配置项,只有开启以后WIFI才能使用Wpa_Supplicant;

3.5、修改WIFI网卡的名字

#ifdef ANDROID_SUPPORT
#define INF_MAIN_DEV_NAME		"wlan"
#define INF_MBSSID_DEV_NAME		"wlan"
#else
#define INF_MAIN_DEV_NAME		"ra"
#define INF_MBSSID_DEV_NAME		"ra"
#endif /* ANDROID_SUPPORT */

在rtmp_def.h中,有两个宏去定义WIFI网卡的名字,也就是将来用ifconfig命令看到的网卡名字, 常用的WIFI网卡名字就是wlan和ra;

4、交叉编译wpa_supplicant工具

参考博客:《wpa_supplicant工具移植到嵌入式设备》;

5、文件系统中配置WIFI网卡

5.1、MT7601网卡的配置文件

#ifdef RTMP_MAC_USB
#define STA_PROFILE_PATH			"/etc/Wireless/RT2870STA/RT2870STA.dat"
#define STA_DRIVER_VERSION			"3.0.0.3"
#ifdef MULTIPLE_CARD_SUPPORT
#define CARD_INFO_PATH			"/etc/Wireless/RT2870STA/RT2870STACard.dat"
#endif /* MULTIPLE_CARD_SUPPORT */
#endif /* RTMP_MAC_USB */

(1)在rt_drv.h文件中,CARD_INFO_PATH宏指定了驱动配置文件的路径;
(2)RT2870STACard.dat配置文件在驱动源码中,将其拷贝到"/etc/Wireless/RT2870STA/RT2870STACard.dat"目录;
(3)如果没有这个配置文件,驱动可以正常安装,"ifconfig -a"可以看到WIFI网卡ra0,但是无法开启WIFI网卡;

5.2、wpa_supplicant的配置文件

5.2.1、配置文件的说明

You will need to make a configuration file, e.g.,
/etc/wpa_supplicant.conf, with network configuration for the networks
you are going to use. Configuration file section below includes
explanation fo the configuration file format and includes various
examples. Once the configuration is ready, you can test whether the
configuration work by first running wpa_supplicant with following
command to start it on foreground with debugging enabled:

wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -d

Assuming everything goes fine, you can start using following command
to start wpa_supplicant on background without debugging:

wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -B

Please note that if you included more than one driver interface in the
build time configuration (.config), you may need to specify which
interface to use by including -D<driver name> option on the command
line. See following section for more details on command line options
for wpa_supplicant.

上面摘抄自wpa_supplicant.conf源码的README说明文件,wpa_supplicant工具在运行时需要依赖"/etc/wpa_supplicant.conf"配置文件;

5.2.2、/etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant

network={
        key_mgmt=WPA-PSK	# 密码管理模式
        ssid="qin_da_mao"	# 要连接的WIFI的名字
        psk="18100170821"	# 要连接的WIFI的密码
}

5.3、/var/run/wpa_supplicant

(1)/var/run/wpa_supplicant是默认的也是推荐使用的存放套接字的目录,wpa_cli将会在尝试和wpa_supplicant连接时使用它;
(2)如果当前文件系统没有这个目录,需要新建,否则执行wpa_supplicant时会报错;

5.4、 添加NDS服务器:/etc/resolv.conf

nameserver 192.168.31.1

(1)/etc/resolv.conf文件是配置DNS服务器的ip地址,关键字是nameserver ,后面跟DNS服务器的ip地址,上面配置了一个DNS服务器ip地址,还可以在后面再设置多个DNS服务器地址;
(2)上面设置的192.168.31.1是路由器的地址,实际上路由器既是网关又是DNS服务器;

6、确定网关IP和DNS服务器的IP

在这里插入图片描述

在这里插入图片描述

(1)先用电脑连接上路由器,在Windows中可以看到连接上的WIFI的信息;
(2)上面是用我的电脑连接上名字为"qin_da_mao"的WIFI,我电脑无线网卡分配到的ip是192.168.31.14,网关和路由器都是192.168.31.1;

7、确认网关支持的IP地址范围

在这里插入图片描述

(1)登录路由器的管理界面:在游览器中输入路由器的IP地址,登录路由器的管理界面,我这里就是192.168.31.1;
(2)在局域网设置界面可以看到路由器中可分配的ip地址范围是192.168.31.5——192.168.31.254;
(3)如果我们给无线网卡静态设置ip,要范围就只能是192.168.31.5——192.168.31.254,并且需要保证这个ip地址在局域网内没有其他设备占用;

8、确认板子是否连接上路由器

在这里插入图片描述
在这里插入图片描述

(1)在路由器的管理界面可以看到已经连接上路由器的设备;在板子的终端用ifconfig命令查看
网卡的ip地址和MAC地址;
(2)两者对照就可以知道板子的无线网卡是否已经连接上路由器;

8、终端手动连接WIFI并上网

8.1、执行的命令

ifconfig //查看当前开启的网卡
insmod mt7601Usta.ko            //安装驱动程序
ifconfig -a //查看当前所以的网卡,确认是否有无线网卡ra0
mkdir -p /var/run/wpa_supplicant //创建目录
ifconfig ra0 up                 //开启无线网卡
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0  	//连接无线网络
wpa_cli -i ra0 status       	//查看连接状态
ifconfig ra0 192.168.31.20 255.255.255.0 192.168.31.1  	//手动配置ip,注意不能和有线网卡在同一网段
route add default gw 192.168.31.1 dev ra0  				//配置网关为ra0
ping 192.168.31.1    			//ping 网关
ping 8.8.8.8        			//ping 外网
ping 192.168.31.14				//ping局域网内的设备,也就是同样连接到路由器的设备,192.168.31.14	是我电脑的ip
ping www.baidu.com   			//验证DNS服务器是否有效

(1)上面配置的硬件条件:板子上有两张网卡,有线网卡和无线网卡(MT7601),其中有线网卡直连电脑(网段:192.168.1.0),无线网卡连接WIFI;
(2)上面是手动设置ra0的IP地址,IP地址要符合路由器分配的IP地址范围;
(3)默认网关要设置成ra0,这样ping外网时才会从ra0发消息;
(4)有线网卡的网络ip是可以手动改的,只有电脑端和板子的有线网卡在同一网段就行;
(5)无线网卡ra0的ip不能随便设置,需要查看路由器支持的IP地址范围;

8.2、命令执行的过程

[root@X210 ]# insmod mt7601Usta.ko //加载驱动
[   42.356187] rtusb init rt2870 --->
[   42.359130] ===>rt2870_probe()!
[   42.361233] --> RTMPAllocAdapterBlock
······
[   42.557017] <===rt2870_probe()!
[   42.561914] usbcore: registered new interface driver rt2870
[root@X210 ]# 
[root@X210 ]# 
[root@X210 ]# ifconfig -a	//确认驱动加载后是否生成ra0网卡
eth0      Link encap:Ethernet  HWaddr 00:09:C0:FF:EC:48  
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::209:c0ff:feff:ec48%2065568/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11814 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9615 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:16755646 (15.9 MiB)  TX bytes:1167002 (1.1 MiB)
          Interrupt:42 Base address:0x4300 

ifb0      Link encap:Ethernet  HWaddr 1A:2C:67:D8:9C:51  
          BROADCAST NOARP  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:32 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ifb1      Link encap:Ethernet  HWaddr DA:10:2D:44:71:98  
          BROADCAST NOARP  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:32 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ip6tnl0   Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          NOARP  MTU:1460  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)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1%2064704/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)

ra0       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)

sit0      Link encap:IPv6-in-IPv4  
          NOARP  MTU:1480  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)
[root@X210 ]# 
[root@X210 ]# mkdir -p /var/run/wpa_supplicant	//wpa_supplicant工具需要的目录
[root@X210 ]# 
[root@X210 ]# ifconfig ra0 up	//开启ra0网卡
[   66.726358] WlanFunCtrl.word = 0xff200003
[   66.729281] MACVersion = 0x76010500
······
[   67.991147] CNTL - All roaming failed, restore to channel 1, Total BSS[00]
[   67.998013] ==>  DMAIdle, GloCfg=0x40000050
[root@X210 ]# 
[root@X210 ]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:09:C0:FF:EC:48  
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::209:c0ff:feff:ec48%2065568/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11925 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9716 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:16788584 (16.0 MiB)  TX bytes:1192732 (1.1 MiB)
          Interrupt:42 Base address:0x4300 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1%2064704/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)

ra0       Link encap:Ethernet  HWaddr 1C:BF:CE:22:D4:AB  
          inet6 addr: fe80::1ebf:ceff:fe22:d4ab%2066432/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25 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:5167 (5.0 KiB)  TX bytes:0 (0.0 B)

[root@X210 ]# 
[root@X210 ]# wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0	//连接WIFI
Successfully initialized wpa_supplicant

[   86.623522] Read: SHARED_KEY_MODE_BASE at this Bss[0] KeyIdx[1]= 0x0 
[   86.628495] Write: SHARED_KEY_MODE_BASE at this Bss[0] = 0x30 
······
[root@X210 ]# 
[root@X210 ]# wpa_cli -i ra0 status 	//查看WIFI是否连接上
bssid=8c:53:c3:e4:34:90
freq=0
ssid=qin_da_mao	//WIFI的名字
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=TKIP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
address=1c:bf:ce:22:d4:ab	//ra0无线网卡的MAC地址
[root@X210 ]# 
[root@X210 ]# ifconfig ra0 192.168.31.20 255.255.255.0 192.168.31.1	//设置ra0的IP地址
ifconfig: SIOCSIFADDR: Invalid argument
[root@X210 ]# 
[root@X210 ]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:09:C0:FF:EC:48  
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::209:c0ff:feff:ec48%2065568/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14440 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11788 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:20185246 (19.2 MiB)  TX bytes:1461692 (1.3 MiB)
          Interrupt:42 Base address:0x4300 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1%2064704/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)

ra0       Link encap:Ethernet  HWaddr 1C:BF:CE:22:D4:AB  
          inet addr:192.168.31.20  Bcast:192.168.31.255  Mask:255.255.255.0
          inet6 addr: fe80::1ebf:ceff:fe22:d4ab%2066432/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:883 errors:0 dropped:0 overruns:0 frame:0
          TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:226057 (220.7 KiB)  TX bytes:4018 (3.9 KiB)

[root@X210 ]# 
[root@X210 ]# route add default gw 192.168.31.1 dev ra0 	//添加默认网关
[root@X210 ]# 
[root@X210 ]# route -n	//查看路由表
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.31.0    0.0.0.0         255.255.255.0   U     0      0        0 ra0
0.0.0.0         192.168.31.1    0.0.0.0         UG    0      0        0 ra0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
[root@X210 ]# 
[root@X210 ]# ping 192.168.31.1    //ping网关
PING 192.168.31.1 (192.168.31.1): 56 data bytes
64 bytes from 192.168.31.1: seq=0 ttl=64 time=3.095 ms
[  148.506432] PeerAddBAReqAction ==> (Wcid = 1)
[  148.509313] BA - PeerAddBAReqAction----> 
[  148.513310] Rcv Wcid(1) AddBAReq
[  148.516520] BARecSessionAdd(1): Idx = 1, BAWinSize(req 64) = 64
[  148.522468] Start Seq = 00000004
[  148.525623] RTMP_TimerListAdd: add timer obj e0bcb214!
[  148.530723] RTMPInitTimer: e0bcb214
[  148.534285] CmdThread : CMDTHREAD_SET_ASIC_WCID : WCID = 1, SetTid  = 10000, DeleteTid = ffffffff.
[  148.543184] MACEntry[1]RXBAbitmap = 0x1. BARecWcidArray=1
[  148.548527] PeerAddBAReqAction(1): TID(0), BufSize(64) <== 
[  148.554082] CntlEnqueueForRecv(): BAR-Wcid(1), Tid (0)
[  148.559167] BAR(1) : Tid (0) - 0004:ffff
[  148.563071] 1-MACValue= e4c3538c,
[  148.567255] 2-MACValue= 19034,
64 bytes from 192.168.31.1: seq=1 ttl=64 time=1.521 ms
64 bytes from 192.168.31.1: seq=2 ttl=64 time=17.692 ms
64 bytes from 192.168.31.1: seq=3 ttl=64 time=2.514 ms
64 bytes from 192.168.31.1: seq=4 ttl=64 time=1.465 ms
64 bytes from 192.168.31.1: seq=5 ttl=64 time=6.807 ms
64 bytes from 192.168.31.1: seq=6 ttl=64 time=3.385 ms
^C
--- 192.168.31.1 ping statistics ---
7 packets transmitted, 7 packets received, 0% packet loss
round-trip min/avg/max = 1.465/5.211/17.692 ms
[root@X210 ]# 
[root@X210 ]# 
[root@X210 ]# ping 8.8.8.8	//ping外网
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=109 time=35.843 ms
64 bytes from 8.8.8.8: seq=1 ttl=109 time=65.865 ms
64 bytes from 8.8.8.8: seq=2 ttl=109 time=35.168 ms
64 bytes from 8.8.8.8: seq=3 ttl=109 time=56.251 ms
64 bytes from 8.8.8.8: seq=4 ttl=109 time=35.594 ms
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 35.168/45.744/65.865 ms
[root@X210 ]# 
[root@X210 ]# ping www.baidu.com 	//却DNS服务器能用
PING www.baidu.com (182.61.200.6): 56 data bytes
64 bytes from 182.61.200.6: seq=0 ttl=49 time=33.525 ms
64 bytes from 182.61.200.6: seq=1 ttl=49 time=30.483 ms
64 bytes from 182.61.200.6: seq=2 ttl=49 time=31.160 ms
64 bytes from 182.61.200.6: seq=3 ttl=49 time=31.757 ms
^C
--- www.baidu.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 30.483/31.731/33.525 ms
[root@X210 ]# 
[root@X210 ]# ping 192.168.31.14 //ping局域网内的其他设置,比如:同样连接上WIFI的电脑
PING 192.168.31.14 (192.168.31.14): 56 data bytes
64 bytes from 192.168.31.14: seq=0 ttl=128 time=2130.325 ms
64 bytes from 192.168.31.14: seq=1 ttl=128 time=1131.656 ms
64 bytes from 192.168.31.14: seq=2 ttl=128 time=131.546 ms
64 bytes from 192.168.31.14: seq=3 ttl=128 time=6.192 ms
64 bytes from 192.168.31.14: seq=4 ttl=128 time=2.392 ms
64 bytes from 192.168.31.14: seq=5 ttl=128 time=19.488 ms
64 bytes from 192.168.31.14: seq=6 ttl=128 time=3.778 ms
64 bytes from 192.168.31.14: seq=7 ttl=128 time=4.579 ms
64 bytes from 192.168.31.14: seq=8 ttl=128 time=3.876 ms

9、实现开机自动连接WIFI

9.1、自动加载网卡驱动和连接WIFI

insmod /usr/lib/modules/mt7601Usta.ko  
mkdir -p /var/run/wpa_supplicant
ifconfig ra0 up   
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0
wpa_cli -i ra0 status

(1)在/etc/init.d/rcS文件中添加上面的脚本,在开机时会被自动执行,实现网卡驱动加载和WIFI连接;
(2)对rcs文件不熟悉的参考博客:《嵌入式系统开发——文件系统中inittab文件、rcS文件、fstab文件、profile文件详解》;

9.2、实现静态分配IP地址

auto ra0
iface ra0 inet static
address 192.168.31.21
netmask 255.255.255.0
gateway 192.168.31.1

在/etc/network/interfaces文件中添加网卡的配置,注意这个配置需要重启网卡才能生效;

9.3、实现dhcp动态分配IP地址

9.3.1、udhcpc命令实现

udhcpc -i ra0

在rcS脚本中添加上面的命令;

9.3.2、用/etc/network/interfaces文件实现

auto ra0
iface ra0 inet dhcp

推荐

给大家推荐一个学校嵌入式知识的网站,博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站,网站里有C语言、Linux等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022 年时间序列分析最顶流的 Python 库

时间序列分析是一种强大的工具&#xff0c;可用于从数据中提取有价值的信息并对未来事件进行预测。它可用于识别趋势、季节性模式和变量之间的其他关系。时间序列分析还可用于预测未来事件&#xff0c;例如销售、需求或价格变动。 如果你在 Python 中处理时间序列数据&#xf…

数据库实验三:完整性语言实验

实验三 完整性语言实验 实验 3.1 实体完整性实验 1.实验目的 ​ 掌握实体完整性的定义和维护方法。 2.实验内容和要求 ​ 定义实体完整性&#xff0c;删除实体完整性。能够写出两种方式定义实体完整性的SQL语句&#xff1b;创建表时定义实体完整性、创建表后定义实体完整性…

C++ Reference: Standard C++ Library reference: Containers: map: map: key_comp

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/key_comp/ 公有成员函数 <map> std::map::key_comp key_compare key_comp() const;返回键比较对象 返回容器用于比较键的比较对象的副本。map对象的比较对象在构造&#xff08;construction&#xff…

kubernetes 挂载传播

kubernetes 挂载传播 kubernetes 的 mountPropagation 翻译成中文就是挂载传播。挂载传播提供了共享卷挂载的能力, 它允许在同一个 Pod, 甚至同一个节点内, 在多个容器之间共享卷的挂载。 说白了就是在容器或 host 内的挂载目录中 再 mount 了一个别的挂载。 kubernetes 中 卷…

第18章 条件概率

第18章 条件概率 18.1蒙特霍尔困惑 对于上一章的三个门的问题&#xff0c;有一个漏洞。假设参赛者选择门A且门B后有一只山羊&#xff0c;刚好产生3个结果&#xff1a; 以上结果出现的概率分别是1/18,1/18,1/9。 在这些结果中&#xff0c;只有最后一个结果(C,A,B)&#xff0c…

Redis常见面试题(三)

目录 1、Redis String值最大存储多少? 2、Redis事务有什么用? 3、Redis事务相关的命令有哪几个? 4、Redis事务是原子性的吗? 5、Redis持久化有什么用? 6、Redis有哪几种持久化方式? 7、Redis持久化方式如何选择? 8、如何保证Redis中的数据都是热点数据? 9、Red…

vue前后端分离项目打包成app,部署成移动端

将vue项目打包成app,在手机上运行。 1. vue打包 npm run build 先将vue的前端项目打包成dist文件夹 2. 安装hbuilderX Hbuilder官网地址 3. hbuilderX 1&#xff09;新建项目 我是vue的&#xff0c;所以直接选择的h5app&#xff0c;然后起个名字&#xff0c;选择路径。 2…

微服务实用篇6-分布式搜索elasticsearch篇2

今天我们继续学习分布式搜索引擎elasticsearch&#xff0c;今天主要学习四个模块&#xff0c;分别为DSL查询文档&#xff0c;搜索结果处理&#xff0c;RestClient查询文档&#xff0c;还有最好演示一个旅游案例。下面开始今天的学习吧。 目录 一、DSL查询文档 1.1、DSL查询分…

Hadoop学习----软件安装

Hadoop源码下载重新编译 软件下载&#xff1a;https://hadoop.apache.org/releases.html 建议是下载源码包。 源码包和官方编译安装包有什么不一样呢&#xff1f; 正常情况下&#xff0c;非生产环境直接使用官方编译安装包即可&#xff0c;但是官方提供的安装包不支持本地库。…

ANTLR4入门(二):图示说明eclipse安装Antlr4IDE插件的过程

如果你能正常通过Eclipse Market找到antlr4的插件并正常安装&#xff0c;可以忽略本文。 如果不能&#xff0c;那多半是因为网络问题导致安装Antlr4IDE插件时无法下载文件造成的。我就遇到了这个问题&#xff0c;无法下载的原因很复杂&#xff0c;我不想去深究了&#xff0c;我…

WPF/XAML关于x:key和x:name的区别,全面解读超详细

x:key和x:name的区别 x:Keyx:Name用于xaml Resources&#xff0c;ResourceDictionary用在ResourceDictionary以外任何地方使用key访问xaml指定对象使用name访问xaml对象标识资源创建和引用&#xff0c;存在于 ResourceDictionary 中的元素唯一标识对象元素&#xff0c;以便于从…

【Spring】SpringCloud

目录 一、SpringCloud 二、微服务介绍 1.系统架构演变 1.1 单体应用架构 1.2 垂直应用架构 1.3 分布式架构 1.4 SOA架构&#xff08;面向服务的架构&#xff09; 1.5 微服务架构&#xff08;服务的原子化拆分&#xff09; 2.微服务架构介绍 2.1 问题&#xff1a; 2.2…

与新手一起快速了解「什么是次世代」?

次世代&#xff08;英文&#xff1a;Next Generation&#xff09;&#xff0c;源自日本语&#xff0c;即下一个时代&#xff0c;未来的时代。与传统游戏相比&#xff0c;次世代游戏是把次世代游戏开发技术融入到现代游戏之中&#xff0c;通过增加模型的面数和贴图的数据量并使用…

JDK8系列之使用Function函数式接口

一、函数式接口是jdk8的新特性之一&#xff0c;函数式接口是只包含一个抽象方法声明的接口。按分类主要分为四大接口类型: Function、Consumer、Predicate、Supplier。 接口参数返回值说明Supplier<T>无T供给型&#xff0c;无参&#xff0c;返回一个指定泛型的对象Consu…

设计解谜游戏的30堂课

设计解谜游戏的30堂课 文章目录1.什么是Eureka Moment&#xff1f;2.谜题与幽默是同构的3.最大限度提高Sparkle4.避免无意义的谜题5.惊喜是Sparkle的重要源泉6.有趣的事实是惊喜的源泉7.尤里卡时刻并不是自豪8.不同解密者所寻求的解密体验是不尽相同的9.尤里卡是可以分享的10.创…

OVS-DPDK

要使用 ovs-dpdk&#xff0c;需要在node上构建 DPDK 并使用相应的 DPDK flag重新构建 ovs。 OVS-DPDK需要从源码编译&#xff0c;因为高度依赖内核等所在机器的环境&#xff0c;并需要配置很多参数以达到高性能。这意味着很难提供一个ovs-dpdk docker镜像来满足所有情况。OVS-D…

推荐系统学习笔记-基于图的模型

由来 基于图的模型&#xff08; graph-based model &#xff09;是推荐系统中的重要内容。其实&#xff0c;很多研究人员把基于邻域的模型也称为基于图的模型&#xff0c;因为可以把基于邻域的模型看做基于图的模型的简单形式。 在研究基于图的模型之前&#xff0c;首先需要将…

毫米波传感器原理介绍:角度估计

前边两篇博文从距离和速度两个维度进行了介绍&#xff0c;本篇将沿着第三个维度&#xff0c;角度进行分析&#xff0c;这也是毫米波传感器原理介绍的最后一篇理论基础。还是老规矩&#xff0c;我们先把公式列出来。 假设雷达两个接收天线之间的距离为d&#xff0c;θ 是物体相…

IS-95前向链路系统误码率matlab仿真,包括扩频调制,匹配滤波,RAKE接收

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 前向链路指由基站发往移动台的无线通信链路&#xff0c;也称作下行链路。IS-95系统前向链路最多可以有64个同时传输的信道&#xff0c;它们是在PN序列上再采用正交的Walsh码进行区分的信道&#…

网上书店系统/书店管理系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…