Linux WIFI 驱动实验

news2024/12/23 10:56:24

直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81

本文仅作为个人笔记使用,方便进一步记录自己的实践总结。

WIFI 的使用已经很常见了,手机、平板、汽车等等,虽然可以使用有线网络,但是有时候很多设备存在布线困难的情况,此时 WIFI 就是一个不错的选择。正点原子 I.MX6U-ALPHA 开发板支持 USB 和 SDIO 这两种接口的 WIFI,本章我们就来学习一下如何在 I.MX6U-ALPHA 开发板上使用 USB 和 SDIO 这两种 WIFI。

WIFI 驱动添加与编译

正点原子的 I.MX6U-ALPHA 开发板目前支持两种接口的 WIFI:USB 和 SDIO,其中 USB WIFI 使用的芯片为RTL8188EUS或 RTL8188CUS,SDIO 接口的WIFI 使用芯片为 RTL8189FS,也叫做 RTL8189FTV。这两个都是 realtek 公司出品的 WIFI 芯片。WIFI 驱动不需要我们编写,因为 realtek 公司提供了 WIFI 驱动源码,因此我们只需要将 WIFI 驱动源码添加到 Linux 内核中,然后通过图形化界面配置,选择将其编译成模块即可。正点原子I.MX6U-ALPHA开发板默认会赠送一个RTL8188EUS/CUS USB WIFI,如图70.1.1所示:

另外,正点原子还有一款采用 RTL8189FTV 芯片的 SDIO WIFI,如图 70.1.2 所示:

向 Linux 内核添加 WIFI 驱动

1、rtl81xx 驱动文件浏览

WIFI 驱动源码已经放到了开发板光盘中,路径为:1、例程源码->5、模块驱动源码->1、RTL8XXX WIFI 驱动源码-> realtek。realtek 目录下就存放着 RTL8188EUS 和 RTL8189FS 这两个芯片的驱动源码,如图 70.1.1.1 所示:

其中 rtl8188EUS 下存放着 RTL8188EUS 驱动,RTL8189FS 存放着 RTL8189FS/FTV 的驱动文件,rtl8192CU 下存放着 RTL8188CUS 和 RTL8192CU 的驱动,注意!正点原子 ALPHA 开发板赠送的 USB WIFI 模块分为 RTL8188EUS 和 RTL8188CUS 两种,这两种 USB WIFI 驱动是不一样的!Kconfig 文件是 WIFI 驱动的配置界面文档,这样可以通过 Linux 内核图形化配置界面来选择是否编译 WIFI 驱动,Kconfig 文件内容如下所示:

Makefile 文件内容如下所示

2、删除 linux 内核自带的 RTL8192CU 驱动

本教程所使用的 linux 内核已经自带了 RTL8192CU/8188CUS 驱动,但是经过测试,linux内核自带的驱动不稳定!因此不建议大家使用。最好使用图 70.1.1.1 中我们提供的 rtl8192CU 驱动。在编译之前要先将内核自带的驱动屏蔽掉,否则可能导致编译出错,方法很简单。打开drivers/net/wireless/rtlwifi/Kconfig,找到下面所示内容然后删除掉:

将示例代码 70.1.1.2 中的 1~11 行内容从 drivers/net/wireless/rtlwifi/Kconfig 中删除掉。

继续打开 drivers/net/wireless/rtlwifi/Makefile,找到下面这样:

将示例代码 70.1.1.3 中这一行从 drivers/net/wireless/rtlwifi/Makefile 中屏蔽掉,至此,linux内核自带的RTL8192CU/8188CU 驱动就屏蔽掉了。

3、将 rtl81xx 驱动添加到 Linux 内核中

将 realtek 整个目录拷贝到 ubuntu 下 Linux 内核源码中的 drivers/net/wireless 目录下,此目录下存放着所有WIFI 驱动文件。拷贝完成以后此目录如图 70.1.1.1 所示:

图 70.1.1.1 中框选出来的就是我们刚刚拷贝进来的 realtek 目录。

4、修改 drivers/net/wireless/Kconfig

打开 drivers/net/wireless/Kconfig,在里面加入下面这一行内容:

source "drivers/net/wireless/realtek/Kconfig"

添加完以后的 Kconfig 文件内容如下所示:

