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

RK356x bsp 5 - 海华AW-CM358SM Wi-Fi/Bt模组调试记录

文章目录

  • 1、环境介绍
  • 2、目标
  • 3、海华AW-CM358SM
    • 3.1、基本信息
    • 3.2、支持SDIO3.0
    • 3.3、电气特性
  • 4、适配流程步骤
  • 5、SDIO控制器适配
    • 5.1、sdio dts配置
    • 5.2、验证
  • 6、Wi-Fi 适配
    • 6.1、wifi dts配置
    • 6.2、驱动移植
      • 6.2.1、kernel menuconfig
      • 6.2.2、传统驱动移植
      • 6.2.3、RK SDK WIFI/BT驱动独立编译
    • 6.3、Wi-Fi 功能验证
      • 6.3.1、加载驱动
      • 6.3.2、STA模式测试
      • 6.3.3、AP测试
  • 7、蓝牙适配
    • 7.1、bt dts配置
    • 7.2、驱动移植
    • 7.3、蓝牙功能验证
      • 7.3.1、使能蓝牙设备
      • 7.3.2、扫描外设
      • 7.3.3、开发板发送文件给安卓手机

1、环境介绍

硬件:飞凌ok3568-c开发板

软件:原厂rk356x sdk

2、目标

调试海华AW-CM358SM WIFI/BT模组,可以正常上网、使用蓝牙。

3、海华AW-CM358SM

3.1、基本信息

  • 主芯片:NXP的88W8987
  • Wi-Fi接口:SDIO
  • BT接口:UART

3.2、支持SDIO3.0

3.3、电气特性

AW-CM358SM的VDDIO为1.8V:

所以,RK3568的SDIO接口的工作电压也要是1.8V,请检查设备树电源域&pmu_io_domains节点vccio6是否配置为1.8v(同时,SDIO3.0模式必须为1.8v):

4、适配流程步骤

  1. 配置设备树,让SDIO控制器工作。
  2. 配置设备树,让SDIO控制器可以发现WIFI/BT模组。
  3. Wi-Fi适配:配置设备树,移植设备驱动。
  4. 验证Wi-Fi功能。
  5. 蓝牙适配:配置设备树。
  6. 验证蓝牙功能。

5、SDIO控制器适配

现在先解决“适配流程步骤”的第1,第2点。即让SDIO控制器工作,且可以扫到WIFI卡。

5.1、sdio dts配置

从下面两幅原理图可以得出:

  • WIFI模组的WIFI_REG_ON引脚接到了RK3568的GPIO3_D4。
  • WIFI模组的SDIO接口接到了RK3568的SDMMC2接口。

设备树配置如下:

/* WL_REG_ON 由 sdio_pwrseq 节点进行管理控制 */
&sdio_pwrseq {compatible = "mmc-pwrseq-simple";pinctrl-names = "default";pinctrl-0 = <&wifi_enable_h>;/** On the module itself this is one of these (depending* on the actual card populated):* - SDIO_RESET_L_WL_REG_ON* - PDN (power down when low)*/post-power-on-delay-ms = <200>;/* 这里配置的是WL_REG_ON引脚	*/reset-gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>;	
};&pinctrl {sdio-pwrseq {wifi_enable_h: wifi-enable-h {/* 这里配置的是WL_REG_ON引脚	*/rockchip,pins = <3 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;	};};
};/* SDIO接口Wi-Fi专用配置:SDIO接口节点 */
&sdmmc2 {max-frequency = <150000000>;	/* sdio接口的最大频率,可调整 */supports-sdio;bus-width = <4>;				/* 4线模式,可调整1线模式 */disable-wp;cap-sd-highspeed;cap-sdio-irq;keep-power-in-suspend;mmc-pwrseq = <&sdio_pwrseq>;	/* WL_REG_ON 管理 */non-removable;pinctrl-names = "default";pinctrl-0 = <&sdmmc2m0_bus4 &sdmmc2m0_cmd &sdmmc2m0_clk>;sd-uhs-sdr104;					/* 支持SDIO3.0 */status = "okay";
};

5.2、验证

  1. 查看 log:
dmesg | grep "fe000000"

dmesg | grep "mmc3"

  1. 查看/sys/bus/mmc/devices/目录下的sdio设备:
