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

news2024/12/23 11:47:04

文章目录

  • 1、环境介绍
  • 2、目标
  • 3、海华AW-CM358SM
    • 3.1、基本信息
    • 3.2、支持SDIO3.0
    • 3.3、电气特性
  • 4、适配流程步骤
  • 5、让SDIO控制器工作,且可以扫到WIFI卡
    • 5.1、dts配置
    • 5.2、验证
  • 6、Wi-Fi 适配
    • 6.1、dts配置
    • 6.2、驱动移植
      • 6.2.1、kernel menuconfig
      • 6.2.2、传统驱动移植
      • 6.2.3、RK SDK WIFI/BT驱动独立编译
  • 7、Wi-Fi 功能验证
    • 7.1、加载驱动
    • 7.2、STA模式测试
    • 7.3、AP测试
  • 8、蓝牙适配
    • 8.1、dts配置
    • 8.2、驱动移植
  • 9、蓝牙功能验证

1、环境介绍

硬件:飞凌ok3568-c开发板

软件:原厂rk356x sdk

2、目标

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

3、海华AW-CM358SM

3.1、基本信息

[外链图片转存中…(img-52nV7zF1-1734873834365)]

  • 主芯片:NXP的88W8987在这里插入图片描述

  • Wi-Fi接口:SDIO

  • BT接口:UART

3.2、支持SDIO3.0

[外链图片转存中...(img-ZJoS9TuB-1734873834365)]

3.3、电气特性

AW-CM358SM的VDDIO为1.8V:

[外链图片转存中...(img-vsfdrWD8-1734873834365)]
所以,RK3568的SDIO接口的工作电压也要是1.8V,请检查设备树电源域&pmu_io_domains节点vccio6是否配置为1.8v(同时,SDIO3.0模式必须为1.8v):

[外链图片转存中...(img-37WXNiiQ-1734873834365)]

[外链图片转存中...(img-kCjwuHB8-1734873834365)]

4、适配流程步骤

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

5、让SDIO控制器工作,且可以扫到WIFI卡

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

5.1、dts配置

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

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

[外链图片转存中...(img-VryjwlDZ-1734873834365)]

[外链图片转存中...(img-kQJniwyZ-1734873834365)]

设备树配置如下:

/* 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、验证

编译内核,打包,更新镜像后,查看kernel log:

[外链图片转存中...(img-8heIAM6Y-1734873834365)]

  1. 验证“适配流程步骤”的第1点:让SDIO控制器工作:
# 注意 mmc3: 3的数字是不固定的,也可能是0/1/2; fe000000:表示控制器的地址,不同平台也是不一样的
# 解析dts的mmc-pwrseq节点,获取WL_REG_ON
dwmmc_rockchip fe000000.dwmmc: allocated mmc-pwrseq
# 低频初始化
mmc_host mmc3: Bus speed (slot 0) = 375000Hz (slot req 400000Hz, actual 375000HZ div = 0)
# 高频工作模式
mmc_host mmc3: Bus speed (slot 0) = 148500000Hz (slot req 150000000Hz, actual 148500000HZ div = 0)
  1. 验证“适配流程步骤”的第2点:让SDIO控制器可以发现WIFI/BT模组:
# SDIO 3.0
mmc3: new ultra high speed SDR104 SDIO card at address 0001
# 如果是SDIO 2.0
mmcX: new high speed SDIO card at address 0001

同时查看/sys/bus/mmc/devices/目录下的sdio设备:

[外链图片转存中...(img-aOO1WTdX-1734873834365)]

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

[外链图片转存中...(img-p1ZRZVyY-1734873834365)]

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

6、Wi-Fi 适配

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

6.1、dts配置

从下面原理图可以得出:

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

[外链图片转存中...(img-G4QvTcL2-1734873834365)]

设备树继续添加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

[外链图片转存中...(img-dmrEcET0-1734873834365)]

[外链图片转存中...(img-AlLO2Eeu-1734873834365)]

6.2.2、传统驱动移植

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

[外链图片转存中...(img-buRCjHFD-1734873834365)]

  1. 修改Kconfig:
vi Kconfig
/* Kconfig */