第 287 行就是添加到 drivers/net/wireless/Kconfig 中的内容,这样 WIFI 驱动的配置界面才会出现在 Linux 内核配置界面上。

5、修改 drivers/net/wireless/Makefile

打开 drivers/net/wireless/Makefile,在里面加入下面一行内容:

obj-y += realtek/

修改完以后的 Makefile 文件内容如下所示:

第 65 行,编译 realtek 中的内容,至此,Linux 内核要修改的内容就全部完成了。

配置 Linux 内核

在编译 RTL8188 和 RTL8189 驱动之前需要先配置 Linux 内核。

1、配置 USB 支持设备

配置路径如下:

2、配置支持 WIFI 设备

配置路径如下:

配置完如图 70.1.2.1 所示:

3、配置支持 IEEE 802.11

配置路径如下:

配置完如图 70.1.2.2 所示:

配置好以后重新编译一下 Linux 内核,得到新的 zImage,后面使用新编译出来的 zImage 启动系统。

编译 WIFI 驱动

执行“make menuconfig”命令,打开 Linux 内核配置界面,然后按照如下路径选择将 rtl81xx驱动编译为模块:

配置结果如图 70.1.3.1 所示:

图 70.1.3.1 中的配置界面就是我们添加进去的 WIFI 配置界面,选中“rtl8189fs/ftv sdio wifi”、“rtl8188eus usb wifi”和“Realtek 8192C USB WiFi”,将其编译为模块。执行如下命令编译模块:

make modules -j12 //编译驱动模块

编译完成以后就会在 rtl8188EUS、rtl8189FS 和 rtl8192CU 文件夹下分别生成 8188eu.ko、8189fs.ko 和 8192cu.ko 这三个.ko 文件,结果如图 70.1.3.2 所示:

图 70.1.3.2 中的 8188eu.ko、8189fs.ko 和 8192cu.ko 就是我们需要的 RTL8188EUS、RTL8189FS 和 RTL8188CUS/8192CU 的 驱 动 模 块 文 件 , 将 这 三 个 文 件 拷 贝 到rootfs/lib/modules/4.1.15 目录中,命令如下:

sudo cp 8189fs.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf

sudo cp 8188eu.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf

sudo cp 8192cu.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf

因为我们重新配置过Linux内核,因此也需要使用新的zImage 启动,将新编译出来的zImage镜像文件拷贝到 Ubuntu 中的 tftpboot 目录下,命令如下:

cp arch/arm/boot/zImage /home/zuozhongkai/linux/tftpboot/ -f

然后重启开发板!!!

驱动加载测试

1、RTL8188 USB WIFI 驱动测试

重启以后我们试着加载一下 8188eu.ko、8189fs.ko 和 8192cu.ko 这三个驱动文件,首先测试一下 RTL8188 的驱动文件,将 RTL8188 WIFI 模块插到开发板的 USB HOST 接口上。进入到目录 lib/modules/4.1.15 中,输入如下命令加载 8188eu.ko 这个驱动模块:

depmod //第一次加载驱动的时候需要运行此命令

modprobe 8188eu.ko //RTL8188EUS 模块加载 8188eu.ko 模块

modprobe 8192cu.ko //RTL8188CUS 模块加载 8192cu.ko 模块

如果驱动加载成功的话如图 70.1.4.1 所示:

输入“ifconfig -a”命令,查看 wlanX(X=0….n)网卡是否存在,一般都是 wlan0,除非板子上有多个 WIFI 模块在工作,结果如图 70.1.4.2 所示:

从图 70.1.4.2 中可以看出,当前开发板有一个叫做“wlan0”的网卡,这个就是 RTL8188 对应的网卡。

不管是 RTL8188 USB WIFI 还是 RTL8189 SDIO WIFI,驱动测试都工作正常,但是我们得能联网啊,不能联网的话要他有什么用呢?WIFI 要想联网,需要移植一些其他第三方组件,否则无法连接路由器,接下来我们就移植这些第三方组件。

wireless tools 移植

wireless tools 是操作 WIFI 的工具集合,包括以下工具:

①、iwconfig:设置无线网络相关参数。

②、iwlist:扫描当前无线网络信息,获取 WIFI 热点。