ls /sys/bus/mmc/devices/

mmc3:0001对应的基址是fe000000,可以回到设备树查看,就是sdmmc2接口:

如果没有如上对应的log输出,/sys/bus/mmc/devices/目录下也没出现对应的sdio设备,说明sdio控制器没有扫到wifi卡,请重新检查设备树配置和对应PIN脚的电平状态及CLK频率是否正确。

6、Wi-Fi 适配

现在SDIO控制器可以识别到WiFi卡,但是还没有wlan节点出来,因为还没有驱动。

6.1、wifi dts配置

从下面原理图可以得出:

  • WIFI模组的WIFI_HOST_WAKE_B引脚接到了RK3568的GPIO0_D4。

设备树继续添加wlan节点,同时配置pinctrl节点:

&wireless_wlan {compatible = "wlan-platdata";rockchip,grf = <&grf>;pinctrl-names = "default";pinctrl-0 = <&wifi_host_wake_irq>;/* 注意:如果排查发现Wi-Fi模块没有32.768K波形,且硬件上是由* RK PMU供给的,则打开下面的clock属性,按照实际使用的PMU型号填写,* 否在SDIO/Wi-Fi无法使用.** 海华AW-CM358SM使用的是外部晶振,无需打开clock属性。*///clocks = <&rk809 1>; //如果使用RK809,只能配置一个//clocks = <&hym8563>; //如果使用hym8563,只能配置一个//clock-names = "ext_clock";/* 按实际名字填写(但这里的名字我随便写的,听说海华和正基是兼容的,所以填了这个名字) */wifi_chip_type = "ap6256";/* 这里配置的是WIFI_HOST_WAKE_B引脚	*/WIFI,host_wake_irq = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;status = "okay";
};&pinctrl {...wireless-wlan {wifi_host_wake_irq: wifi-host-wake-irq {/* 这里配置的是WIFI_HOST_WAKE_B引脚	*/rockchip,pins = <0 RK_PD4 RK_FUNC_GPIO &pcfg_pull_down>;};};
};

其实实测发现,对于海华AW-CM358SM来说,不配置这个&wireless_wlan节点最终也会有wifi节点出来。

6.2、驱动移植

6.2.1、kernel menuconfig

6.2.2、传统驱动移植

  1. 进入内核驱动目录,将驱动文件复制进来:
cd <sdk>/kernel/drivers/net/wireless
cp nxp ./

  1. 修改Kconfig:
vi Kconfig
/* Kconfig */...config MXMWIFIEXtristate "NXP MxM WiFi Driver"depends on CFG80211helpThis driver is multi-chip-multi-interface driver(indicating Multi-Chip x Multi-Interface support) based onNXP 802.11n/ac chipsets. If you choose to build it as a module,it will be build 2 modules moal.ko and mlan.ko....

  1. 修改Makefile:
vi Makefile
/* Makefile */...obj-$(CONFIG_MXMWIFIEX)                += nxp/...

  1. 修改defconfig:

  1. 在sdk根目录执行如下命令编译内核:
./build.sh kernel

至此,驱动已经编译完成。但是驱动的安装需要固件,可以自行通过文件系统overlay的方式将固件放到/lib/firmware/目录下。

6.2.3、RK SDK WIFI/BT驱动独立编译

RK SDK把wifibt的编译独立了出来,所以这里我们体验一下这种方法。注意!经过实测,要先按照上面将驱动移植进内核,才可以使用下面的独立编译。

  1. /external/rkwifibt/目录结构说明:

  • firmware目录:包含各个厂家WiFiBT的firmware文件
  • drivers目录:包含各个厂家的WiFiBT驱动
  • bin目录:主要是原厂预置的一些二进制文件
  • sh目录:主要是开机的WIFIBT的加载脚本,及测试脚本等

我们暂时只关注firmware和drivers目录。

  1. 进入drivers目录,创建aw-cm358sm文件夹,将驱动文件复制进来:
cd <sdk>/external/rkwifibt/drivers
mkdir aw-cm358sm
cd aw-cm358sm
cp nxp/* ./

  1. 进入firmware目录,创建azurewave文件夹。进入azureware目录,继续创建AW-CM358SM文件夹,将固件拷贝到该文件夹。
cd <sdk>/external/rkwifibt/firmware
mkdir azurewave
cd azurewave
mkdir AW-CM358SM
cd AW-CM358SM
cp xxxx ./

  1. 修改/device/rockchip/common/scripts/post-wifibt.sh

修改1:增加aw-cm358sm驱动的编译:

/* <sdk>/device/rockchip/common/scripts/post-wifibt.sh */...if [[ "$RK_WIFIBT_CHIP" = "AW-CM358SM" ]];thenecho "building aw-cm358sm driver"$KMAKE M=$RKWIFIBT_DIR/drivers/aw-cm358sm modulesfi...

修改2:将编译好的ko文件和固件拷贝到output目录,以备后面打包进rootfs。

/* <sdk>/device/rockchip/common/scripts/post-wifibt.sh */...if [[ "$RK_WIFIBT_CHIP" == "AW-CM358SM" ]];thenecho "Copy AW-CM358SM file to rootfs"cp $RKWIFIBT_DIR/firmware/azurewave/$RK_WIFIBT_CHIP/* \$TARGET_DIR/lib/firmware/cp $RKWIFIBT_DIR/drivers/aw-cm358sm/*.ko $TARGET_DIR/lib/modules/fi...
  1. 修改板级配置文件,添加$RK_WIFIBT_CHIP环境变量:

  1. 在sdk根目录执行如下命令单独编译wifibt:
./build.sh wifibt

  1. 编译buildroot,更新rootfs。打包固件。
./build.sh buildroot && ./build.sh firmware

6.3、Wi-Fi 功能验证

6.3.1、加载驱动

  1. 查看未安装驱动前的ifconfig:

  1. 进入/lib/modules目录,按顺序安装驱动(该驱动有两个ko文件需要安装):

cd /lib/modules
insmod mlan.ko
insmod moal.ko

驱动加载成功:

6.3.2、STA模式测试

这里使用wpa_supplicant工具测试,需要在buildroot里提前安装。

WPA_SUPPLICANT是一个用于处理 Wi - Fi 连接认证和加密的守护进程(daemon)。它在 Linux、BSD 等操作系统中被广泛使用,用于实现客户端(如笔记本电脑、智能手机等设备)与 Wi - Fi 接入点(AP)之间的安全连接。

  1. 修改wpa_supplicant.conf配置文件,将ssid和psk替换成待连接的wifi名称和密码:
vi /etc/wpa_supplicant.conf

  1. 开启wpa_supplicant进程:
# 开启wpa_supplicant进程
# -c 后面接的是配置文件的路径
wpa_supplicant -B -i mlan0 -c /etc/wpa_supplicant.conf# 动态获取IP
dhcpcd mlan0

  1. ping测试:
ping -I mlan0 baidu.com

6.3.3、AP测试

海华awcm358sm有三个网络节点,其中uap0可用作AP节点:

这里使用hostapd工具测试,需要在buildroot里提前安装。

hostapd是一个用户空间的守护进程,主要用于将支持 Linux 的网络接口转换为一个 IEEE 802.11 无线接入点(AP)。简单来说,它可以让你的设备(如装有 Linux 系统的电脑或开发板)变成一个 Wi - Fi 热点,供其他无线设备连接。

板卡接入有线网络,确保可以上网:

hostapd需要一个配置文件,这里命名为hostapd-2.4g.conf,内容如下:

interface=uap0
driver=nl80211
channel=9
hw_mode=gauth_algs=1
ieee80211n=1
wpa=1ssid=OK3568_WIFI_2.4G_AP
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

下面是AP模式的测试脚本hostapd.sh:

#!/bin/sh# kill wpa_supplicant
cnt=`ps aux | grep wpa_supplicant | grep -v grep  | wc -l`
if [ "${cnt}" != "0" ];thenkillall wpa_supplicant > /dev/null
fi# kill hostapd
cnt1=`ps aux | grep hostapd | grep -v grep  | wc -l`
if [ "${cnt1}" != "0" ];thenkillall hostapd > /dev/null
fi# stop dnsmasq
/etc/init.d/S80dnsmasq stop# start hostapd
hostapd /etc/hostapd-2.4g.conf &# enable device
sleep 1
ifconfig mlan0 up
ifconfig uap0 up
# 注意,这里的IP不要和eth0的IP在同一个网段
ifconfig uap0 192.168.5.1# start dnsmasq
/etc/init.d/S80dnsmasq start# 开启网络和IP转发
echo "1" > /proc/sys/net/ipv4/ip_forwardiptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -Xiptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROPiptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

hostapd完成了AP热点的创建,现在为AP添加DHCP功能,这里使用dnsmasq工具。dnsmasq的配置文件在/etc/dnsmasq.conf,内容如下,主要规定了接口名和待分配的IP地址范围:

interface=uap0
bind-interfaces
except-interface=lo
dhcp-range=192.168.5.100,192.168.5.254,12h
dhcp-option=3,192.168.5.1
dhcp-option=6,192.168.5.1

一切准备就绪,开始测试,执行AP测试脚本hostapd.sh,需要执行两次:

sh hostapd.sh

手机查看热点:

查看路由表:

route -n

手机连接热点后,打印如下:

但目前是存在问题的,手机连接热点后上不了网。最初是内核没有开启iptables的支持,但后面开启之后,执行hostapd.sh测试脚本,内核直接崩溃,这个问题卡了挺久,暂时放弃了。

7、蓝牙适配

7.1、bt dts配置

配置uart8:

&uart8 {status = "okay";pinctrl-names = "default";pinctrl-0 = <&uart8m0_xfer &uart8m0_ctsn &uart8m0_rtsn>;
};

7.2、驱动移植

kernel menuconfig开启BT_HCIUART

7.3、蓝牙功能验证

buildroot要添加bluez蓝牙工具软件包。

7.3.1、使能蓝牙设备

  1. 使能蓝牙设备:
# 还是要先加载wifi驱动
insmod /lib/modules/mlan.ko
insmod /lib/modules/moal.ko# 使能hci0
hciattach /dev/ttyS8 any -s 115200 115200 flow > /dev/null
hciconfig hci0 up

  1. 使本设备自身可被发现:
hciconfig hci0 piscan
  1. 查看蓝牙模块设备名称:
hciconfig hci0 name

  1. 手机查看蓝牙设备(苹果手机看不到):

7.3.2、扫描外设

hcitool scan

7.3.3、开发板发送文件给安卓手机

进入bluetooth终端:

/usr/libexec/bluetooth/bluetoothd -C -n &
bluetoothctl

打开蓝牙可连接可被发现属性:

discoverable on

扫描蓝牙设备(重新进入bluetooth终端后,需扫描设备才可以连接):

scan on

扫描到目标设备后,关闭扫描:

scan off

配对:

agent NoInputNoOutput
default-agent
pair A4:50:46:A5:9D:08

退出bluetooth终端:

quit

创建文件,用于待会的发送测试:

echo "send" > sendfile.txt

进入obexctl终端:

export $(dbus-launch)
/usr/libexec/bluetooth/obexd -r /tmp -a -n &
obexctl

连接手机:

connect A4:50:46:A5:9D:08

发送文件到手机:

send sendfile.txt

退出obexctl终端:

quit

相关文章:

RK356x bsp 5 - 海华AW-CM358SM Wi-Fi/Bt模组调试记录

文章目录 1、环境介绍2、目标3、海华AW-CM358SM3.1、基本信息3.2、支持SDIO3.03.3、电气特性 4、适配流程步骤5、SDIO控制器适配5.1、sdio dts配置5.2、验证 6、Wi-Fi 适配6.1、wifi dts配置6.2、驱动移植6.2.1、kernel menuconfig6.2.2、传统驱动移植6.2.3、RK SDK WIFI/BT驱动…...

支持Google Analytics快捷添加的CMS:费用与部署形式详解

CMS 的费用和部署形式是选择平台的重要参考因素&#xff0c;不同的业务需求需要不同的解决方案。本文将从费用和部署形式两个角度&#xff0c;详细分析支持 Google Analytics 快捷集成的 CMS 和工具&#xff0c;帮助您更好地了解这些平台的特点。 1. BigCommerce 费用&#xff…...

CSS | 实现三列布局(两边边定宽 中间自适应,自适应成比)

目录 示例1 &#xff08;中间自适应 示例2&#xff08;中间自适应 示例3&#xff08;中间自适应 示例4 &#xff08;自适应成比 示例5&#xff08;左中定宽&#xff0c;右边自适应 示例6&#xff08;中间自适应 示例7&#xff08;中间自适应 示例8&#xff08;中间定宽…...

fpga系列 HDL:跨时钟域同步 双触发器同步器

目录 **双触发器同步器&#xff08;Two-Flip-Flop Synchronizer&#xff09;示例代码**&#xff1a;双触发器同步器的优缺点优点&#xff1a;缺点&#xff1a;适用场景&#xff1a; 应用实例&#xff1a;同步来自spi_slave的单个使能信号 跨时钟域的设计需要特别小心&#xff0…...

金融项目实战 05|Python实现接口自动化——登录接口

目录 一、代码实现自动化理论及流程 二、脚本实现的理论和准备工作 1、抽取功能转为自动化用例 2、搭建环境(测试工具) 3、搭建目录结构 三、登录接口脚本实现 1、代码编写 1️⃣api目录 2️⃣script目录 2、断言 3、参数化 1️⃣编写数据存储文件&#xff1a;jso…...

《HTML在网络安全中的多面应用:从防范攻击到安全审查》

Html基础 Html简介 HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是用于描述网页内容和结构的标准语言。以下是对HTML的简要介绍&#xff1a; 基本概念 定义&#xff1a; HTML不是一种编程语言&#xff0c;而是一种标记语言。 它使用标…...

Linux网络 | 学习传输层网络协议之UDP(短篇)

前言&#xff1a; 本节内容正式迈入传输层网络协议的知识殿堂&#xff0c; 之前的文章&#xff0c; 我们都是在应用层进行翻来覆去。 比如http就是应用层协议&#xff0c; 只不过使用了tcp的系统调用。 从本节开始&#xff0c; 友友们将会学习传输层两大协议&#xff1a; UDP和…...

iOS - 内存屏障的使用场景

内存屏障的使用是为了解决以下几个关键问题&#xff1a; 1. CPU 乱序执行 // 没有内存屏障时&#xff0c;CPU 可能乱序执行 void example() {// 这两行代码可能被 CPU 重排序a 1; // 操作1flag true; // 操作2 }// 使用内存屏障确保顺序 void safeExample() {a 1;…...

MySQL 8.0 新特性详解与实用示例

MySQL 8.0 新特性详解与实用示例 1. 引言 MySQL 8.0 是 MySQL 版本系列中具有里程碑意义的更新版本&#xff0c;带来了大量新功能和优化&#xff0c;极大地提升了数据库的性能和可用性。本文将深入介绍 MySQL 8.0 的主要新特性及其应用场景&#xff0c;帮助你在项目中更高效地…...

【STM32-学习笔记-5-】ADC

文章目录 ADCADC函数Ⅰ、ADC_InitTypeDef结构体参数①、ADC_Mode②、ADC_DataAlign③、ADC_ExternalTrigConv④、ADC_ContinuousConvMode⑤、ADC_ScanConvMode⑥、ADC_NbrOfChannel Ⅱ、ADC配置示例1、单次转换&#xff0c;非扫描单次转换非扫描模式下&#xff0c;获取多通道的…...

TY1801 反激变换器PWM GaN功率开关

TY1801 是一款针对离线式反激变换器的多模式 PWM GaN 功率开关。TY1801 内置 GaN 功率管,它具备超宽 的 VCC 工作范围&#xff0c;非常适用于 PD 快充等要求宽输出电压的应用场合,系统不需要使用额外的绕组或外围降压电路&#xff0c;节省系统 BOM 成本。TY1801 支持 Burst&…...

Jenkins安装、插件下载及构建环境配置详解

Jenkins简介 1.1 简介 Jenkins 是一个基于Java开发的开源持续集成工具&#xff0c;它提供了一个开放且易用的软件平台&#xff0c;主要用于自动化构建、测试和部署软件项目&#xff0c;以实现持续集成&#xff08;CI&#xff09;和持续交付/部署&#xff08;CD&#xff09;。…...

ESP32,uart安装驱动uart_driver_install函数剖析,以及intr_alloc_flags 参数的意义

在 uart_driver_install 函数中&#xff0c;参数 RX_BUF_SIZE * 2 指定了接收缓冲区&#xff08;RX buffer&#xff09;的大小。这个参数对于 UART 驱动程序来说非常重要&#xff0c;因为它决定了可以存储多少接收到的数据&#xff0c;直到应用程序读取它们为止。下面是对该函数…...

Ubuntu把应用程序放到桌面

有时候我们下载的软件是一个文件夹&#xff0c;通常需要进入进入指定文件夹下去执行.sh 文件来启动&#xff0c;下面来个实例如何把idea放到桌面 打开文件目录/usr/share/applications/或者~/.local/share/applications/目录。第一个目录是全局的&#xff0c;所有用户都可以使…...

什么是端口映射

端口映射 端口映射&#xff08;Port Mapping&#xff09;是一种网络技术&#xff0c;用于将外部网络请求转发到内部网络的特定设备或服务。它通常用于以下场景&#xff1a; 外部访问内部服务&#xff1a;允许外部用户通过公网IP访问内网中的设备或服务。多设备共享IP&#xf…...

数据结构《MapSet哈希表》

文章目录 一、搜索树1.1 定义1.2 模拟实现搜索 二、Map2.1 定义2.2 Map.Entry2.3 TreeMap的使用2.4 Map的常用方法 三、Set3.1 定义3.2 TreeSet的使用3.3 Set的常用方法 四、哈希表4.1 哈希表的概念4.2 冲突4.2.1 冲突的概念4.2.2 冲突的避免1. 选择合适的哈希函数2. 负载因子调…...

【QT】QComboBox:activated信号和currentIndexChanged信号的区别

目录 1、activated1.1 原型1.2 触发机制1.3 使用场景1.4 连接信号和槽的方法1.4.1 方式一1.4.2 方式二 2、currentIndexChanged2.1 原型2.2 触发机制2.3 使用场景2.4 连接信号和槽的方法 1、activated 1.1 原型 [signal] void QComboBox::activated(int index) [signal] void…...

【Block总结】ELGCA模块,池化-转置(PT)注意力和深度卷积有效聚合局部和全局上下文信息

ELGCA结构 论文题目&#xff1a;ELGC-Net: Efficient Local-Global Context Aggregation for Remote Sensing Change Detection 论文链接&#xff1a;https://arxiv.org/pdf/2403.17909 官方github&#xff1a;https://github.com/techmn/elgcnet 高效局部-全局上下文聚合器&…...

MERN全栈脚手架(MongoDB、Express、React、Node)与Yeoman详解

MERN 全栈脚手架是一种用于快速构建基于 MongoDB、Express、React 和 Node.js 的全栈应用的框架或模板。它帮助开发者快速启动项目&#xff0c;减少了从零开始配置的时间。以下是关于 MERN 全栈脚手架的详细解析。 一、MERN 技术栈简介 MongoDB: 文档型数据库&#xff0c;用于…...

基于springboot+vue+微信小程序的宠物领养系统

基于springbootvue微信小程序的宠物领养系统 一、介绍 本项目利用SpringBoot、Vue和微信小程序技术&#xff0c;构建了一个宠物领养系统。 本系统的设计分为两个层面&#xff0c;分别为管理层面与用户层面&#xff0c;也就是管理者与用户&#xff0c;管理权限与用户权限是不…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...

GeoServer发布PostgreSQL图层后WFS查询无主键字段

在使用 GeoServer&#xff08;版本 2.22.2&#xff09; 发布 PostgreSQL&#xff08;PostGIS&#xff09;中的表为地图服务时&#xff0c;常常会遇到一个小问题&#xff1a; WFS 查询中&#xff0c;主键字段&#xff08;如 id&#xff09;莫名其妙地消失了&#xff01; 即使你在…...

STM32 低功耗设计全攻略:PWR 模块原理 + 睡眠 / 停止 / 待机模式实战(串口 + 红外 + RTC 应用全解析)

文章目录 PWRPWR&#xff08;电源控制模块&#xff09;核心功能 电源框图上电复位和掉电复位可编程电压监测器低功耗模式模式选择睡眠模式停止模式待机模式 修改主频一、准备工作二、修改主频的核心步骤&#xff1a;宏定义配置三、程序流程&#xff1a;时钟配置函数解析四、注意…...