Qualcomm QCA206x EasyMesh For Ubuntu

news2024/11/18 18:24:37

1. 引言

关于EasyMesh概念我们这里就不再过多的赘述,此篇文档的目的是,让广大初学者,有一个很方便的平台进行EasyMesh的学习和测试。

2. X86 Ubuntu平台

2.1 硬件环境准备

备注:QCA206x WiFi module推荐使用移远的FC64E/FC66E。

2.2 软件环境准备

假设已经在X86 PC上完成了Ubuntu18.04系统的安装(如有问题,自行百度)。

2.2.1 必要组件安装

执行如下指令,在Ubuntu系统系统上安装相应的软件包。

$ sudo apt update

$ sudo apt install -y openssh-server x11vnc dos2unix iperf linux-crashdump wireless-tools exfat-utils exfat-fuse

$ sudo apt install build-essential libncurses5-dev flex bison libnl-3-dev

$ sudo apt install kernel-package openssl kexex-tools kdump-tools

$ sudo apt install libssl-dev

$ sudo apt install libelf-dev

$ sudo apt install -y libnl-genl-3-dev

$ sudo apt install libdbus-1-dev

$ sudo apt install lua5.1 liblua5.1-0-dev libjson-c-dev libbsd-dev libjansson-dev

$ sudo apt install net-tools dhcpcd5 bridge-utils

$ sudo apt install cmake git

$ git config --global user.email "user email address"

$ git config --global user.name "user name"

备注:

安装kexex-toolskdump-tools时的提示选项全部选择“Yes”。

2.3 内核编译和安装

本博主只基于X86 Ubuntu 4.9.11、5.4.05.10.0的Linux内核版本进行验证和测试,并且当前只有4.9、5.4和5.10的内核patch,如有其他版本请自行解决相关问题

2.3.1 编译内核版本(4.9)

Step1: 获取Linux内核版本

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git

$ cd linux-stable-rc

$ git checkout v4.9.11

Step 2: 下载Linux内核补丁

相关patch请联系博主。

Step 3:  应用Linux内核补丁

$ git am 0001-Changes-for-wireless-and-cfg80211-for-v4.9.11-support.patch
$ git am 0002-Sysctl-support-for-TCP-IP-parameters-for-performance.patch
$ git am 0003-cfg80211-Add-support-for-FILS-shared-key-authentication.patch
$ git am 0004-cfg80211-Add-macros-to-indicate-backport-support-for.patch
$ git am 0005-cfg80211-size-various-nl80211-messages-correctly.patch
$ git am 0006-cfg80211-Modifiying-__cfg80211_connect_result-API.patch
$ git am 0007-cfg80211-Match-4.9.11-kernel-cfg80211-nl80211_attrs-.patch
$ git am 0008-cfg80211-Use-a-structure-to-pass-connect-response-pa.patch
$ git am 0009-cfg80211-Define-macro-to-indicate-support-for-new-cf.patch
$ git am 0010-sae-owe-station.patch
$ git am 0011-sae-owe-sap.patch
$ git am 0012-x86-kernel-reserve-CMA-memory-space-under-4G.patch
$ git am 0013-nl80211-add-6GHz-band-definition-to-enum-nl80211_ban.patch
$ git am 0014-cfg80211-add-6GHz-UNII-band-definitions.patch
$ git am 0015-cfg80211-util-add-6GHz-channel-to-freq-conversion-an.patch
$ git am 0016-cfg80211-extend-ieee80211_operating_class_to_band-fo.patch
$ git am 0017-cfg80211-add-6GHz-in-code-handling-array-with-NUM_NL.patch
$ git am 0018-cfg80211-use-same-IR-permissive-rules-for-6GHz-band.patch
$ git am 0019-cfg80211-ibss-use-11a-mandatory-rates-for-6GHz-band-.patch
$ git am 0020-cfg80211-apply-same-mandatory-rate-flags-for-5GHz-an.patch
$ git am 0021-cfg80211-Indicate-support-6GHz-band-in-kernel.patch
$ git am 0022-cfg80211-Add-support-for-HE.patch
$ git am 0023-mac80211-add-ieee80211_get_he_iftype_cap-helper.patch
$ git am 0024-6GHz-Add-support-to-validate-6GHz-channels.patch
$ git am 0025-cfg80211-Adjust-6ghz-frequencies-per-channelization.patch
$ git am 0026-nl80211-fix-nlmsg-allocation-in-cfg80211_ft_event.patch
$ git am 0027-dsa-mv88e6xxx-Optimise-atu_get.patch
$ git am 0028-cfg80211-add-and-use-strongly-typed-element-iteratio.patch
$ git am 0029-cfg80211-Parsing-of-Multiple-BSSID-information-in-sc.patch
$ git am 0030-cfg80211-use-for_each_element-for-multi-bssid-parsin.patch
$ git am 0031-cfg80211-Properly-track-transmitting-and-non-transmi.patch
$ git am 0032-cfg80211-Move-Multiple-BSS-info-to-struct-cfg80211_b.patch
$ git am 0033-cfg80211-parse-multi-bssid-only-if-HW-supports-it.patch
$ git am 0034-cfg80211-make-BSSID-generation-function-inline.patch
$ git am 0035-cfg80211-add-various-struct-element-finding-helpers.patch
$ git am 0036-cfg80211-save-multi-bssid-properties.patch
$ git am 0037-cfg80211-fix-the-IE-inheritance-of-extension-IEs.patch
$ git am 0038-cfg80211-fix-memory-leak-of-new_ie.patch
$ git am 0039-ieee80211-fix-for_each_element_extid.patch
$ git am 0040-cfg80211-fix-and-clean-up-cfg80211_gen_new_bssid.patch
$ git am 0041-cfg80211-Define-macro-to-indicate-prev_bssid-connect.patch
$ git am 0042-nl80211-add-NL80211_CMD_UPDATE_FT_IES-to-supported-c.patch
$ git am 0043-cfg80211-Add-backport-flag-for-user-cellular-base-hi.patch