③、iwspy:获取每个节点链接的质量。

④、iwpriv:操作 WirelessExtensions 特定驱动。

⑤、ifrename:基于各种静态标准命名接口。

我们最常用的就是 iwlist 和 iwconfig 这两个工具,首先获取到相应的源码包,这里我们已经放到了开发板光盘中,路径为:1、例程源码-》7、第三方库源码-》iwlist_for_visteon-master.tar.bz2。

将 iwlist_for_visteon-master.tar.bz2 拷贝到 Ubuntu 中前面创建的 tool 目录下,拷贝完成以后将其解压,生成 iwlist_for_visteon-master 文件夹。进入到 iwlist_for_visteon-master 文件夹里面,打开Makefile 文件,修改 Makefile 中的 CC、AR 和 RANLIB 这三个变量,修改后的值如图 70.2.1.1所示:

图 70.2.1.1 中 CC、AR 和 RANLIB 这三个变量为所使用的编译器工具,将其改为我们所使用的 arm-linux-gnueabihf-xxx 工具即可。修改完成以后就可以使用如下命令编译:

make clean //先清理一下工程

make //编译

编译完成以后就会在当前目录下生成 iwlist、iwconfig、iwspy、iwpriv、ifrename 这 5 个工具,另外还有很重要的 libiw.so.29 这个库文件。将这 5 个工具拷贝到开发板根文件系统下的/usr/bin 目录中,将 libiw.so.29 这个库文件拷贝到开发板根文件系统下的/usr/lib 目录中,命令如下:

sudo cp iwlist iwconfig iwspy iwpriv ifrename /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f

sudo cp libiw.so.29 /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -f

拷贝完成以后可以测试 iwlist 是否工作正常。

wireless tools 工具测试

这里我们主要测试一下 iwlist 工具,要测试 iwlist 工具,先测试一下 iwlist 工具能不能工作,输入 iwlist 命令,如果输出图 70.2.2.1 所示信息就表明 iwlist 工具工作正常。

正式测试 iwlist 之前得先让 WIFI 模块工作起来。RTL8188 或 RTL8189 都可以,以 RTL8188 USB WIFI 为例,先将 RTL8188 WIFI 模块插到开发板的 USB HOST 接口上,然后加载 RTL8188驱动模块 8188eu.ko,驱动加载成功以后在打开 wlan0 网卡,命令如下:

modprobe 8188eu.ko //加载 RTL8188 驱动模块

ifconfig wlan0 up //打开 wlan0 网卡

wlan0 网卡打开以后就可以使用 iwlist 命令查找当前环境下的 WIFI 热点信息,也就是无线路由器,输入如下命令:

iwlist wlan0 scan

上述命令就会搜索当前环境下的所有 WIFI 热点,然后将这些热点的信息信息答应出来,包括 MAC 地址、ESSID(WIFI 名字)、频率、速率,信号质量等等,如图 70.2.2.2 所示:

在扫描到的所有热点信息中找到自己要连接的 WIFI 热点,比如我要连接到“ZZK”这个热点上,这个 WIFI 热点信息如图 70.2.2.3 所示:

可以看出,“ZZK”这个热点信息已经被扫描到了,因此可以连接。要想连接到指定的 WIFI热点上就需要用到 wpa_supplicant 工具,所以接下来就是移植此工具。

wpa_supplicant 移植

1、openssl 移植

wpa_supplicant 依赖于 openssl,因此需要先移植 openssl,openssl 源码已经放到了开发板光盘中,路径为:1、例程源码-》7、第三方库源码-》openssl-1.1.1d.tar.gz。将 openssl 源码压缩包拷贝到 Ubuntu 中前面创建的 tool 目录下,然后使用如下命令将其解压:

tar -vxzf openssl-1.1.1d.tar.gz

解压完成以后就会生成一个名为 openssl-1.1.1d 的目录,然后在新建一个名为“openssl”的文件夹,用于存放 openssl 的编译结果。进入到解压出来的 openssl-1.1.1d 目录中,然后执行如下命令进行配置:

./Configure linux-armv4 shared no-asm --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/openssl

CROSS_COMPILE=arm-linux-gnueabihf-

上述配置中“linux-armv4”表示 32 位 ARM 凭条,并没有“linux-armv7”这个选项。

