当前位置: 首页 > news >正文

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

相关文章:

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 m…...

ChatGPT 在国内使用的方法

AI如今很强大&#xff0c;聊聊天、写论文、搞翻译、写代码、写文案、审合同等等&#xff0c;ChatGPT 真是无所不能~ 作为一款出色的大语言模型&#xff0c;ChatGPT 实现了人类般的对话交流&#xff0c;最主要是能根据上下文进行互动。 接下来&#xff0c;我将介绍 ChatGPT 在国…...

思通数科开源产品:免费的AI视频监控卫士安装指南

准备运行环境&#xff1a; 确保您的服务器或计算机安装了Ubuntu 18.04 LTS操作系统。 按照产品要求&#xff0c;安装以下软件&#xff1a; - Python 3.9 - Java JDK 1.8 - MySQL 5.5 - Redis 2.7 - Elasticsearch 8.14 - FFmpeg 4.1.1 - RabbitMQ 3.13.2 - Minio &#xff08;…...

阿里HPN-用于大型语言模型训练的数据中心网络

阿里巴巴HPN:用于大型语言模型训练的数据中心网络 探索大规模语言模型训练新方法&#xff1a;阿里巴巴HPN数据中心网络论文。 摘要 本文介绍了阿里云用于大型语言模型(LLM)训练的数据中心网络HPN。由于LLM和一般云计算之间的差异(例如&#xff0c;在流量模式和容错性方面)&…...

re题(27)BUUFCTF-[MRCTF2020]Transform

BUUCTF在线评测 (buuoj.cn) 先到ida&#xff0c;先看一下字符串 找到主函数 int __cdecl main(int argc, const char **argv, const char **envp) {char Str[104]; // [rsp20h] [rbp-70h] BYREFint j; // [rsp88h] [rbp-8h]int i; // [rsp8Ch] [rbp-4h]sub_402230(argc, argv…...

偶数、奇数、整数与指数

引言 在前面的课程中&#xff0c;我们已经学习了 Python 的基本输入输出、数据类型及其转换、顺序结构、分支结构、循环结构、循环控制语句、字符串类型、列表类型、元组类型、字典类型、集合类型、函数的定义与使用、函数调用与作用域、函数的高级应用、质数、倍数与余数。本课…...

关于c#中异步async和await的理解

之前给大家介绍了所谓异步编程的用法&#xff0c;但是没有细致的理解到&#xff0c;今天想和大家一起探讨一下; 前文&#xff1a; C#笔记14 异步编程Async&#xff0c;await&#xff0c;task类-CSDN博客 异步的起初 应用程序会启动一个进程&#xff0c;一个进程可以有很多…...

mysql等保数据库命令

mysql数据库命令 默认安装位置&#xff1a;C:\Program Files\MySQL\MySQL Server 8.0\bin select version() from dual; desc mysql.user; 查看表中有哪些列 1、SELECT user, host, authentication_string, account_locked ,password_lifetime FROM mysql.user; 查询用户表…...

云平台在大规模设备管理和数据分析中的作用

在当代数字化转型的浪潮中&#xff0c;云平台作为信息技术基础设施的核心组件&#xff0c;扮演着无可替代的角色&#xff0c;尤其在大规模设备管理和数据分析领域&#xff0c;其重要性和影响力日益凸显。本文旨在深入探讨云平台如何通过其独特的优势&#xff0c;促进数据的高效…...

数据结构-树和二叉树

树 和 二叉树 1.树的概念 树 tree 是n(n>0)个节点的有限集 在任意的一个非空树中 (1)有且仅有一个特定的被称为 根(root) 的节点 (2)当n>1时, 其余的节点可分为m(m>0)个互不相交的有限集T1, T2, T3, .... …...

树和二叉树的概念以及结构

一起加油学数据结构 目录 树的概念以及结构 树的概念 树的相关概念 树的表示 二叉树的概念以及结构 二叉树的概念 特殊的二叉树 二叉树的性质 二叉树的存储结构 树的概念以及结构 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09…...

c语言习题

第三章 数据类型、运算符与表达式 一 单项选择题 1&#xff0e;下面四个选项中&#xff0c;均不是 c 语言关键字的选项是&#xff08; &#xff09;。 A) define IF Type B) getc char printf C) include scanf case D…...

Python 低层多线程接口_thread的用法

_thread是python标准库中的一个低层多线程API&#xff0c;可以在进程中启动线程来处理任务&#xff0c;并且提供了简单的锁机制来控制共享资源的同步访问。本文就_thread模块的用法和特性做个简单的演示。 文章目录 一、进程和线程的区别二、_thread模块的用法2.1 派生线程2.2…...

flutter基础 --dart语法学习

由于想要写一款性能较好,但是又可以一套代码多个平台运行的客户端app,所以选择了flutter 就去看了官方文档,大体发现flutter使用的dart语言和java和js差不多,感觉就是缝合怪。 Dart 是一种面向对象的编程语言&#xff0c;语法上与 Java、JavaScript 等语言有一些相似之处&…...

新手必看:一步步教你绑定常见邮箱到第三方应用(如何绑定QQ、163、Hotmail、Gmail等邮箱)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 邮箱绑定 📒📫 QQ邮箱📫 163邮箱📫 Hotmail邮箱📫 Gmail邮箱📫 Yahoo邮箱📫 iCloud邮箱📫 其他邮箱⚓️ 相关链接 ⚓️📖 介绍 📖 你是否曾经为绑定第三方邮箱而感到困惑?你不是一个人!许多人在尝试将QQ邮…...

mac 怎么查看CPU核数