Step 4: 编译Linux内核

配置内核

$ cp /boot/config-$(uname -r) .config

$ make menuconfig

然后在弹出的内核配置界面依次进行如下选择。

save > ok > exit

使能如下内核配置

CONFIG_CFG80211_INTERNAL_REGDB=y

CONFIG_CFG80211=m

CONFIG_NL80211_TESTMODE=y

CONFIG_FRAME_WARN=2048

CONFIG_DMA_CMA=y

CONFIG_CMA_SIZE_MBYTES=512

编译Linux内核

$ sudo make-kpkg -j4 --initrd kernel_image kernel_headers

编译生成的镜像文件自动保存于内核源码上层目录。

Step 5: 安装Linux内核到ubuntu

$ sudo dpkg -i linux-image-4.9.11+_4.9.11+-10.00.Custom_amd64.deb

$ sudo dpkg -i linux-headers-4.9.11+_4.9.11+-10.00.Custom_amd64.deb

Step 6: 应用相应的Linux内核

安装完成后更新GRUB配置(具体如何配置GRUB,请自行百度),再重启X86 PC。

2.3.2 编译内核版本(5.4)

Step1: 获取Linux内核版本

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git

$ cd linux-stable-rc

$ git checkout v5.4

Step 2: 下载Linux内核补丁

相关patch请联系博主。

Step 3:  应用Linux内核补丁

$ git am 0001-cfg80211-Use-new-wiphy-flag-WIPHY_FLAG_DFS_OFFLOAD.patch
$ git am 0002-cfg80211-Copying-db.tx-from-wireless-regdb-for-v5.4.patch
$ git am 0003-cfg80211-Miscellenous-changes-for-bringing-up-cld-2..patch
$ git am 0006-cfg80211-Add-macros-to-indicate-backport-support-for.patch
$ git am 0007-cfg80211-fixing-dfs-master-issue.patch
$ git am 0010-saeowe-station.patch
$ git am 0011-x86-kernel-reserve-CMA-memory-space-under-4G.patch
$ git am 0012-cfg80211-Adjust-6ghz-frequencies-per-channelization.patch
$ git am 0013-6GHz-Add-support-to-validate-6GHz-channels.patch

Step 4/5/6: Follow上一章节

2.3.3 编译内核版本(5.10)

Step1: 获取Linux内核版本

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git

$ cd linux-stable-rc

$ git checkout v5.10

Step 2: 下载Linux内核补丁

相关patch请联系博主。

Step 3:  应用Linux内核补丁