CROSS_COMPILE 用于指定交叉编译器。配置成功以后会生成 Makefile,输入如下命令进行编译:

make

make install

编译安装完成以后的 openssl 目录内容如图 70.3.1.1 所示:

图 70.3.1.1 中的 lib 目录是我们需要的,将 lib 目录下的 libcrypto 和 libssl 库拷贝到开发板根文件系统中的/usr/lib 目录下,命令如下:

sudo cp libcrypto.so* /home/zuozhongkai/linux/nfs/rootfs/lib/ -af

sudo cp libssl.so* /home/zuozhongkai/linux/nfs/rootfs/lib/ -af

2、libnl 库移植

在编译 libnl 之前先安装 biosn 和 flex,命令如下:

sudo apt-get install bison

sudo apt-get install flex

wpa_supplicant 也依赖于 libnl,因此还需要移植一下 libnl 库,libnl 源码已经放到了开发板光盘中,路径为:1、例程源码-》7、第三方库源码-》libnl-3.2.23.tar.gz。将 libnl 源码压缩包拷贝到 Ubuntu 中前面创建的 tool 目录下,然后使用如下命令将其解压:

tar -vxzf libnl-3.2.23.tar.gz

得到解压完成以后会得到 libnl-3.2.23 文件夹,然后在新建一个名为“libnl”的文件夹,用于存放 libnl 的编译结果。进入到 libnl-3.2.23 文件夹中,然后执行如下命令进行配置:

./configure --host=arm-linux-gnueabihf --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/libnl/

--host 用于指定交叉编译器的前缀,这里设置为“arm-linux-gnueabihf”,--prefix 用于指定编译结果存放目录,这里肯定要设置为我们刚刚创建的 libnl 文件夹。配置完成以后就可以执行如下命令对 libnl 库进行编译、安装:

make -j12 //编译

make install //安装

编译安装完成以后的 libnl 目录如图 70.3.2.1 所示:

我们需要图 70.3.2.1 中 lib 目录下的 libnl 库文件,将 lib 目录下的所有文件拷贝到开发板根文件系统的/usr/lib 目录下,命令如下所示:

sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -rf

3、wpa_supplicant 移植

接下来移植 wpa_supplicant,wpa_supplicant 源码我们已经放到了开发板光盘中,路径为:

1、例程源码->7、第三方库源码->wpa_supplicant-2.7.tar.gz,将 wpa_supplicant-2.7.tar.gz 拷贝到Ubuntu 中,输入如下命令进行解压:

tar -vxzf wpa_supplicant-2.7.tar.gz

解压完成以后会得到 wpa_supplicant-2.7 文件夹,进入到此文件夹中,wpa_supplicant-2.7 目录内容如图 70.3.3.1 所示:

进入到图 70.3.3.1 中的 wpa_supplicant 目录下,然后进行配置,wpa_supplicant 的配置比较特殊,需要将 wpa_supplicant 下的 defconfig 文件拷贝一份并重命名为.config,命令如下:

cd wpa_supplicant/

cp defconfig .config

完成以后打开.config 文件,在里面指定交叉编译器、openssl、libnl 库和头文件路径,设置如下:

CC 变量用于指定交叉编译器,这里就是 arm-linux-gnueabihf-gcc,CFLAGS 指定需要使用的库头文件路径,LIBS 指定需要用到的库路径。编译 wap_supplicant 的时候需要用到 openssl 和libnl 库,所以示例代码 70.3.3.1 中指定了这两个的库路径和头文件路径。上述内容在.config 中的位置见图 70.3.3.2:

.config 文件配置好以后就可以编译 wpa_supplicant 了,使用如下命令编译:

export PKG_CONFIG_PATH=/home/zuozhongkai/linux/IMX6ULL/tool/libnl/lib/pkgconfig: $PKG_CONFIG_PATH //指定 libnl 库 pkgconfig 包位置

make -j12 //编译

首先我们使用 export 指定了 libnl 库的 pkgconfig 路径,环境变量 PKG_CONFIG_PATH 保存着 pkgconfig 包路径。在 tool/libnl/lib/下有个名为“pkgconfig”的目录,如图 70.3.3.3 所示:

编译 wpa_supplicant 的时候是需要指定 libnl 的 pkgconfig 路径,否则会提示“libnl-3.0”或者“libnl-3.0.pc”找不到等错误。编译完成以后就会在本目录下生成 wpa_supplicant 和 wpa_cli这两个软件,如图 70.3.3.3 所示:

将图 70.3.3.3 中的 wpa_cli 和 wpa_supplicant 这两个文件拷贝到开发板根文件系统的/usr/bin目录中,命令如下:

sudo cp wpa_cli wpa_supplicant /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f

拷贝完成以后重启开发板!输入“wpa_supplicant -v”命令查看一下 wpa_supplicant 版本号,如果 wpa_supplicant 工作正常的话就会打印出版本号,如图 70.3.3.4 所示:

从图 70.3.3.4 可以看出, wpa_supplicant 的版本号输出正常,说明 wpa_supplicant 移植成功,接下来就是使用 wpa_supplicant 将开发板的 WIFI 链接到路由器上,实现 WIFI 上网功能。

WIFI 联网测试

不管是 USB WIFI 还是 SDIO WIFI,联网的操作步骤如下所示:

①、插上 WIFI 模块,如果是板子集成的就不需要这一步。如果是 SDIO WIFI 的话确保 WIFI所使用的 SDIO 接口没有插其他的模块,比如 SD 卡,防止其他模块对 SDIO WIFI 造成影响。

②、加载 RTL8188 或者 RTL8189 驱动模块。

③、使用 ifconfig 命令打开对应的无线网卡,比如 wlan0 或 wlan1……

④、无线网卡打开以后使用 iwlist 命令扫描一下当前环境下的 WIFI 热点,一来测试一下WIFI 工作是否正常。二来检查一下自己要连接的 WIFI 热点能不能扫描到,扫描不到的话肯定就没法连接了。

当上述步骤确认无误以后就可以使用 wpa_supplicant 来将 WIFI 连接到指定的热点上,实现联网功能。

RTL8188 USB WIFI 联网测试

注意!RTL8188EUS 请使用 8188eu.ko 驱动,RTL8188CUS 请使用 8192cu.ko 驱动!

首先测试一下 RTL8188 USB WIFI 联网测试,确保 RTL8188 能扫描出要连接的 WIFI 热点,比如我要连接“ZZK”这个 WIFI,iwlist 扫描到的此 WIFI 热点信息如图 70.4.1.1 所示:

要连接的 WIFI 热点扫描到以后就可以连接了,先在开发板根文件系统的/etc 目录下创建一个名为“wpa_supplicant.conf”的配置文件,此文件用于配置要连接的 WIFI 热点以及 WIFI 秘密,比如我要连接到“ZZK”这个热点上,因此 wpa_supplicant.conf 文件内容如下所示:

第 4 行,ssid 是要连接的 WIFI 热点名字,这里我要连接的是“ZZK”这个 WIFI 热点。

第 5 行,psk 就是要连接的 WIFI 热点密码,根据自己的实际情况填写即可。

注意,wpa_supplicant.conf 文件对于格式要求比较严格,“=”前后一定不能有空格,也不要用 TAB 键来缩进,比如第 4 行和 5 行的缩进应该采用空格,否则的话会出现 wpa_supplicant.conf文件解析错误!最重要的一点!wpa_supplicant.conf 文件内容要自己手动输入,不要偷懒复制粘贴!!!

wpa_supplicant.conf 文件编写好以后再在开发板根文件系统下创建一个“/var/run/wpa_supplicant”目录,wpa_supplicant 工具要用到此目录!命令如下:

mkdir /var/run/wpa_supplicant -p

一切准备好以后就可以使用 wpa_supplicant 工具让 RTL8188 USB WIFI 连接到热点上,输入如下命令:

wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &

当 RTL8188 连接上 WIFI 热点以后会输出如图 70.4.1.2 所示的信息:

从图 70.4.1.2 可以看出,当 RTL8188 连接到 WIFI 热点上以后会输出“wlan0: CTRL-EVENT-CONNECTED”字样。接下来就是最后一步了,设置 wlan0 的 IP 地址,这里使用 udhcpc 命令从路由器申请 IP 地址,输入如下命令:

udhcpc -i wlan0 //从路由器获取 IP 地址