...

config MXMWIFIEX
        tristate "NXP MxM WiFi Driver"
        depends on CFG80211
        help
        This driver is multi-chip-multi-interface driver
        (indicating Multi-Chip x Multi-Interface support) based on
        NXP 802.11n/ac chipsets. If you choose to build it as a module,
        it will be build 2 modules moal.ko and mlan.ko.

...

[外链图片转存中...(img-f3Pyi0h3-1734873834365)]

  1. 修改Makefile:
vi Makefile
/* Makefile */

...

obj-$(CONFIG_MXMWIFIEX)                += nxp/

...

[外链图片转存中...(img-x9hVFyR9-1734873834365)]

  1. 修改defconfig:

[外链图片转存中...(img-nIWw0hmk-1734873834365)]

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

[外链图片转存中...(img-HOlOOa6i-1734873834365)]

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

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

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

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

[外链图片转存中...(img-mBLA8gv3-1734873834365)]

  • 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/* ./

[外链图片转存中...(img-zoUNo3H8-1734873834365)]

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

[外链图片转存中...(img-VnHpO73w-1734873834365)]

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

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

[外链图片转存中...(img-CUpPux8l-1734873834365)]

/* <sdk>/device/rockchip/common/scripts/post-wifibt.sh */

...

    if [[ "$RK_WIFIBT_CHIP" = "AW-CM358SM" ]];then
        echo "building aw-cm358sm driver"
        $KMAKE M=$RKWIFIBT_DIR/drivers/aw-cm358sm modules
    fi

...

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

[外链图片转存中...(img-d81UA0ly-1734873834365)]

/* <sdk>/device/rockchip/common/scripts/post-wifibt.sh */

...

    if [[ "$RK_WIFIBT_CHIP" == "AW-CM358SM" ]];then
		echo "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环境变量:

[外链图片转存中...(img-7flVtLij-1734873834365)]

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

[外链图片转存中...(img-p49b1UbN-1734873834365)]

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

7、Wi-Fi 功能验证

7.1、加载驱动

  1. 更新镜像后,登入系统,查看一下未安装驱动前的ifconfig:

[外链图片转存中...(img-ammvnSrV-1734873834365)]

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

[外链图片转存中...(img-lo6UgvaI-1734873834365)]

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

驱动加载成功:

[外链图片转存中...(img-oTanQ4B7-1734873834365)]

[外链图片转存中...(img-iXG9K7km-1734873834365)]

7.2、STA模式测试

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

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

[外链图片转存中...(img-ImwFGzKD-1734873834365)]

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

# 动态获取IP
dhcpcd

[外链图片转存中...(img-fUSlSuJ4-1734873834366)]

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

[外链图片转存中...(img-76JtPCaW-1734873834366)]

7.3、AP测试

略。

8、蓝牙适配

8.1、dts配置

[外链图片转存中...(img-VfngZ2TI-1734873834366)]

配置uart8:

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

8.2、驱动移植

kernel menuconfig开启BT_HCIUART

[外链图片转存中...(img-JmMqGdwL-1734873834366)]

9、蓝牙功能验证

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

登入系统后,执行如下命令查看hci0节点:

# 还是要先加载wifi驱动
insmod /lib/modules/mlan.ko
insmod /lib/modules/moal.ko

# 使能hci0
export DBUS_SESSION_BUS_ADDRESS=unix:path=/var/run/dbus/system_bus_socket
hciattach /dev/ttyS8 any -s 115200 115200 flow > /dev/null
hciconfig hci0 up

[外链图片转存中...(img-hhQU702f-1734873834366)]

启动蓝牙服务:

# 启动蓝牙服务
/usr/libexec/bluetooth/bluetoothd &
/usr/libexec/bluetooth/obexd -a -r /root &

和手机配对测试:

root@rk3568-buildroot:/# bluetoothctl								# 打开bluez蓝牙工具
Agent registered
[bluetooth]# power on																# 启动蓝牙设备
[CHG] Controller 36:DC:25:54:7C:CB Class: 0x00100000
Changing power on succeeded
[CHG] Controller 36:DC:25:54:7C:CB Powered: yes
[bluetooth]# pairable on														# 设置为配对模式
Changing pairable on succeeded
[bluetooth]# discoverable on								 				# 设置为可发现模式
Changing discoverable on succeeded
[CHG] Controller 36:DC:25:54:7C:CB Discoverable: yes
[bluetooth]# agent on																# 启动代理
Agent is already registered
[bluetooth]# default-agent
Default agent request successful
# 此时,打开手机蓝牙进行扫描,如果长时间未扫描到请重复执行
[bluetooth]# discoverable on												# 设置当前代理为默认
# 点击BlueZ 5.68进行配对,手机端和开发板分别进行密码验证,选择“YES”。
Changing discoverable on succeeded
[CHG] Controller 28:D0:43:15:75:E6 Discoverable: no
[NEW] Device A4:50:46:A5:9D:08 bluetoothTest
Request confirmation
[agent] Confirm passkey 248678 (yes/no): yes
[CHG] Device A4:50:46:A5:9D:08 Bonded: yes
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 Modalias: bluetooth:v038Fp1200d1436
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001115-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001116-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00009955-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 ServicesResolved: yes
[CHG] Device A4:50:46:A5:9D:08 Paired: yes
Authorize service
[agent] Authorize service 00001108-0000-1000-8000-00805f9b34fb (yes/no): yes
Authorize service
[agent] Authorize service 0000110d-0000-1000-8000-00805f9b34fb (yes/no): yesW: [pulseaudio] module-loopback.c: Configured latency of 200.00 ms is smaller than minimum latency, using minimum instead
W: [pulseaudio] module-loopback.c: Cannot set requested sink latency of 66.67 ms, adjusting to 250.00 ms
W: [pulseaudio] module-loopback.c: Cannot set requested source latency of 16.00 ms, adjusting to 39.91 ms
W: [pulseaudio] module-loopback.c: Configured latency of 200.00 ms is smaller than minimum latency, using minimum instead
W: [pulseaudio] module-loopback.c: Cannot set requested sink latency of 35.20 ms, adjusting to 39.91 ms
W: [pulseaudio] module-loopback.c: Cannot set requested source latency of 66.67 ms, adjusting to 250.00 ms