$ git am 0001-cfg80211-Use-new-wiphy-flag-WIPHY_FLAG_DFS_OFFLOAD.patch
$ git am 0002-cfg80211-Copying-db.tx-from-wireless-regdb-for-v5.10.patch
$ git am 0003-cfg80211-Miscellenous-changes-for-bringing-up-cld-2..patch
$ git am 0004-cfg80211-Add-macros-to-indicate-backport-support-for.patch
$ git am 0005-cfg80211-fixing-dfs-master-issue.patch
$ git am 0006-sae.patch
$ git am 0007-x86-kernel-reserve-CMA-memory-space-under-4G.patch
$ git am 0008-cfg80211-Add-support-to-configure-SAE-PWE-value-to-d.patch

Step 4/5/6: Follow上一章节

2.4 编译WiFi驱动

2.4.1 获取WiFi源代码

相关EasyMesh源代码,请联系博主。

2.4.2 Linux内核合入驱动头文件

执行如下命令拷贝AIO/drivers/core_tech_modules/目录下对应文件夹中的cnss2.hqcn_sdio_al.hcnss_utils.h文件至内核<kernel_path>/include/net/目录下。 

$ sudo cp -r AIO/drivers/core_tech_modules/cnss2/cnss2.h <kernel_path>/include/net/

$ sudo cp -r AIO/drivers/core_tech_modules/inc/qcn_sdio_al.h <kernel_path>/include/net/

$ sudo cp -r AIO/drivers/core_tech_modules/cnss_utils/cnss_utils.h <kernel_path>/include/net/

2.4.3 编译WiFi驱动和相关应用代码

执行如下命令进行编译:

$ cd WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/build

$ make CONFIG_ONE_MSI_BUILD=y CONFIG_PERF_BUILD=y

$ make mesh_daemon MAKECMDGOALS=all

$ make mesh_pack

2.5 加载EasyMesh

2.5.1 准备环境

Step 1: 检查PCIe是否枚举成功

$ lspci

若包含如下显示信息,则表示PCIe枚举成功。

02:00.0 Network controller: Qualcomm Device 1103 (rev 01)

Step 2: 编辑/etc/NetworkManager/NetworkManager.conf

[main]

plugins=ifupdown,keyfile,ofono

dns=dnsmasq

[ifupdown]

managed=false

[keyfile]

unmanaged-devices=interface-name:br-lan,interface-name:wlan*

Step 3: 拷贝Wi-Fi固件、配置文件和应用程序

$ sudo mkdir /lib/firmware/wlan