IP 地址获取成功以后会输出如图 70.4.2.2 所示信息:

从图 70.4.2.2 可以看出,wlan0 的 IP 地址获取成功,IP 地址为 192.168.1.126。可以输入如下命令查看一下 wlan0 网卡的详细信息:

ifconfig wlan0

结果如图 70.4.2.3 所示:

可以通过电脑 ping一下 wlan0 的 192.168.1.126 这个IP 地址,如果能 ping 通就说明 RTL8188 USB WIFI 工作正常。也可以直接在开发板上使用 wlan0 来 ping 一下百度网站,输入如下命令:

ping -I 192.168.1.126 www.baidu.com

-I 是指定执行 ping 操作的网卡 IP 地址,我们要使用 wlan0 去 ping 百度网站,因此要通过 “-I”指定 wlan0 的 IP 地址。如果 WIFI 工作正常的话就可以 ping 通百度网站,如图 70.4.2.4所示:

至此 RTL8188 USB WIFI 我们就完全驱动起来了,大家就可以使用 WIFI 来进行网络通信了。

至此,如何在 I.MX6U-ALPHA 开发板上使用 WIFI 就全部讲解完了,包括 USB WIFI 和SDIO WIFI。其实不管是在 I.MX6U 上,还是在其他的 SOC 上,USB WIFI 和 SDIO WIFI 的驱动都是类似的,大家可以参考本章教程讲 RTL8188、RTL8189 这两款 WIFI 的驱动移植到芯片或者开发板上。

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

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

相关文章

Windows10的MinGW安装和VS Code配置C/C++编译环境

1. MinGW下载安装 首先需要说明的是VS Code是一个编辑器,而不是编译器。‌ 编辑器和编译器是有很明显的区别 1.1 编辑器和编译器区别 编辑器‌是一种用于编写和编辑文本的应用软件,主要用于编写程序的源代码。编辑器提供基本的文本编辑功能,…

面试题:Redis(三)

1. 面试题 背景 问题,上面业务逻辑你用java代码如何写? 2. 缓存双写一致性谈谈你的理解? 3. 双检加锁策略 多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它。 其他的线程走到这…

内核编译 设备驱动 驱动程序

内核编译 一、内核编译的步骤 编译步骤: (linux 内核源码的顶层目录下操作 ) 1. 拷贝默认配置到 .config cp config_mini2440_td35 .config 2. make menuconfig 内核配置 make menuconfig 3. make uImage make u…

docker-compose无法切换用户

问题描述 jupyter:image: flink:1.19-pyprivileged: trueuser: rootports:- "9999:8888"volumes:- /data/docker_data/jupyter:/workcommand: sh -c "cd / && jupyter notebook --ip 0.0.0.0 --port 8888 --allow-root --NotebookApp.passwordsha1:658…

循环神经网络-LSTM网络

文章目录 前言一、LSTM网络简介二、LSTM的门结构1.遗忘门2.输入门3.输出门 三、总结 前言 循环神经网络(Recurrent Neural Networks,RNN)是一种特殊的神经网络,具有能够处理序列数据的能力,然而,RNN在处理…

团员申请书怎么写?这里归纳了一些模板

团员申请书怎么写?随着社会的快速发展和时代的进步,越来越多的青年人意识到加入团组织的重要性。作为新时代的青年,我们应当积极响应国家的号召,参与到团组织的建设中来。而想要成为共青团员,首先需要撰写一份规范的团…

新手一次过软考高级(系统架构设计师)秘笈,请收藏!

软考系统架构设计师是高级科目之一,也是比较有难度的科目,但是只要你把该掌握的知识掌握熟练,技能水平达到要求,那还是考可以拿下证书的。 系统架构设计师适合人群:适合熟悉开发过程与方法、数据库、信息安全的技术人员…

NLP: SBERT介绍及sentence-transformers库的使用

1. Sentence-BERT Sentence-BERT(简写SBERT)模型是BERT模型最有趣的变体之一,通过扩展预训练的BERT模型来获得固定长度的句子特征,主要用于句子对分类、计算两个句子之间的相似度任务。 1.1 计算句子特征 SBERT模型同样是将句子标记送入预训练的BERT模型…