在 macOS 系统中&#xff0c;可以通过以下几种方法查看 CPU 核心数&#xff1a; 1. 使用“关于本机”查看 点击左上角的苹果图标&#xff08;&#xff09;。选择“关于本机”。在弹出的窗口中&#xff0c;系统会显示 Mac 的基本信息&#xff0c;包括 CPU 的类型和核心数。比…...

Vue生命周期;Vue路由配置;vue网络请求;vue跨域处理

一&#xff0c;Vue生命周期 <template><div > <h1 click"changeText">{{ info }}</h1></div> </template><script> export default {name: HelloWorld,data(){return{info:"介绍组件生命周期"}},methods:{chang…...

汽车电子电气架构从12V提升至48V,带来那些好处? 包括那些改变?

标签&#xff1a; 汽车电子电气架构&#xff1b; 从12V提升至48V&#xff1b; 汽车电子电气架构从12V提升至48V&#xff0c;带来那些好处&#xff1f; 包括那些改变&#xff1f; 将传统汽车的电子电气架构电压从12V提升至48V&#xff0c;既有显著的优势&#xff0c;也需要对车…...

springboot实战学习笔记(2)

目录 1、手动创建springboot工程&#xff0c;选择Maven构建。 2、Maven生成的&#xff0c;可能需要再main目录下new一个resources目录&#xff0c;再在其下目录new一个配置文件。 3、 pom文件中让当前的工程继承父工程依赖&#xff1a;、删去无用依赖。 4、引入后端环境所需要的…...

Python练习宝典:Day 1 - 选择题 - 基础知识

目录 一、踏上Python之旅二、Python语言基础三、流程控制语句四、序列的应用 一、踏上Python之旅 1.想要输出 I Love Python,应该使用()函数。 A.printf() B.print() C.println() D.Print()2.Python安装成功的标志是在控制台(终端)输入python/python3后,命令提示符变为: A.&…...

macOS平台(intel)编译MAVSDK安卓平台SO库

1.下载MAVSDK: git clone https://github.com/mavlink/MAVSDK.git --recursive 2.编译liblzma 修改CMakeLists.txt文件增加C与CXX指令-fPIC set(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}") set(CMAKE_CXX_FLAGS "-fPIC ${CMAKE_CXX_FLAGS}") 修改如下:…...

set的相关函数(3)

3.删除 //删除 /* int main() {set<int> s;s.insert({ 2,4,5,2,6,8,10,15 });for (auto e : s){cout << e << " ";}cout << endl;//删除最小的元素就删除排序后的首元素s.erase(s.begin());for (auto e : s){cout << e << "…...

Python MongoDB

MongoDB 是目前最流行的 NoSQL 数据库之一&#xff0c;使用的数据类型 BSON&#xff08;类似 JSON&#xff09;。 MongoDB 数据库安装与介绍可以查看我们的 MongoDB 教程。 PyMongo Python 要连接 MongoDB 需要 MongoDB 驱动&#xff0c;这里我们使用 PyMongo 驱动来连接。 …...

安国U盘量产工具系列下载地址

来源地址&#xff08;访问需要科学工具&#xff09;&#xff1a;AlcorMP (Последняя версия ALCOR U2 MP v23.08.07.00.H) – [USBDev.ru] 版本列表&#xff1a; AlcorMP&#xff08;最新版本的 ALCOR U2 MP v23.08.07.00.H&#xff09; AlcorMP是在Alcor Mic…...

2024年最新版Vue3学习笔记

本篇文章是记录来自尚硅谷禹神2023年课程的学习笔记&#xff0c;不得不说禹神讲的是真的超级棒&#xff01; 文章目录 创建Vue3工程main.ts文件解析初始化项目写一个简单的效果 Vue3核心语法setup函数setup和选项式的区别setup语法糖指定组件名称 响应式数据ref函数定义基本类…...

FX5 CPU模块和以太网模块的以太网通信功能

FX5 CPU模块和以太网模块的以太网通信功能的概要如下所示。 CPU模块的内置以太网端口的通信规格如下所示。 1、与MELSOFT的直接连接 不使用集线器&#xff0c;用1根以太网电缆直接连接以太网搭载模块与工程工具(GX Torks3)。无需设定IP地址&#xff0c;仅连接目标指定即可进行…...

【结构型】树形结构的应用王者,组合模式

目录 一、组合模式1、组合模式是什么&#xff1f;2、组合模式的主要参与者&#xff1a; 二、优化案例&#xff1a;文件系统1、不使用组合模式2、通过组合模式优化上面代码优化点&#xff1a; 三、使用组合模式有哪些优势1、统一接口&#xff0c;简化客户端代码2、递归结构处理方…...

C++——求3*3矩阵对角元素之和。

没注释的源代码 #include <iostream> using namespace std; int main() { int a[3][3],i,j,sum0; cout<<"请输入a组中的元素:"<<endl; for(i0;i<2;i) { for(j0;j<2;j) { cin>>a[i][j]…...

nodejs基于vue电子产品商城销售网站的设计与实现 _bugfu

目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式&#xff0c;开发软件有很多种可以用&#xff0c;本次开发用到的软件是vscode&#xff0c;用到的数据库是…...

GO Ants 学习

文章目录 主要特性安装基本用法1. 创建协程池并提交任务2. 带返回值的任务提交3. 自定义协程池的参数4. 获取协程池状态 应用场景优势资源释放性能对比总结 ants 是一个高性能的 Go 语言协程池库&#xff0c;专注于有效地管理 Go 协程的数量。它通过复用协程减少了创建和销毁协…...