$ sudo cp WiFi_EasyMesh/meta_build/load_meta/wlan_ firmware/* /lib/firmware/

$ sudo cp WiFi_EasyMesh/meta_build/load_meta/BDF&INI/FC64EABMD/bdwlan* /lib/firmware/

$ sudo cp WiFi_EasyMesh/meta_build/load_meta/BDF&INI/FC64EABMD/wlan/qcom_cfg.ini_ map /lib/firmware/wlan/qcom_cfg.ini

$ sudo cp WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/roofs-ve-f10c1.build/sbin/* /sbin

Step 4: 安装EasyMesh应用,修改WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh _pack/emesh_install.sh脚本中的EMESH_PATH变量为绝对路径后,执行脚本。

备注:配置文件qcom_cfg.ini_map适用于MAP Agent模式,而配置文件qcom_cfg.ini适用于默认的STA模式。

2.5.2 配置Agent角色

Step 1: 执行如下命令修改Agent角色配置

$ uci delete network.wan

$ uci delete network.wan6

$ uci commit network

$ uci set repacd.repacd.Role='NonCAP'

$ sudo uci commit repacd

Step 2: 执行如下命令使能Agent角色

## insert modules

$ sudo su

$ modprobe llc

$ modprobe stp

$ modprobe bridge

$ insmod WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh_pack/module/emesh-sp.ko

$ insmod WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh_pack/module/hyfi-bridging.ko

$ insmod WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/roofs-ve-f10c1.build/lib/ modules/ wlan_cnss_core_pcie.ko

$ modprobe cfg80211

$ insmod WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/roofs-ve-f10c1.build/lib/ modules/wlan.ko country_code=US

$ insmod WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh_pack/module/wlan_son _cld.ko

## process

$ ubusd &

$ procd -s /var/run/ubus/ubus.sock &

$ netifd -s /var/run/ubus/ubus.sock -c /etc/config -p /lib/netifd &

## config bridge

$ brctl addbr br-lan

$ ifconfig br-lan hw ether $(iw dev wlan1 info |grep addr|awk '{print $2}')

$ ip addr flush dev eth0

$ ip addr flush dev br-lan

## scripts

$ ./WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh_pack/cfg_hyctl.sh

$ . /WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh_pack/cfg_wireless_mac.sh

$ /etc/init.d/repacd start

Step 3: 执行如下命令检查EasyMesh功能是否加载成功

$ ps -x

若显示信息包含如下进程信息,则表示EasyMesh功能加载成功。

3228 ?  Ss  0:00 /sbin/hostapd /var/run/hostapd-wlan1.conf -ddd -f /tmp/hostapd-wlan1.log -t -B

3241 ?  Ss  0:00 /sbin/hostapd_cli -i wlan1 -p /var/run/hostapd-wlan1

3346 ?  Ss  0:00 /sbin/hostapd /var/run/hostapd-wlan2.conf -ddd -f /tmp/hostapd-wlan2.log -t -B

3354 ?  Ss  0:00 /sbin/hostapd_cli -i wlan2 -p /var/run/hostapd-wlan2

3437 ?  Ss  0:00 wpa_supplicant -i wlan0 -u -c /var/run/wpa_supplicant-wlan0.conf -ddd

3631 ?  S    0:00 /usr/sbin/wsplcd -c /tmp/wsplcd-lan.conf -a -M /etc/wsplcd/map/bss-policy.conf

3906 ?  Sl   0:01 /usr/sbin/ezmesh -d -C /tmp/ezmesh-lan.conf -P 7777 -cfg80211

2.5.3 配置Controller角色

Step 1: 执行如下命令修改Controller角色配置

$ uci set network.wan=interface

$ uci set network.wan.ifname=eth1

$ uci set network.wan.proto=dhcp

$ sudo uci commit network

$ uci set repacd.MAPConfig.FronthaulSSID='EasyMeshssid-MAP'

$ uci set repacd.MAPConfig.FronthaulKey='EasyMeshssid-MAP'

$ uci set repacd.repacd.Role='CAP'

$ sudo uci commit repacd

$ uci set wireless.wlan0.disabled='1'

$ uci set wireless.@wifi-iface[1].ssid=EasyMeshssid-MAP

$ uci set wireless.@wifi-iface[1].encryption='psk2+ccmp'

$ uci set wireless.@wifi-iface[1].key=EasyMeshssid-MAP

$ uci set wireless.@wifi-iface[2].ssid=EasyMeshssid-MAP

$ uci set wireless.@wifi-iface[2].encryption='psk2+ccmp'

$ uci set wireless.@wifi-iface[2].key=EasyMeshssid-MAP

$ sudo uci commit wireless

Step 2: 执行如下命令使能Controller角色

## insert modules

$ sudo su

$ modprobe llc

$ modprobe stp

$ modprobe bridge

$ insmod WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh_pack/module/emesh-sp.ko

$ insmod WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh_pack/module/hyfi-bridging.ko

$ insmod WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/roofs-ve-f10c1.build/lib/

modules/ wlan_cnss_core_pcie.ko

$ modprobe cfg80211

$ insmod WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/roofs-ve-f10c1.build/lib/ modules/wlan.ko country_code=US

$ insmod WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh_pack/module/wlan_son _cld.ko

## process

$ ubusd &

$ procd -s /var/run/ubus/ubus.sock &

$ netifd -s /var/run/ubus/ubus.sock -c /etc/config -p /lib/netifd &

## config bridge

$ brctl addbr br-lan

$ ifconfig br-lan hw ether $(iw dev wlan1 info |grep addr|awk '{print $2}')

$ ip addr flush dev eth0

$ ip addr flush dev br-lan

## scripts

$ ./WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh_pack/cap_cfg_hyctl.sh

$ . /WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh_pack/cfg_wireless_mac.sh

$ /etc/init.d/repacd start

$ ./WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/emesh_pack/dnsmasq.sh

Step 3: 执行如下命令检查EasyMesh功能是否加载成功

$ ps -x

若显示信息包含如下进程信息,则表示EasyMesh功能加载成功。

3228 ?  Ss  0:00 /sbin/hostapd /var/run/hostapd-wlan1.conf -ddd -f /tmp/hostapd-wlan1.log -t -B

3241 ?  Ss  0:00 /sbin/hostapd_cli -i wlan1 -p /var/run/hostapd-wlan1

3346 ?  Ss  0:00 /sbin/hostapd /var/run/hostapd-wlan2.conf -ddd -f /tmp/hostapd-wlan2.log -t -B

3354 ?  Ss  0:00 /sbin/hostapd_cli -i wlan2 -p /var/run/hostapd-wlan2

3437 ?  Ss  0:00 wpa_supplicant -i wlan0 -u -c /var/run/wpa_supplicant-wlan0.conf -ddd

3631 ?  S    0:00 /usr/sbin/wsplcd -c /tmp/wsplcd-lan.conf -a -M /etc/wsplcd/map/bss-policy.conf

3906 ?  Sl   0:01 /usr/sbin/ezmesh -d -C /tmp/ezmesh-lan.conf -P 7777 -cfg80211

4013 ?  S    0.00 dnsmasq --dhcp-range=192.168.39.10,192.168.39.100,12h -p 54

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

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

相关文章

详解yolov5的网络结构

转载自文章 网络结构图&#xff08;简易版和详细版&#xff09; 此图是博主的老师&#xff0c;杜老师的图 网络框架介绍 前言&#xff1a; YOLOv5是一种基于轻量级卷积神经网络&#xff08;CNN&#xff09;的目标检测算法&#xff0c;整体可以分为三个部分&#xff0c; ba…

大数据平台之CDC (Chanage Data Capture) 方案

Change Data Capture (CDC) 是一种用于跟踪和捕获数据库中数据变更的技术&#xff0c;它可以在数据发生变化时实时地将这些变更捕获并传递到下游系统。以下是一些常用的开源 CDC 方案&#xff1a; 1. Flink CDC Flink CDC 是基于 Apache Flink 的一个扩展&#xff0c;它通过集…

.NET下的开源OCR项目:解锁图片文字识别的新篇章

在数字化时代&#xff0c;从图片中高效准确地提取文字信息已成为众多应用场景的迫切需求。OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术正是满足这一需求的关键技术。对于.NET开发者而言&#xff0c;幸运的是&#xff0c;存在多个开…

Wireshark网络抓包工具入门指南

目录 引言 安装抓包工具 抓包基础概念 抓包步骤 流程 抓包工具头的分析 14.3 以太网的完整帧格式 粘包与拆包现象解析及解决方案 发生原因 解决方案 14.3.1以太网头 14.3.2 IP头 14.3.3 UDP头 14.3.4 TCP头 引言 Wireshark是一款功能强大的开源网络协议分析器&am…

2024企业加密软件丨为什么企业需要防泄密

企业为什么需要防泄密&#xff1f; 企业的数据中包含了许多核心机密&#xff0c;如研发成果、商业计划、客户资料等。这些信息的泄露可能使竞争对手获得不正当的优势&#xff0c;给企业带来严重损失。 数据泄露事件往往会对企业的声誉造成负面影响&#xff0c;降低客户信任度…

数字化装备场转型,RFID军标桌面发卡器再现创新风暴

在过去&#xff0c;人们主要依靠条形码扫描枪、简单手工抄录等方式来记录数据。部队数字化装备场的出现&#xff0c;对普通发卡器有更高层次的需求&#xff1a;广州一芯未来在传统发卡器基础上&#xff0c;研发出一款利用无线射频信号与RFID军标标签进行通信的设备——RFID军标…

三线表学习记录

参考链接 1&#xff0c;必须使用三线表&#xff1f;全线表如何改为三线表&#xff1f; 这个帖子写的不错。 2&#xff0c;https://www.zhihu.com/question/609126613/answer/3368122091 我设置了三线表格式&#xff0c;可以直接套用。 这块学习先到此为止&#xff0c;7月4号…

新闻发布及管理系统-计算机毕业设计源码21929

新闻发布及管理系统的设计与实现 摘 要 新闻发布及管理系统的设计与实现&#xff0c;是当下信息社会发展的重要一环。随着互联网的普及和新闻媒体的数字化转型&#xff0c;一个高效、稳定且功能全面的新闻发布与管理平台显得尤为重要。SpringBoot框架以其简洁、快速和易于集成的…

什么是声明式编程?发展趋势怎么样的?

一、什么是声明式编程&#xff1f; 声明式编程&#xff08;Declarative programming&#xff09;是一种编程范式&#xff0c;与命令式编程相对立。它主要描述目标的性质&#xff0c;让计算机明白目标&#xff0c;而非具体的执行流程。在声明式编程中&#xff0c;开发者只需声明…

程序员,去哪个城市工作更幸福?

深漂、沪漂、京漂、杭漂……又是一年毕业季&#xff0c;作为CS专业or新手程序员会选择什么城市工作呢&#xff1f;希望这篇文章给各位一些参考。 根据拉勾招聘大数据研究院的数据显示&#xff0c;超六成程序员集中在一线城市&#xff0c;其中北京19%&#xff0c;深圳16%&#x…

程序员自由创业周记#37:程序员创业的几个方向

程序员自由创业周记#37&#xff1a;程序员创业的几个方向 报志愿 这几天亲戚一外甥报志愿&#xff0c;让我推荐&#xff0c;我基于自己的认知觉得还是计算机相关是第一优选&#xff0c;即便现在各大互联网公司都过得不怎么好&#xff0c;裁员的消息此起彼伏&#xff0c;很多计…

UE5 01-给子弹一个跟角色一致的向前的方向的冲量

默认Pawn 负责角色位置, 默认PlayerController 负责记录角色相机旋转

微信全民经纪人活动怎么搭建

在这个信息爆炸的时代&#xff0c;如何借助微信这一拥有数亿用户的社交平台&#xff0c;让每一个普通人都成为我们产品的“经纪人”&#xff0c;共同推动品牌的发展&#xff0c;成为了我们面临的重大课题。今天&#xff0c;我们将为您揭开一场以“全民经纪人”为主题的活动盛宴…

开发一套java语言的智能导诊需要什么技术?java+ springboot+ mysql+ IDEA互联网智能3D导诊系统源码

开发一套java语言的智能导诊需要什么技术&#xff1f;java springboot mysql IDEA互联网智能3D导诊系统源码 医院导诊系统是一种基于互联网和3D人体的智能化服务系统&#xff0c;旨在为患者提供精准、便捷的医院就诊咨询服务。该系统整合了医院的各种医疗服务资&#xff1b;智慧…

google::protobuf命名空间下常用的C++ API----message.h

#include <google/protobuf/message.h> namespace google::protobuf 假设您有一个消息定义为: message Foo {optional string text 1;repeated int32 numbers 2; } 然后&#xff0c;如果你使用 protocol编译器从上面的定义生成一个类&#xff0c;你可以这样使用它: …

跳妹儿学编程之ScratchJr(7):动作积木篇—爸爸去散步

引言 在之前的文章中&#xff0c;我们共同踏出了使用ScratchJr编程的第一步。现在&#xff0c;我们对ScratchJr已经有了初步的认识。今天&#xff0c;我们将正式启程&#xff0c;深入探索ScratchJr的编程世界。我们将逐一学习并实践每一种类型的指令&#xff08;积木块&#x…

基于uniapp(Vue3)自定义开发云闪付小程序

云闪付小程没有类似微信或支付宝小程序那样自己的框架&#xff0c;本质是开发一个H5&#xff0c;部署到自己的服务器上&#xff0c;然后在云闪付小程序平台配置首页链接。开发的H5要保证能使用官方的SDK和组件库。 项目基础配置 将以下代码配置入package.json "uni-app…

Navicat Premium16 解锁版安装教程,亲测可用!

前言 “Navicat”是一套可创建多个连接的数据库管理工具&#xff0c;用以方便管理 MySQL、Oracle、PostgreSQL、SQLite、SQL Server、MariaDB 和/或 MongoDB 等不同类型的数据库&#xff0c;并支持管理某些云数据库。Navicat 的功能足以符合专业开发人员的所有需求&#xff0c…

Spring 泛型依赖注入

Spring 泛型依赖注入&#xff0c;是利用泛型的优点对代码时行精简&#xff0c;将可重复使用的代码全部放到一个类之中&#xff0c;方便以后的维护和修改&#xff0c;同时在不增加代码的情况下增加代码的复用性。 示例代码&#xff1a; 创建实体类 Product package test.spri…

2024年APMCP亚太杯中文赛B题完整解析 | 代码与论文分享

B题 洪水灾害的数据分析与预测 解题思路问题一问题二问题三问题四 论文问题一2.1 Kolmogorov-Smirnov分布检验模型的建立与求解2.2 基于斯皮尔曼相关系数的相关性检验 代码问题一Q1_1.mQ1_2.mQ1_3.m &#xff08;后续资料更新 关注公众号 云顶数模 领取相关资料&#xff09; 解…