OmniH2O——通用灵巧且可全身远程操作并学习的人形机器人(其前身H2O是HumanPlus的重要参考)

前言 由于我司一直在针对各个工厂、公司、客户特定的业务场景,做解决方案或定制开发,所以针对每一个场景,我们都会反复考虑用什么样的机器人做定制开发 于此,便不可避免的追踪国内外最前沿的机器人技术进展,本来准备…

数据库管理-第249期 23ai:全球分布式数据库-请求路由与查询过程(20241008)

数据库管理249期 2024-10-08 数据库管理-第249期 23ai:全球分布式数据库-请求路由与查询过程(20241008)1 客户端应用请求路由1.1 分片键1.2 Oracle连接驱动 2 查询过程和查询协调器2.1 指定一致性级别2.2 高可用与性能 总结 数据库管理-第249…

拍立淘API接口以图搜商品列表功能实现技术分享item_search_img|返回商品列表商品id商品价格url

开发背景 在电商平台的快速发展中,用户对于商品搜索的效率和准确性提出了越来越高的要求。传统的基于关键词的搜索方式,虽然在一定程度上满足了用户的需求,但在面对复杂的商品信息和多样化的用户搜索意图时,仍存在诸多局限性。为…

PyTorch搭建GNN(GCN、GraphSAGE和GAT)实现多节点、单节点内多变量输入多变量输出时空预测

目录 I. 前言II. 数据集说明III. 模型3.1 GCN3.2 GraphSAGE3.3 GAT IV. 训练与测试V. 实验结果 I. 前言 前面已经写了很多关于时间序列预测的文章: 深入理解PyTorch中LSTM的输入和输出(从input输入到Linear输出)PyTorch搭建LSTM实现时间序列…

IO相关,标准输入输出及错误提示

一、IO简介 1.1 IO的过程 操作系统的概念:向下统筹控制硬件,向上为用户提供接口。 操作系统的组成 内核 外壳(shell) linux的五大功能:进程管理、内存管理、文件管理、设备管理、网络管理。 最早接触的IO&#xf…

01背包,CF 1974E - Money Buys Happiness

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1974E - Money Buys Happiness 二、解题报告 1、思路分析 问我们能够到达…

docker简述

1.安装dockers,配置docker软件仓库 安装,可能需要开代理,这里我提前使用了下好的包安装 启动docker systemctl enable --now docker查看是否安装成功 2.简单命令 拉取镜像,也可以提前下载使用以下命令上传 docker load -i imag…

深度学习笔记(持续更新)

注:本文所有深度学习内容都是基于PyTorch,PyTorch作为一个开源的深度学习框架,具有可以动态计算图、拥有简洁易用的API、支持GPU加速等特点,在计算机视觉、自然语言处理、强化学习等方面有广泛应用。 使用matplotlib绘图&#xff…

Linux 常用命令详解,线上问题排查必备

comm 比较文件行 comm 是 Linux 系统下的用于比较两个已排序文件的命令行工具。主要用于找出文件之间的差异或相同之处,例如两个文件中相同的行、仅在第一个文件中的行以及仅在第二个文件中的行。 基本语法 comm [OPTION] FILE1 FILE2可选参数OPTION如下&#xf…

图像分类-demo(Lenet),tensorflow和Alexnet

目录 demo(Lenet) 代码实现基本步骤: TensorFlow 一、核心概念 二、主要特点 三、简单实现 参数: 模型编译 模型训练 模型评估 Alexnet model.py train.py predict.py demo(Lenet) PyTorch提供了一个名为“torchvision”的附加库,其中包含…

芯课堂 | FatFs文件系统的移植及应用指南

1、FatFs文件系统简介 FatFs是用于小型嵌入式系统的通用FAT/exFAT文件系统模块。FatFs模块是按照ANSI C(C89)编写的,与磁盘控制层完全分离。因此,它独立于平台和存储设备,具有良好的硬件平台独立性。它可以集成到资源有…

这个问题做项目的时给某些客户普及过,这里再给你普及一下

有些因素不是地理概念,没错!但与地理有关!可以通过地理位置将他们链接起来,再结合其它业务数据,完成数据分析!例如百度地图会将:餐饮、文化、交通、住宿、甚至价格、天气与位置关联分析&#xf…