Linux驱动.之MT7601,USB-WiFi网卡移植到X210开发板,wpa_supplicant配置工具的使用(一)

一、移植前

1、下载与解压无线网卡MT7601U驱动源码压缩包

DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
解压后有如下文件
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

下载如下开源工具openssl是wpa_supplicant需要的库

openssl-0.9.8za        
wpa_supplicant-2.5
openssl-0.9.8za.tar.gz  
wpa_supplicant-2.5.tar.gz

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

还没有插入USB-WIFI时显示的内容

[root@x210v3 ~]# lsusb
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 002: ID 05e3:0608

#插入usb-wifi时显示的内容

[  259.833929] usb 1-1.1: New USB device found, idVendor=148f, idProduct=7601
[  259.840211] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  259.847456] usb 1-1.1: Product: 802.11 n WLAN
[  259.852241] usb 1-1.1: Manufacturer: MediaTek
[  259.856163] usb 1-1.1: SerialNumber: 1.0

Bus 001 Device 003: ID 148f:7601,多了这个信息,如下

[root@x210v3 ~]# lsusb  
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 002: ID 05e3:0608
Bus 001 Device 003: 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/Makefile文件。

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

//注释掉以下这些代码

#PLATFORM: Target platform
//省略部分代码
#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

#实测得知,就算把交叉编译工具链export出来,写成下面这样也会提示找不到arm-linux-gcc,很奇怪。

#CROSS_COMPILE = arm-linux- 

#要写成下面两种方式

#CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-linux-

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文件,如下所示,即可把无线网卡的名字改为“wlan”。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支持
wpa_supplicant用于支持WEP、WPA/WPA2和WAPI无线协议和加密认证,这里省略其介绍。

