【鸿蒙】0x02-LiteOS-M基于Qemu RISC-V运行
OpenHarmony LiteOS-M基于Qemu RISC-V运行
- 系列文章目录
- 更新日志
- OpenHarmony技术架构
- OH技术架构
- OH支持系统类型
- 轻量系统(mini system)
- 小型系统(small system)
- 标准系统(standard system)
- 简介
- 环境准备
- 安装QEMU
- 其他
- 代码
- 预编译
- 编译
- 编译前注意事项
- 执行编译
- 编译产物
- 在Qemu中运行OHOS_Image镜像
- 不开启gdb调试
- 开启gdb调试
- gdb 运行
- FAQ
- [OHOS ERROR] ccache: error: Could not find compiler "riscv32-unknown-elf-gcc" in PATH
- riscv32-unknown-elf-gdb: error while loading shared libraries: libncursesw.so.5: cannot open shared object file: No such file or directory
- 参考资料
系列文章目录
【鸿蒙】0x00-OpenHarmony-4.1-Release DAYU200 RK3568开发环境总结(长文版)
【鸿蒙】0x01-LiteOS-M基于Qemu Arm Cortex-m55运行
【鸿蒙】0x02-LiteOS-M基于Qemu RISC-V运行
更新日志
日期 | 变更内容 |
---|---|
2025-01-17 | 完成OpenHarmony轻量系统基于RISCV编译运行第一版 |
OpenHarmony技术架构
OH技术架构
OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件。OpenHarmony技术架构如下所示:
- 内核层
内核子系统:采用多内核(Linux内核或者LiteOS)设计,支持针对不同资源受限设备选用适合的OS内核。内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。
驱动子系统:驱动框架(HDF)是系统硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架。
- 系统服务层
系统服务层是OpenHarmony的核心能力集合,通过框架层对应用程序提供服务。该层包含以下几个部分:
系统基本能力子系统集:为分布式应用在多设备上的运行、调度、迁移等操作提供了基础能力,由分布式软总线、分布式数据管理、分布式任务调度、公共基础库、多模输入、图形、安全、AI等子系统组成。
基础软件服务子系统集:提供公共的、通用的软件服务,由事件通知、电话、多媒体、DFX(Design For X) 等子系统组成。
增强软件服务子系统集:提供针对不同设备的、差异化的能力增强型软件服务,由智慧屏专有业务、穿戴专有业务、IoT专有业务等子系统组成。
硬件服务子系统集:提供硬件服务,由位置服务、用户IAM、穿戴专有硬件服务、IoT专有硬件服务等子系统组成。
根据不同设备形态的部署环境,基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集内部可以按子系统粒度裁剪,每个子系统内部又可以按功能粒度裁剪。
- 框架层
框架层为应用开发提供了C/C++/JS等多语言的用户程序框架和Ability框架,适用于JS语言的ArkUI框架,以及各种软硬件服务对外开放的多语言框架API。根据系统的组件化裁剪程度,设备支持的API也会有所不同。
- 应用层
应用层包括系统应用和第三方非系统应用。应用由一个或多个FA(Feature Ability)或PA(Particle Ability)组成。其中,FA有UI界面,提供与用户交互的能力;而PA无UI界面,提供后台运行任务的能力以及统一的数据访问抽象。基于FA/PA开发的应用,能够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用体验。
OH支持系统类型
轻量系统(mini system)
面向MCU类处理器例如Arm Cortex-M、RISC-V 32位的设备,硬件资源极其有限,支持的设备最小内存为128KiB,可以提供多种轻量级网络协议,轻量级的图形框架,以及丰富的IOT总线读写部件等。可支撑的产品如智能家居领域的连接类模组、传感器设备、穿戴类设备等。
小型系统(small system)
面向应用处理器例如Arm Cortex-A的设备,支持的设备最小内存为1MiB,可以提供更高的安全能力、标准的图形框架、视频编解码的多媒体能力。可支撑的产品如智能家居领域的IP Camera、电子猫眼、路由器以及智慧出行领域的行车记录仪等。
标准系统(standard system)
面向应用处理器例如Arm Cortex-A的设备,支持的设备最小内存为128MiB,可以提供增强的交互能力、3D GPU以及硬件合成能力、更多控件以及动效更丰富的图形能力、完整的应用框架。可支撑的产品如高端的冰箱显示屏。
简介
Qemu RISC-V虚拟化平台验证的OpenHarmony kernel_liteos_m的代码,目录名为riscv32_virt。 RISC-V 虚拟化平台是一个 qemu-system-riscv32 的目标设备,通过它来模拟一个通用的、基于RISC-V架构的单板。
这次模拟的配置是:RISC-V架构,1个CPU,128M内存。
提示: 系统内存硬编码为128MB。
环境准备
安装QEMU
sudo apt install build-essential zlib1g-dev pkg-config libglib2.0-dev binutils-dev libboost-all-dev autoconf libtool libssl-dev libpixman-1-dev virtualenv flex bison
- QEMU获取源码
wget https://download.qemu.org/qemu-6.2.0.tar.xz
- 编译安装QEMU
tar -xf qemu-6.2.0.tar.xz
cd qemu-6.2.0
mkdir build && cd build
../configure --prefix=qemu_installation_path
make -j16等待编译结束, 执行安装命令:
make install
- 环境变量
最后将安装路径添加到环境变量中:
vim ~/.bashrc在~/.bashrc最末尾加入:
export PATH=$PATH:qemu_installation_path
其他
repo、python环境、hb命令安装等, 建议参考: 【鸿蒙】0x00-OpenHarmony-4.1-Release DAYU200 RK3568开发环境总结(长文版)
代码
- 从版本分支获取源码。可获取该版本分支的最新源码,包括版本发布后在该分支的合入
repo init -u https://gitee.com/openharmony/manifest -b OpenHarmony-v5.0.0-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
- 从版本发布Tag节点获取源码。可获取与版本发布时完全一致的源码。
repo init -u git@gitee.com:openharmony/manifest.git -b refs/tags/OpenHarmony-v5.0.0-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
- 代码目录
(py3_env) ➜ rv_oh ll
total 76K
drwxrwxr-x 4 bigdark bigdark 4.0K 1月 18 00:02 applications
drwxrwxr-x 6 bigdark bigdark 4.0K 1月 18 00:03 arkcompiler
drwxrwxr-x 26 bigdark bigdark 4.0K 1月 18 00:03 base
drwxrwxr-x 20 bigdark bigdark 4.0K 1月 18 00:03 build
lrwxrwxrwx 1 bigdark bigdark 28 1月 18 00:03 build.py -> build/build_scripts/build.py
lrwxrwxrwx 1 bigdark bigdark 28 1月 18 00:03 build.sh -> build/build_scripts/build.sh
drwxrwxr-x 7 bigdark bigdark 4.0K 1月 18 00:03 commonlibrary
drwxrwxr-x 14 bigdark bigdark 4.0K 1月 18 00:03 developtools
drwxrwxr-x 5 bigdark bigdark 4.0K 1月 18 00:03 device
drwxrwxr-x 6 bigdark bigdark 4.0K 1月 18 00:04 docs
drwxrwxr-x 3 bigdark bigdark 4.0K 1月 18 00:04 domains
drwxrwxr-x 7 bigdark bigdark 4.0K 1月 18 00:04 drivers
drwxrwxr-x 19 bigdark bigdark 4.0K 1月 18 00:05 foundation
drwxrwxr-x 3 bigdark bigdark 4.0K 1月 18 00:05 ide
drwxrwxr-x 4 bigdark bigdark 4.0K 1月 18 00:05 interface
drwxrwxr-x 6 bigdark bigdark 4.0K 1月 18 00:06 kernel
drwxrwxr-x 10 bigdark bigdark 4.0K 1月 18 00:06 napi_generator
drwxrwxr-x 3 bigdark bigdark 4.0K 1月 18 00:06 productdefine
lrwxrwxrwx 1 bigdark bigdark 28 1月 18 00:10 qemu-run -> vendor/ohemu/common/qemu-run
drwxrwxr-x 5 bigdark bigdark 4.0K 1月 18 00:06 test
drwxrwxr-x 116 bigdark bigdark 4.0K 1月 18 00:10 third_party
drwxrwxr-x 5 bigdark bigdark 4.0K 1月 18 00:10 vendor
- 文件占用空间
(py3_env) ➜ rv_oh du -d1 -h
18G ./.repo
11G ./third_party
66M ./drivers
288K ./productdefine
669M ./applications
940M ./developtools
39M ./vendor
988K ./domains
16G ./prebuilts
12M ./build
14M ./commonlibrary
122M ./interface
445M ./arkcompiler
1.1G ./test
2.1G ./docs
475M ./base
2.1G ./foundation
733M ./device
2.8G ./kernel
49M ./napi_generator
2.5M ./ide
56G
就知道你们喜欢看图片~~
预编译
下载clang等编译工具链依赖。
bash build/prebuilts_download.sh
效果图:
编译
编译前注意事项
在开始正式编译之前,建议清空
~/.ccache
目录, 执行rm ~/.ccache
- 开发板:
riscv32_virt
- 内核:
liteos_m
- 产品:
qemu_riscv_mini_system_demo
执行编译
- 在源码所在目录执行
./build.sh --product-name=qemu_riscv_mini_system_demo --device-name=qemu_riscv_mini_system_demo --no-prebuilt-sdk --jobs=4 --ccache
- 编译过程
[OHOS INFO] [1379/1382] ACTION //build/ohos/packages:packer(//build/lite/toolchain:riscv32-unknown-elf)
[OHOS INFO] [1380/1382] STAMP obj/build/ohos/packages/packer.stamp
[OHOS INFO] [1381/1382] STAMP obj/build/ohos/images/make_images.stamp
[OHOS INFO] [1382/1382] STAMP obj/build/core/gn/images.stamp
[OHOS INFO] end hpm command
[OHOS INFO] The run time for _ninja is 59.1 s
[OHOS INFO] start run hpm command
[OHOS INFO] ccache_dir = /home/bigdark/.ccache, ccache_exec = /usr/bin/ccache
[OHOS INFO] --------------------------------------------
[OHOS INFO] ccache summary:
[OHOS INFO] ccache version: 4.5.1
[OHOS INFO] cache hit (direct): 0
[OHOS INFO] cache hit (preprocessed): 0
[OHOS INFO] cache miss: 1091
[OHOS INFO] hit rate: 0.00%
[OHOS INFO] miss rate: 100.00%
[OHOS INFO] Cache size (GB): 8.02 / 100.00 (8.02 %)
[OHOS INFO] ---------------------------------------------
[OHOS INFO] end hpm command
[OHOS INFO] start run hpm command
[OHOS INFO] end hpm command
[OHOS INFO] start run hpm command
[OHOS INFO] unrecognized ninja log format, we need # ninja log v5
[OHOS INFO]
[OHOS INFO] end hpm command
[OHOS INFO] start run hpm command
[OHOS INFO] c targets overlap rate statistics
[OHOS INFO] subsystem files NO. percentage builds NO. percentage overlap rate
[OHOS INFO] ability 21 1.9% 21 1.9% 1.00
[OHOS INFO] arkui 218 19.7% 218 19.7% 1.00
[OHOS INFO] bundlemanager 19 1.7% 19 1.7% 1.00
[OHOS INFO] commonlibrary 9 0.8% 9 0.8% 1.00
[OHOS INFO] distributeddatamgr 2 0.2% 2 0.2% 1.00
[OHOS INFO] global 18 1.6% 18 1.6% 1.00
[OHOS INFO] graphic 24 2.2% 24 2.2% 1.00
[OHOS INFO] hdf 84 7.6% 84 7.6% 1.00
[OHOS INFO] hiviewdfx 12 1.1% 12 1.1% 1.00
[OHOS INFO] kernel 68 6.2% 68 6.2% 1.00
[OHOS INFO] startup 26 2.4% 26 2.4% 1.00
[OHOS INFO] systemabilitymgr 15 1.4% 15 1.4% 1.00
[OHOS INFO] thirdparty 554 50.2% 554 50.2% 1.00
[OHOS INFO]
[OHOS INFO] c overall build overlap rate: 1.00
[OHOS INFO]
[OHOS INFO]
[OHOS INFO] end hpm command
[OHOS INFO] qemu_riscv_mini_system_demo build success
[OHOS INFO] Cost Time: 0:01:08
=====build successful=====
2025-01-18 00:59:40
++++++++++++++++++++++++++++++++++++++++
- 给你配个图
编译产物
构建会产生 OHOS_Image
的镜像文件,在构建完成之后,对应的镜像文件在如下目录:
out/riscv32_virt/qemu_riscv_mini_system_demo
- 文件目录结构展示
(py3_env) ➜ out tree -L 3
.
├── hb_args
├── ohos_config.json
├── preloader
│ └── qemu_riscv_mini_system_demo
│ ├── build_config.json
│ ├── build_gnargs.prop
│ ├── build.prop
│ ├── compile_env_allowlist.json
│ ├── compile_standard_whitelist.json
│ ├── exclusion_modules.json
│ ├── features.json
│ ├── mini_system
│ ├── parts_config.json
│ ├── parts.json
│ ├── platforms.build
│ ├── subsystem_config.json
│ ├── syscap.json
│ ├── system
│ └── SystemCapability.json
└── riscv32_virt└── qemu_riscv_mini_system_demo├── all_parts_host.json├── all_parts_info.json├── args.gn├── arkui├── binary_installed_parts.json├── build.1737131970.3223417.log├── build.1737132046.1569324.log├── build.1737132120.5011375.log├── build_configs├── build.log├── build.ninja├── build.ninja.d├── build.trace.gz├── bundlemanager├── config.gni├── config.h├── data├── error.log├── etc├── gen├── global├── hiviewdfx├── kconfig_env.txt├── kconfig_files.txt├── libs├── NOTICE_FILE├── NOTICE_FILES├── obj├── OHOS_Image├── OHOS_Image.asm├── OHOS_Image.bin├── OHOS_Image.map├── OHOS_Image.sym.sorted├── packages├── sorted_action_duration.txt├── src_installed_parts.json├── src_sa_infos_tmp.json├── startup├── system├── test_info├── thirdparty└── toolchain.ninja24 directories, 39 files
在Qemu中运行OHOS_Image镜像
a) 如果没有安装 qemu-system-riscv32
,安装请参考链接:安装QEMU
不开启gdb调试
b) 运行
开启gdb调试
在代码所在目录下:
cd device/qemu/riscv32_virt
vim liteos_m/config.gni
将 board_opt_flags
中的
board_opt_flags = []
编译选项board_opt_flags
修改为:
board_opt_flags = [ "-g" ]
保存并退出,在OHOS根目录重新编译:
./build.sh --product-name=qemu_riscv_mini_system_demo --device-name=qemu_riscv_mini_system_demo --no-prebuilt-sdk --jobs=4 --ccache
gdb 运行
在窗口①中输入命令:
./qemu-run -g会卡主在这里
在另一个窗口②中输入命令:
riscv32-unknown-elf-gdb out/riscv32_virt/qemu_riscv_mini_system_demo/OHOS_Image
(gdb) target remote localhost:1234
(gdb) b main
详细信息
同时第一控制台可以看到有窗口①处于运行模式:
FAQ
[OHOS ERROR] ccache: error: Could not find compiler “riscv32-unknown-elf-gcc” in PATH
参考: 安装riscv-gnu-toolchain交叉编译工具链
Compiler install:gcc_riscv32, Note: Downloadable directly
wget https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gztar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~
cd gcc_riscv32
编辑.bashrc
文件, 我的是 .zshrc
vim ~/.bashrc
将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
export PATH=~/gcc_riscv32/bin:$PATH
生效环境变量。
source ~/.bashrc
shell命令行中输入如下命令,如果能正确显示编译器版本号,表明编译器安装成功。
riscv32-unknown-elf-gcc -v
riscv32-unknown-elf-gdb: error while loading shared libraries: libncursesw.so.5: cannot open shared object file: No such file or directory
sudo apt install libncursesw5
参考资料
- https://gitee.com/openharmony/manifest/tree/OpenHarmony-v5.0.0-Release/
- https://blog.csdn.net/bigdarknote/category_12749198.html
- https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/quickstart-pkg-3861-tool.md
相关文章:

【鸿蒙】0x02-LiteOS-M基于Qemu RISC-V运行
OpenHarmony LiteOS-M基于Qemu RISC-V运行 系列文章目录更新日志OpenHarmony技术架构OH技术架构OH支持系统类型轻量系统(mini system)小型系统(small system)标准系统(standard system) 简介环境准备安装QE…...

SW - 钣金零件保存成DWG时,需要将折弯线去掉
文章目录 SW - 钣金零件保存成DWG时,需要将折弯线去掉概述笔记备注END SW - 钣金零件保存成DWG时,需要将折弯线去掉 概述 如果做需要弯折的切割件,最好做成钣金零件。 最近做了几个小钣金(将钣金展开,建立新草图,在2…...

JAVA使用自定义注解,在项目中实现EXCEL文件的导出
首先定义一个注解 Retention(RetentionPolicy.RUNTIME) Target(ElementType.FIELD) public interface Excel {/*** 导出时在excel中排序*/int sort() default Integer.MAX_VALUE;/*** 导出到Excel中的名字.*/String name() default "";/*** 首行字段的批注*/String …...

【GIS操作】使用ArcGIS Pro进行海图的地理配准(附:墨卡托投影对比解析)
文章目录 一、应用场景二、墨卡托投影1、知识点2、Arcgis中的坐标系选择 三、操作步骤1、数据转换2、数据加载3、栅格投影4、地理配准 一、应用场景 地理配准是数字化之前必须进行的一项工作。扫描得到的地图数据通常不包含空间参考信息,需要通过具有较高位置精度的…...
flutter在使用gradle时的加速
当我使用了一些过时的插件的时候,遇到了一些问题 比如什么namespace 问题等,因为有些插件库没有更新了,或者最新版本处于测试阶段 于是我就删除这些旧插件(不符合我要求的插件) 于是根据各论坛的解决方法去做了以下的工作 1:项目中删除了这…...

ABP - 缓存模块(1)
ABP - 缓存模块(1) 1. 与 .NET Core 缓存的关系和差异2. Abp 缓存的使用2.1 常规使用2.2 非字符串类型的 Key2.3 批量操作 3. 额外功能 1. 与 .NET Core 缓存的关系和差异 ABP 框架中的缓存系统核心包是 Volo.Abp.Caching ,而对于分布式缓存…...

二、点灯基础实验
嵌入式基础实验第一个就是点灯,地位相当于编程界的hello world。 如下为LED原理图,要让相应LED发光,需要给I/O口设置输出引脚,低电平,二极管才会导通 2.1 打开初始工程,编写代码 以下会实现BLINKY常亮&…...

双端队列实战 实现滑动窗口 用LinkedList的基类双端队列Deque实现 洛谷[P1886]
集合 关系 介绍 Deque 是一个接口 LinkedList 是这个接口的实现类 题目 输入输出 滑动窗口 基于双端队列实现 Deque<Integer> deque new LinkedList<>(); 滑动窗口代码 public static List<Integer> maxSlidingWindow(int[] nums, int k) {List<Int…...

HTML<img>标签
例子 如何插入图片: <img src"img_girl.jpg" alt"Girl in a jacket" width"500" height"600"> 下面有更多“自己尝试”的示例。 定义和用法 该<img>标签用于在 HTML 页面中嵌入图像。 从技术上讲&#x…...

【网络 MAC 学习专栏 -- 如何理解 PHY 的 Link Up】
请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 OverviewClause 22/Clause 45Clause 22Clause 45 PHY Link 状态的软件实现 转自: 开心果 Need Car 2022年10月20日 09:50 上海 Overview PHY…...

Linux虚拟机安装与FinalShell使用:探索Linux世界的便捷之旅
文章目录 软件准备安装 VMware 虚拟机下载CentOS 光盘镜像文件选择适合的 CentOS 版本选择合适的镜像文件 本教程工具版本 第一部分:安装 Linux 虚拟机1. 启动 VMware 并创建新虚拟机2. 默认硬件兼容性设置3. 安装操作系统的设置4. 选择操作系统类型与版本5. 为虚拟…...
Mixly米思齐1.0 2.0 3.0 软件windows版本MAC苹果电脑系统安装使用常见问题与解决
Mixly软件应用常见问题 Mixly米思齐编译或上传报错? 1、软件安装与驱动(Mixly1-2) 1-1 Windows版本 软件及驱动可以在Mixly群(QQ群号621937623)的群文件夹中找到,或到Mixly在线软件下载链接中重新下安装…...
vben5 admin ant design vue如何使用时间范围组件RangePicker
本文参考:https://pusdn-dev.feishu.cn/wiki/VF4hwBAUliTE6TkUPKrcBNcZn9f?fromfrom_copylink 由PUSDN整理发行,收录时请保留PUSDN。 前端组件专题 年月日时间范围表单回显RangePicker 推荐使用多个字段存储,不推荐用英文逗号拼接时间&am…...

Kafka 日志存储 — 文件目录及日志格式
日志存储机制是Kafka实现高吞吐量和持久化能力的关键。 1 文件目录布局 图 主题与日志文件的关系 Kafka中的消息持久化为日志文件。一个副本对应一个日志。日志文件在broker上是命名形式为<topic>-<partition>的文件夹。例如,主题par3第3分区在某个副…...

故障诊断 | BWO白鲸算法优化KELM故障诊断(Matlab)
目录 效果一览文章概述BWO白鲸算法优化KELM故障诊断一、引言1.1、研究背景及意义1.2、故障诊断技术的现状1.3、研究目的与内容二、KELM基本理论2.1、KELM模型简介2.2、核函数的选择2.3、KELM在故障诊断中的应用三、BWO白鲸优化算法3.1、BWO算法基本原理3.2、BWO算法的特点3.3、…...

一文读懂AI Agent 智能体
一、什么是智能体Agent? 在计算机科学和人工智能领域,智能体(Agent) 是一个抽象的概念,用于描述能够感知环境、执行行动并以此对环境产生影响的实体。智能体通常被设计成具有自主性和适应性,能够在不确定、…...
《 C++ 点滴漫谈: 二十二 》操作符炼金术:用C++ operator重塑代码美学
摘要 C 的 operator 关键字和操作符重载是语言的核心特性之一,使开发者能够扩展内置操作符以适应自定义类型,从而实现更高效、直观的代码表达。本文全面解析了 operator 关键字的基本概念、支持重载的操作符范围及其使用场景,详细介绍了操作…...

通信协议之多摩川编码器协议
前言 学习永无止境!本篇是通信协议之多摩川编码器协议,主要介绍RS485硬件层以及软件层帧格式。 注:本文章为学习笔记,部分图片与文字来源于网络/应用手册,如侵权请联系!谢谢! 一、多摩川协议概述…...

新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵
本博文内容导读📕🎉🔥 ESP32开发板的中断矩阵、功能描述与实现、相关API和示例程序进行介绍 ESP32中断矩阵将任一外部中断源单独分配到每个CPU的任一外部中断上,提供了强大的灵活性,能适应不同的应用需求。 ESP32中断主…...
4329 树的连边II
通过链式前向星来求树的直径 主要包括:链式前向星的初始化,遍历,使用 #include<bits/stdc.h> using namespace std; using lllong long; const int N1e59; int n,head[N],to[N<<1],nx[N<<1],cnt0; int ans0; int dp[N][2…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...