[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 0000110d-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001115-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001116-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:A5:9D:08 UUIDs: 00009955-0000-1000-8000-00805f9b34fb
[NEW] Transport /org/bluez/hci0/dev_A4_50_46_A5_9D_08/fd0
[NEW] Endpoint /org/bluez/hci0/dev_A4_50_46_A5_9D_08/sep1
[ 1558.607240] input: bluetoothTest (AVRCP) as /devices/virtual/input/input5
[NEW] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 [default]
[09:25:59.443] event5  - bluetoothTest (AVRCP): is tagged by udev as: Keyboard
[09:25:59.444] event5  - bluetoothTest (AVRCP): device is a keyboard
[09:25:59.444] libinput: configuring device "bluetoothTest (AVRCP)".
[09:25:59.444] associating input device event5 with output DSI-1 (none by udev)
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Status: paused
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Key: Title
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Value:
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Key: TrackNumber
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Value: 0x00000000 (0)
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Key: NumberOfTracks
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Value: 0x00000000 (0)
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Key: Duration
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Value: 0x00000000 (0)
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Key: Album
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Value:
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Key: Artist
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Value:
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Key: Genre
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Track Value:
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Position: 0x00000000 (0)
[CHG] Player /org/bluez/hci0/dev_A4_50_46_A5_9D_08/player0 Position: 0x00000000 (0)
[bluetoothTest]#

自行进行文件互传测试。

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

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

相关文章

VBA编程:自定义函数 - 字符串转Hex数据

目录 一、自定义函数二、语法将字符串转换为hex数据MID函数:返回一个字符串中指定位置和长度的子串LEN函数:返回一个字符串的长度(字符数)Asc函数三、定义变量和数据类型变量声明的基本语法常见的数据类型四、For循环基本语法五、&运算符一、自定义函数 定义:用户定义…

工业大数据分析算法实战-day12

文章目录 day12时序分解STL&#xff08;季节性趋势分解法&#xff09;奇异谱分析&#xff08;SSA&#xff09;经验模态分解&#xff08;EMD&#xff09; 时序分割ChangpointTreeSplitAutoplait有价值的辅助 时序再表征 day12 今天是第12天&#xff0c;昨天主要是针对信号处理算…

基于Python Scrapy的豆瓣Top250电影爬虫程序

Scrapy安装 Python实现一个简单的爬虫程序&#xff08;爬取图片&#xff09;_python简单扒图脚本-CSDN博客 创建爬虫项目 创建爬虫项目&#xff1a; scrapy startproject test_spider 创建爬虫程序文件&#xff1a; >cd test_spider\test_spider\spiders >scrapy g…

【Linux系统编程】:信号(2)——信号的产生

1.前言 我们会讲解五种信号产生的方式: 通过终端按键产生信号&#xff0c;比如键盘上的CtrlC。kill命令。本质上是调用kill()调用函数接口产生信号硬件异常产生信号软件条件产生信号 前两种在前一篇文章中做了介绍&#xff0c;本文介绍下面三种. 2. 调用函数产生信号 2.1 k…

腾讯云智能结构化OCR:以多模态大模型技术为核心,推动跨行业高效精准的文档处理与数据提取新时代

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大三学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

内核执行时动态的vmlinux的反汇编解析方法及static_branch_likely机制

一、背景 在之前的博客里&#xff0c;我们讲到了tracepoint&#xff08;内核tracepoint的注册回调及添加的方法_tracepoint 自定义回调-CSDN博客&#xff09;和kprobe&#xff08;获取任意一个进程的共享内存的fd对应的资源&#xff0c;增加引用&#xff0c;实现数据的接管——…

Burp与其他安全工具联动及代理设置教程

Burp Suite 是一款功能强大的 Web 安全测试工具&#xff0c;其流量拦截和调试功能可以与其他安全工具&#xff08;如 Xray、Yakit、Goby 等&#xff09;实现联动&#xff0c;从而提升渗透测试的效率。本文将详细讲解 Burp 与其他工具联动的原理以及代理设置的操作方法&#xff…

Git配置公钥步骤

GIt公钥的配置去除了git push输入账号密码的过程&#xff0c;简化了push流程。 1.生成SSH公钥和私钥 ssh-keygen -t rsa -b 4096 -C “your_emailexample.com” 遇到的所有选项都按回车按默认处理。获得的公钥私钥路径如下&#xff1a; 公钥路径 : ~/.ssh/id_rsa.pub 私钥路径…

【蓝桥杯选拔赛真题96】Scratch风车旋转 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 scratch风车旋转 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 scratc…

未来 AI 在企业应用中的重心

1. LLM 中精度、参数、数据、性能、以及成本之间的权衡是什么&#xff1f; 在大型语言模型&#xff08;LLM, Large Language Models&#xff09;中&#xff0c;精度、参数数量、训练数据量、性能和成本之间的权衡是一个复杂且多维度的问题。以下是这些因素之间关系的简要分析&…

Docker 安装 禅道-21.2版本-外部数据库模式

Docker 安装系列 1、拉取最新版本&#xff08;zentao 21.2&#xff09; [rootTseng ~]# docker pull hub.zentao.net/app/zentao Using default tag: latest latest: Pulling from app/zentao 55ab1b300d4b: Pull complete 6b5749e5ef1d: Pull complete bdccb03403c1: Pul…

排序算法 (插入,选择,冒泡,希尔,快速,归并,堆排序)

排序:经常在算法题中作为一个前置操作,为了之后的贪心or else做个铺垫,虽然我们经常都只是调用个sort,但是了解一些排序算法可以扩充下知识库 排序的分类: 从存储设备角度&#xff1a; ✓ 内排序&#xff1a;在排序过程中所有数据元素都在内存中&#xff1b; ✓ 外排序&a…

web复习(五)

一、补零 二、打印出五行五列的星星 三、用户输入行数和列数并打印相应行数和列数的⭐ 四、打印倒三角星星&#xff08;第一行一个&#xff0c;第二行两个...&#xff0c;以此类推&#xff09; 五、用户输入秒数&#xff0c;可以自动转换为时分秒 六、随机点名

法规标准-C-NCAP评测标准解析(2024版)

文章目录 什么是C-NCAP&#xff1f;C-NCAP 评测标准C-NCAP评测维度三大维度的评测场景及对应分数评星标准 自动驾驶相关评测场景评测方法及评测标准AEB VRU——评测内容(测什么&#xff1f;)AEB VRU——评测方法(怎么测&#xff1f;)车辆直行与前方纵向行走的行人测试场景&…

XRP价格跌破2.20美元 1.94美元是否下一波牛市的关键支撑?

原文转自&#xff1a;XRP价格跌破2.20美元 1.94美元是否下一波牛市的关键支撑&#xff1f; - 币热网 - 区块链数字货币新闻消息资讯 XRP价格经历剧烈波动后强势反弹&#xff0c;$1.94或成新牛市关键支撑 在过去24小时内&#xff0c;XRP价格经历了一场过山车式的剧烈波动。价…

centos-stream9系统安装docker

如果之前安装过docker需要删除之前的。 sudo dnf -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 安装yum-utils工具&#xff1a; dnf -y install yum-utils dnf-plugin…

H264编解码标准码流分析:SPS语法

H264编解码标准 SPS 语法解析 解释:H264编解码标准中的SPS(Sequence Parameter Set,序列参数集)是一组编码视频序列的全局参数,包含了视频编码序列的基本属性和配置信息。分析工具:elecard streamEye、elecard StreamAnalyzer、h264Visa 等elecard StreamAnalyzer 展示形…

使用 AI 辅助开发一个开源 IP 信息查询工具:一

本文将分享如何借助当下流行的 AI 工具,一步步完成一个开源项目的开发。 写在前面 在写代码时&#xff0c;总是会遇到一些有趣的机缘巧合。前几天&#xff0c;我在翻看自己之前的开源项目时&#xff0c;又看到了 DDNS 相关的讨论。虽然在 2021 年我写过两篇相对详细的教程&am…

门控循环单元(GRU):深度学习中的序列数据处理利器

目录 ​编辑 引言 GRU的诞生背景 GRU的核心机制 GRU的计算过程 GRU的数学公式 GRU的应用领域 代码示例&#xff1a;PyTorch中的GRU GRU与LSTM的比较 参数比较 GRU的技术发展 BiGRU&#xff08;双向GRU&#xff09; BiGRU的实现示例 GRU与CNN的结合 GRU的应用案例…

Sui 基金会任命 Christian Thompson 为新任负责人

Sui 基金会是专注于推动 Sui 蓬勃发展的生态增长与采用的机构。近日&#xff0c;基金会宣布任命 Christian Thompson 为新任负责人。在 Sui 主网发布的开创性一年里&#xff0c;Sui 凭借其无与伦比的速度、可扩展性和效率&#xff0c;迅速崛起为领先的 Layer 1 区块链之一&…