(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_Supplicant25 # i.e. wpa_supplicant -Dralink26 HAS_WPA_SUPPLICANT=y29 # Support Native WpaSupplicant for Network Maganger30 # i.e. wpa_supplicant -Dwext31 HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

(2)继续搜索“SMDK”,大概在1089行处添加内容。

#因为有相关代码如下,所以修改1090行内容

# 300 ifeq ($(HAS_WPA_SUPPLICANT),y)
# 301 WFLAGS += -DWPA_SUPPLICANT_SUPPORT
# 302 ifeq ($(HAS_NATIVE_WPA_SUPPLICANT_SUPPORT),y)
# 303 WFLAGS += -DNATIVE_WPA_SUPPLICANT_SUPPORT
# 304 endif
# 305 endif

修改与添加内容

1090         EXTRA_CFLAGS := $(WFLAGS)  
1091 endif
1092 
1093 ifeq ($(PLATFORM),CAVM_OCTEON)
1094         EXTRA_CFLAGS := $(WFLAGS) -mabi=64 $(WFLAGS)
1095 export CFLAGS

5、编译驱动源码得到mt7601Usta.ko文件
(1)在x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/下执行“make clen”,然后执行“make”,将在该目录下的os/linux/目录中生成mt7601Usta.ko文件。

执行make时出现错误提示如下:

/bin/sh: arm-linux-gcc: command not found
make[2]: *** [/home/xjh/iot/embedded_basic/x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../os/linux/rt_profile.o] Error 127
make[1]: *** [_module_/home/xjh/iot/embedded_basic/x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux] Error 2
make[1]: Leaving directory `/home/xjh/iot/embedded_basic/kernel/x210_kernel'
make: *** [LINUX] Error 2
xjh@ubuntu:~/iot/embedded_basic/x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913$

这是因为我忘记把交叉编译工具链导出到PATH了。

#下面的PATH没有/usr/local/arm/arm-2009q3/bin这个项目,因此编译报错。
xjh@ubuntu:~/iot/embedded_basic/x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913$ echo $PATH
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin:/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
xjh@ubuntu:~/iot/embedded_basic/x210_usb-wifi/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913$ 
因此我参考博客linux环境变量设置方法,采用永久性修改方式更新PATH这个环境变量。但修改之后执行sudo make时还是提示错误找不到arm-linux-gcc。尝试修改CROSS_COMPILE这个变量的写法,发现写成“CROSS_COMPILE = arm-linux-”时会报错,而写成下面两者之一就不会报错,这是为啥?我明明已经把交叉编译工具链导出到PATH中。 

得到ko文件

mt7601Usta.ko

#使用“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)

将mt7601Usta.ko文件复制到根文件系统目录下。

三、在Linux系统中移植无线网卡

1、安装无线网卡驱动mt7601Usta.ko文件
(1)首先将上面生成的mt7601Usta.ko文件复制到板载系统目录中
(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

然后安装无线网卡驱动,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.0inet6 addr: fe80::209:c0ff:feff:ec48/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:9603 errors:0 dropped:0 overruns:0 frame:0TX packets:5241 errors:0 dropped:0 overruns:0 carrier:0collisions: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.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:16436  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions: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:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

2、开启无线网卡并设置IP地址
(1)首先使用命令“ifconfig wlan0 up”开启无线网卡。此时会报错,提示错误信息如下:

[  389.564686] --->RTUSBCancelPendingBulkInIRP
[  389.567999] Bulk In Failed. Status=-2, BIIdx=0x0, BIRIdx=0x0, actual_length= 0x0
[  389.574884] CmdThread : CMDTHREAD_RESET_BULK_IN === >
[  389.580419] unlink cmd rsp urb
[  389.587734] <---RTUSBCancelPendingBulkInIRP
[  389.590575] <---MlmeThread
[  389.600986] CMDTHREAD_RESET_BULK_IN: Cannot do bulk in because flags(0x1080042) on !
[  389.607868] CmdThread : CMDTHREAD_RESET_BULK_IN <===
[  389.612781] <---RTUSBCmdThread
[  389.615341] <---RtmpTimerQThread
[  389.653298] !!! rt28xx init fail !!!
[  389.655948] rt28xx_open return fail!
ifconfig: SIOCSIFFLAGS: Operation not permitted

这是因为板载系统没有/etc/Wireless/RT2870STA/RT2870STA.dat文件。该文件位于无线网卡驱动源码…/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/目录下。我们首先把这个文件拷贝放进板载系统的/etc/Wireless/RT2870STA/目录中(这个目录要自己先创建)。

[root@x210v3 /]# mkdir -p /etc/Wireless/RT2870STA
[root@x210v3 /]# cd /etc/Wireless/RT2870STA/
[root@x210v3 RT2870STA]# cp /mnt/RT2870STA.dat ./[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地址。

查看无线路由器网络信息,可知其连接的无线路由器的地址为192.168.31.1。

IPv4 地址:	192.168.31.196  
IPv4 DNS 服务器:	101.198.198.198 
物理地址(MAC):	34-2E-B7-04-4D-4F

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

[root@x210v3 ~]# ifconfig wlan0 192.168.31.211[root@x210v3 ~]# ifconfigwlan0     Link encap:Ethernet  HWaddr 1C:BF:CE:2C:B2:5E  inet addr:192.168.31.211  Bcast:192.168.31.255  Mask:255.255.255.0inet6 addr: fe80::1ebf:ceff:fe2c:b25e/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:2194 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:635361 (620.4 KiB)  TX bytes:0 (0.0 B)

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

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

(1)再次确定板载系统/etc/Wireless/RT2870STA/RT2870STA.dat文件要存在。
(2)在板载系统中创建并编辑/etc/wpa_supplicant.conf文件(注意删掉注释)。

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

(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 statusRX 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.31.1),但是因为还没有设置网关,所以不能ping通外部网络(比如ping 8.8.8.8)。我们可以通过在命令行输入下面命令来设置网关信息。

route add default gw 192.168.31.1 dev wlan0

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

ping 外网测试

[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

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

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.1auto wlan0
iface wlan0 inet static
address 192.168.31.211
netmask 255.255.255.0
gateway 192.168.31.1

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

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

S01logging* S20urandom* S50sshd* rcK*
S10mdev* S40network* S99qttest* rcS*

rcS*文件如下,回去执行启动文件,所以,我们建立个文件,来自动启动

case "$i" in                        *.sh)                            # Source shell script for speed.(                               trap - INT QUIT TSTP        set start                   . $i                        )                       ;;                      *)               # No sh extension, so fork subprocess.$i start                              ;;            

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

insmod /usr/xjh_usb-wifi/mt7601Usta.ko
ifconfig wlan0 upifconfig wlan0 192.168.31.211wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -dd &
wpa_cli -i wlan0 statusifconfig wlan0 up
route add default gw 192.168.31.1 dev wlan0

抄的一个博主的,说为啥这些设置不起效,dns不起效,什么的,这种太简单了,这里不说了,件/etc/resolv.conf,这几个文件,可以自己搜索一下,没什么难度。

总结
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

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

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

相关文章

一种WLAN用户综合认证系统及其方法(本人专利号 201110408124.X)

一种WLAN用户综合认证系统及其方法(本人专利号 201110408124.X&#xff09; 本发明公开了一种WLAN用户综合认证系统及其方法&#xff0c;涉及移动通信技术领域。本系统包括WLAN终端与AP子系统和外部认证中心&#xff1b;设置有认证协议分析引擎单元和用户综合控制单元&#xff…

c/c++内存管理(详解) + new与delete的用法及底层

1:c/c内存分布情况 1.1:c/c内存的分布图 1.2:每个区域的用途及不同类型变量存储在那个区 1.3:例题讲解 2:c动态内存管理方式(new delete) 2.1:new的语法 2.2:delete的语法 3:operator new函数与operator delete函数 4:new与delete的实现原理 5:定位new表达式初识 6:mallo…

python+selenium实现自动联网认证,并实现断网重连

pythonselenium实现自动联网认证&#xff0c;并实现断网重连 echo off python “E:\autoD\auto_login.py” 要使自动登录脚本在系统重启后自动运行&#xff0c;你可以使用Windows的任务计划程序来设置。以下是详细的步骤&#xff1a; 1. 保存脚本 首先&#xff0c;将你的Py…

【高分系列卫星简介——高分二号卫星(GF-2)】

高分二号卫星&#xff08;GF-2&#xff09; 高分二号&#xff08;GF-2&#xff09;卫星是中国自主研制的首颗空间分辨率优于1米的民用光学遥感卫星&#xff0c;具有亚米级空间分辨率、高定位精度和快速姿态机动能力等特点&#xff0c;达到了国际先进水平。以下是对高分二号卫星…

对Spring-AI系列源码的讲解

前言 今天&#xff0c;我们将开启对Spring-AI系列源码的讲解。请大家不急不躁&#xff0c;我会逐步深入&#xff0c;每次专注于一个知识点&#xff0c;以防让人感到困惑。 首先&#xff0c;源码的讨论自然离不开自动装配。有人可能会问&#xff0c;之前已经讲解过这个内容了&…

【JavaSE】八种基本数据类型及包装类

数据类型字节数位数值范围包装类默认值整型byte18-128&#xff0c;127Byte0short216&#xff0c;Short0int432&#xff0c;Integer0long864&#xff0c;Long0L浮点型float432Float0.0fdouble864Double0.0d布尔型boolean18true falseBooleanfalse字符型char2160&#xff0c;Char…

C++编程语言:基础设施:异常处理(Bjarne Stroustrup)

第 13 章 异常处理(Exception Handling) 目录 13.1 错误处理(Error Handling) 13.1.1 异常(Exceptions) 13.1.2 传统错误处理(Traditional Error Handling) 13.1.3 探索(Muddling Through) 13.1.4 异常的替代观点(Alternative Views of Exceptions) 13.1.4.1 异步…

DAY78服务攻防-数据库安全RedisCouchDBH2database未授权访问CVE 漏洞

知识点&#xff1a; 1、数据库-Redis-未授权RCE&CVE 2、数据库-Couchdb-未授权RCE&CVE 3、数据库-H2database-未授权RCE&CVE 前置知识 1、复现环境&#xff1a;Vulfocus(官方在线的无法使用&#xff0c;需要自己本地搭建) 官方手册&#xff1a;https://fofapr…

老牛码看JAVA行业现状

一、坏消息深化与反思&#xff1a; 1、技术瓶颈与框架局限&#xff1a;尽管低代码平台崭露头角&#xff0c;为开发效率带来新气象&#xff0c;但其全面普及尚需时日&#xff0c;Java技术栈的进化似乎陷入了暂时的停滞。开发者们渴望突破&#xff0c;却发现传统框架与模式已难以…

博图V16升级V19前后内存对比

升级V19后固件版本更新到4.6 存储存储空间拓展50% 下图是官方解释 打开博图查看前后对比

[笔记]某变频器,功能列表及参数表

产品代号&#xff1a;INVT GOODDRIVE&#xff0c;这家公司我的产品我似乎在特检院看到过&#xff1f;或者在某个地铁建设工地看到过。是深圳的。 1.产品功能点&#xff1a; 变频锥形电机控制、抱闸转矩验证&#xff1f;抱闸反馈零位检测行程限位超载防护轻载升速&#xff08;…

【超详细】基于YOLOv8训练无人机视角Visdrone2019数据集

主要内容如下&#xff1a; 1、Visdrone2019数据集介绍 2、下载、制作YOLO格式训练集 3、模型训练及预测 4、Onnxruntime推理 运行环境&#xff1a;Python3.8&#xff08;要求>3.8&#xff09;&#xff0c;torch1.12.0cu113&#xff08;要求>1.8&#xff09;&#xff0c…

8. 防火墙

8. 防火墙 (1) 防火墙的类型和结构 防火墙的类型和结构可以根据其在网络协议栈中的过滤层次和实现方式进行分类。常见的防火墙类型包括: 包过滤防火墙:工作在网络层(OSI模型的第3层),主要检查IP包头的信息,如源地址、目的地址、端口号等。电路级网关防火墙:工作在会话层…

idea2021git从dev分支合并到主分支master

1、新建分支 新建一个名称为dev的分支&#xff0c;切换到该分支下面&#xff0c;输入新内容 提交代码到dev分支的仓库 2、切换分支 切换到主分支&#xff0c;因为刚刚提交的分支在dev环境&#xff0c;所以master是没有 3、合并分支 点击push&#xff0c;将dev里面的代码合并到…

对时间序列SOTA模型Patch TST核心代码逻辑的解读

前言 Patch TST发表于ICLR23&#xff0c;其优势在于保留了局部语义信息&#xff1b;更低的计算和内存使用量&#xff1b;模型可以关注更长的历史信息&#xff0c;Patch TST显著提高了时序预测的准确性&#xff0c;Patch可以说已成为时序模型的基本操作。我在先前的一篇文章对P…

【掘金量化使用技巧】用日线合成长周期k线

掘金API中的接口最长的周期是‘1d’的&#xff0c;因此周线/月线/年线等数据需要自己进行合成。 基本思路 用日线合成长周期的k线只需要确定好合成的周期以及需要的数据即可。 周期: 一般行情软件上提供年k、月k、周k&#xff0c;我也选择年、月、周再加一个季度频率。 数据:…

Linux:终端(terminal)与终端管理器(agetty)

终端的设备文件 打开/dev目录可以发现其中有许多字符设备文件&#xff0c;例如对于我的RedHat操作系统&#xff0c;拥有tty0到tty59&#xff0c;它们是操作系统提供的终端设备。对于tty1-tty12使用ctrlaltF*可以进行快捷切换&#xff0c;下面的命令可以进行通用切换。 sudo ch…

GPU加速时代:如何用CuPy让你的Python代码飞起来?

你是不是也有这样的感受:明明写的Python代码很简洁,用NumPy处理数据也很方便,可是一跑起来就慢得像乌龟?尤其是当你面对庞大的数据集时,光是等结果出来,就已经耗掉大半天了。其实,我以前也是这么干的,直到我发现了CuPy,一个能让NumPy飞速跑起来的GPU加速神器。 你…

10. 排序

一、排序的概念及引用 1. 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录…

基于SpringBoot的医院管理系统【附源码】

基于SpringBoot的医院管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4系统概要设计 4.1概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 医生模块的实现 5.1.…