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

OpenharmonyOS+RK3568,【编译烧录】

请添加图片描述

文章目录

  • 1. 摘要 ✨
  • 2. 代码下载 📩
  • 3. 编译 🖥️
  • 4. 修改&适配 ✂️
    • 4.1 编译框架基本概念
    • 4.2 vendor & device 目录
    • 4.3 内核编译
      • 4.3.1 如何修改、适配自己的开发板?
    • 4.4 修改外设驱动
  • 5. 烧录&验证 📋
  • 参考


1. 摘要 ✨

本篇主要记录如何编译OpenHarmony 4.1 版本,并且在RK3568上烧录、运行的过程。
其中,涉及到一些解决问题的思路和学习笔记,如果对你有帮助请点赞、转发、收藏,也非常欢迎各位小伙伴评论,交流。😊💐👍👍👍


2. 代码下载 📩

请参考官方文档【1】
注意:版本要下载正确[OpenHarmony-v4.1-Release]

repo init -u git@gitee.com:openharmony/manifest.git -b OpenHarmony-v4.1-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

3. 编译 🖥️

关于编译,可能遇到的问题会比较多,不过也不要担心,只要严格按照文档中的步骤进行操作,安装必须的依赖,就不会有问题。

参考【2】。

建议使用安装Ubuntu的虚拟机或者Ubuntu主机,博主使用WSL2编译遇到各种问题,解决花费了大量时间,得不偿失

最重要的不步骤是安装库和工具集:
✅ 使用如下apt-get命令安装后续操作所需的库和工具:

sudo apt-get update; sudo apt-get install binutils; sudo apt-get install binutils-dev; sudo apt-get install git; sudo apt-get install git-lfs; sudo apt-get install gnupg; sudo apt-get install flex; sudo apt-get install bison; sudo apt-get install gperf; sudo apt-get install build-essential; sudo apt-get install zip; sudo apt-get install curl; sudo apt-get install zlib1g-dev; sudo apt-get install gcc-multilib; sudo apt-get install g++-multilib; sudo apt-get install gcc-arm-linux-gnueabi; sudo apt-get install libc6-dev-i386; sudo apt-get install libc6-dev-amd64; sudo apt-get install lib32ncurses5-dev; sudo apt-get install x11proto-core-dev; sudo apt-get install libx11-dev; sudo apt-get install lib32z1-dev; sudo apt-get install ccache; sudo apt-get install libgl1-mesa-dev; sudo apt-get install libxml2-utils; sudo apt-get install xsltproc; sudo apt-get install unzip; sudo apt-get install m4; sudo apt-get install bc; sudo apt-get install gnutls-bin; sudo apt-get install python3.9; sudo apt-get install python3-pip; sudo apt-get install ruby; sudo apt-get install genext2fs; sudo apt-get install device-tree-compilersudo apt-get install make; sudo apt-get install libffi-dev; sudo apt-get install e2fsprogs; sudo apt-get install pkg-config; sudo apt-get install perl; sudo apt-get install openssl; sudo apt-get install libssl-dev; sudo apt-get install libelf-dev; sudo apt-get install libdwarf-dev; sudo apt-get install u-boot-tools; sudo apt-get install mtd-utils; sudo apt-get install cpio; sudo apt-get install doxygen; sudo apt-get install liblz4-tool; sudo apt-get install openjdk-8-jre; sudo apt-get install gcc; sudo apt-get install g++; sudo apt-get install texinfo; sudo apt-get install dosfstools; sudo apt-get install mtools; sudo apt-get install default-jre; sudo apt-get install default-jdk; sudo apt-get install libncurses5; sudo apt-get install apt-utils; sudo apt-get install wget; sudo apt-get install scons; sudo apt-get install python3.9-distutils; sudo apt-get install tar; sudo apt-get install rsync; sudo apt-get install git-core; sudo apt-get install libxml2-dev; sudo apt-get install lib32z-dev; sudo apt-get install grsync; sudo apt-get install xxd; sudo apt-get install libglib2.0-dev; sudo apt-get install libpixman-1-dev; sudo apt-get install kmod; sudo apt-get install jfsutils; sudo apt-get install reiserfsprogs; sudo apt-get install xfsprogs; sudo apt-get install squashfs-tools; sudo apt-get install pcmciautils; sudo apt-get install quota; sudo apt-get install ppp; sudo apt-get install libtinfo-dev; sudo apt-get install libtinfo5; sudo apt-get install libncurses5-dev; sudo apt-get install libncursesw5; sudo apt-get install libstdc++6; sudo apt-get install gcc-arm-none-eabi; sudo apt-get install vim; sudo apt-get install ssh; sudo apt-get install locales; sudo apt-get install libxinerama-dev; sudo apt-get install libxcursor-dev; sudo apt-get install libxrandr-dev; sudo apt-get install libxi-dev

✅ 将Python 3.8设置为默认Python版本。
查看Python 3.8的位置:

which python3.8

如果无输出请在环境中安装python3.8或以上版本,以下安装命令可作为python3安装的参考:

sudo apt-get install python3
sudo apt-get install python-is-python3

查询python是否可用符合版本要求

python --version

如果输出高于3.8,则版本符合要求,若低于3.8可用以下方式安装Python3.8:

cd
mkdir python_install     #新建路径,存储python的安装包
cd python_installwget https://mirrors.huaweicloud.com/python/3.8.10/Python-3.8.10.tgz    #从官网获取Python3.8安装包,此处以3.8.10版本为例
tar -xzf Python-3.8.10.tgz 
cd Python-3.8.10./configure --enable-optimizations --prefix=/usr/local/python3.8    #编译和安装python3.8
make -j$(nproc)
sudo make install/usr/local/python3.8/bin/python3.8 --version    #确认python3.8是否安装成功sudo update-alternatives --install /usr/bin/python python /usr/local/python3.8/bin/python3.8 1     #将Python和Python3切换为Python 3.8:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/python3.8/bin/python3.8 1

环境依赖安装、配置好后,OpenHarmony仓也有编译前置依赖,直接执行脚本即可:

bash build/prebuilts_download.sh

然后,再安装编译工具hb:
✅ 在源码根目录运行如下命令安装hb并更新至最新版本。

python3 -m pip install --user build/hb

✅ 设置环境变量。

vim ~/.bashrc

将以下命令拷贝到.bashrc文件的最后一行,保存并退出。

export PATH=~/.local/bin:$PATH

执行如下命令更新环境变量。

source ~/.bashrc

✅ 在源码目录执行"hb help",界面打印以下信息即表示安装成功。
在这里插入图片描述


最后,参考【3】,编译源码:

/build.sh --product-name rk3568 --ccache

经过几个小时的编译,可以看到,终端提示编译成功。
在这里插入图片描述


查看,编译后的镜像:
在这里插入图片描述


在这里插入图片描述


固件说明
boot_linux.img这是包含 Linux 内核的镜像文件,负责启动 Openharmony 系统的核心功能
chip_ckm.img
chip_prod.img该镜像文件用于芯片制造商在芯片生产过程中烧录到芯片中的系统镜像
config.cfg烧写工具的配置文件,可以直接导入烧写工具显示需要烧写的选项
eng_system.img这是用于工程调试和测试的系统镜像文件,包含了额外的调试工具和功能
MiniLoaderAll.bin这是一个引导加载程序,负责启动 Openharmony 系统的初始化过程
parameter.txt包含分区信息
ramdisk.img该镜像文件包含一个临时文件系统,用于在系统启动过程中提供临时存储 和加载所需的文件
resource.img该镜像文件包含 Openharmony 系统所需的资源文件,如字体,图标,音 频等。
sys_prod.img这是用于生产环境的系统镜像文件,用于制造商在设备生产过程中烧录到 设备中。
system.img这是 Openharmony 系统的主要镜像文件,包含了操作系统的核心组件, 库和应用程序
uboot.img这是 U-boot 引导加载程序的镜像文件,用于初始化硬件设备和加载操作 系统
updater.img这是用于系统升级的镜像文件,包含了系统更新时所需的文件和信息
userdata.img该镜像文件包含用户的数据和设置,如应用程序数据,用户配置等
vendor.img该镜像文件包含设备供应商提供的特定驱动程序,库和配置文件

在这里插入图片描述


进行到这一步,说明编译环境,编译依赖都没问题。

那想要让OpenHarmony在我们的板子上跑起来,还需要修改一下内核配置、外设驱动等,下面我们继续。


4. 修改&适配 ✂️

4.1 编译框架基本概念

OpenHarmony 的编译框架是基于模块化的,从大到小依次划分为产品,子系统集(领域), 子系统,部件,模块,特性。这种模块化的树状编译框架,非常方便根据目标产品硬件资源 的大小进行灵活的裁剪,从而实现“统一 OS,弹性部署”的目标。
在这里插入图片描述
✅ 产品:产品是基于解决方案为开发板的完整产品,主要包含产品对 OS 的适配、部件拼装 配置、启动配置和文件系统配置等。build.sh 编译的时候通过–product-name 编译选项指 定;hb 编译的时候通过 hb set 进行设置。

✅ 子系统集:OpenHarmony 技术架构中有四大子系统集:“系统基本能力子系统集”、“基 础软件服务子系统集”、“增强软件服务子系统集”、“硬件服务子系统集” 。四大子 系统不会直接出现在编译选项或者参数中,而是有对应的一级源代码文件夹:“系统基本 能力子系统集”对应源码 foundation 文件夹;“基础软件服务子系统集”和“硬件服务子 系统集”对应源码 base 文件夹;“增强软件服务子系统集”对应源码 domains 文件夹。

✅ 子系统:子系统是一个逻辑概念,它具体由对应的部件构成。在多设备部署场景下,支持 根据实际需求裁剪某些非必要的子系统或部件。

✅ 部件:对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和 编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。

✅ 模块:模块就是编译子系统的一个编译目标,部件也可以是编译目标。

✅ 特性:特性是部件用于体现不同产品之间的差异。

各部分间的关系:
一个产品(product)可以包含 n 个子系统(subsystem),一个子系统可以包含 n 个部件 (component),一个部件只能属于一个子系统。一个部件可以包含 n 个模块(module),一个模块 只能属于一个部件。 不同产品中的相同部件可以通过特性(feature)进行差异化定义 ,子系统集(domain)在源 码一级根目录有体现。
如下图所示:
在这里插入图片描述
总结一下就是:

  • 子系统是某个路径下所有部件的集合,一个部件只能属于一个子系统。
  • 部件是模块的集合,一个模块只能归属于一个部件。
  • 通过产品配置文件配置一个产品包含的部件列表,部件不同的产品配置可以复用。
  • 部件可以在不同的产品中实现有差异,通过变体或者特性feature实现。
  • 模块就是编译子系统的一个编译目标,部件也可以是编译目标。

关于编译,后面我们单独开个专题讲


4.2 vendor & device 目录

在编译的时候,输入编译命令,如下所示:

/build.sh --product-name rk3568 --ccache

从编译日志中,重点要了解和学习的目录为 vendor 和 device 目录。

vendor/hihope/rk3568
......
device/board/rockchip/rk3568

endor 目录是以 vendor/{产品解决方案厂商}/{产品名称}来存放的。 进入 vendor/hihope/rk3568 目录下,有三个很重要的文件。 产品解决方案,在 config.json 文件中进行配置。

ohos.build 文件是子系统的配置文件,每个子系统有 ohos.build 配置文件,该文件中有添 加的组件配置。

device/board/hihope/rk3568/device.gni

device/board/hihope/rk3568/config.gni config.gni 文件配置开发板相关的编译配置。


4.3 内核编译

linux 内核编译脚本的是放在 device/board/hihope/rk3568/kernel 目录下的build_kernel.sh文件。

OpenHarmony 编译脚本是通过打补丁的方式来适配不同的平台, 不同的平台有自己的内核补丁。
注意,理解这一点很重要

编译脚本会先把 kernel/linux/linux-5.10 拷贝到 out/kernel/src_tmp/linux-5.10/, 然后打上 3568 的内核补丁patch -p1 < kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch后编译生成自 己的镜像,然后编译内核镜像。


4.3.1 如何修改、适配自己的开发板?

✅ 首先进入内核基础目录 kernel/linux/linux-5.10 打上 kernel.patch,这样我们就有了一个完 整的内核代码;
✅ 进入 kernel/linux/linux-5.10/arch/arm64/boot/dts/rockchip 目录,加入自己的板级 dts 和 相关 dtsi 配置;
✅ 修改后生成新的内核补丁 kernel.patch,新的 kernel.patch 替换掉 kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch;
经过上述步骤,这样完全编译出的镜像就支持自己的板子了。


4.4 修改外设驱动

TBD.


5. 烧录&验证 📋

我们使用RKDevTool工具烧写镜像:
在这里插入图片描述


在这里插入图片描述
右键,导入配置,然后点击执行。


参考

【1】OpenHarmony/docs/sourcecode-acquire.md
【2】基于命令行开发,搭建开发环境
【3】编译构建指导

相关文章:

OpenharmonyOS+RK3568,【编译烧录】

文章目录 1. 摘要 ✨2. 代码下载 &#x1f4e9;3. 编译 &#x1f5a5;️4. 修改&适配 ✂️4.1 编译框架基本概念4.2 vendor & device 目录4.3 内核编译4.3.1 如何修改、适配自己的开发板&#xff1f; 4.4 修改外设驱动 5. 烧录&验证 &#x1f4cb;参考 1. 摘要 ✨ …...

从零开始理解 C++ 后端编程中的分布式系统

一、什么是“分布式”? 简单来说,分布式系统就是由“多个计算机(或服务器)”组成的一个大系统,它们通过网络协作完成某个任务,就像一个“团队合作”一样。 想象你开了一家餐馆,最初只有 一个厨房 和 一个服务员,所有订单都在这里处理。随着生意变好,你需要: 开分店…...

基于SpringBoot的篮球竞赛预约平台设计与实现

1.1 研究背景 科学技术日新月异的如今&#xff0c;计算机在生活各个领域都占有重要的作用&#xff0c;尤其在信息管理方面&#xff0c;在这样的大背景下&#xff0c;学习计算机知识不仅仅是为了掌握一种技能&#xff0c;更重要的是能够让它真正地使用到实践中去&#xff0c;以…...

具身系列——PPO算法实现CartPole游戏(强化学习)

完整代码参考&#xff1a; https://gitee.com/chencib/ailib/blob/master/rl/ppo_cartpole.py 执行结果&#xff1a; 部分训练得分&#xff1a; (sd) D:\Dev\traditional_nn\feiai\test\rl>python ppo_cartpole_v2_succeed.py Ep: 0 | Reward: 23.0 | Running: 2…...

小程序与快应用:中国移动互联网的渐进式革命——卓伊凡的技术演进观

小程序与快应用&#xff1a;中国移动互联网的渐进式革命——卓伊凡的技术演进观 在知乎看到很多&#xff1a;“懂王”发布的要把内行笑疯了的评论&#xff0c;卓伊凡必须怼一下&#xff0c;真印证那句话&#xff0c;无知者无畏 一、Web与小程序的技术本质差异 1.1 浏览器渲染…...

Socket 编程 UDP

Socket 编程 UDP UDP 网络编程V1 版本 - echo serverV2 版本 - DictServerV3 版本 - 简单聊天室 补充参考内容地址转换函数关于 inet_ntoa UDP 网络编程 声明&#xff1a;下面代码的验证都是用Windows作为客户端的&#xff0c;如果你有两台云服务器可以直接粘贴我在Linux下的客…...

Lua 基础 API与 辅助库函数 中关于创建的方法用法

目录 基础 API 函数1. lua_len(L, index)2. lua_load(L, reader, data, chunkname, mode)3. lua_newstate(allocator, ud)4. lua_newtable(L)5. lua_newthread(L)6. lua_newuserdata(L, size)7. lua_next(L, index) 辅助库函数&#xff08;luaL_*&#xff09;8. luaL_len(L, in…...

YOLOv11改进:利用RT-DETR主干网络PPHGNetV2助力轻量化目标检测

这里写自定义目录标题 YOLOv11改进&#xff1a;利用RT-DETR主干网络PPHGNetV2助力轻量化目标检测1. 介绍2. 引言3. 技术背景3.1 YOLOv11概述3.2 RT-DETR与PPHGNetV23.3 相关工作 4. 应用使用场景5. 详细代码实现5.1 环境准备5.2 PPHGNetV2主干网络实现5.3 YOLOv11与PPHGNetV2集…...

centos7.0无法安装php8.2/8.3

在centos安装php8.2报错 configure: error: *** A compiler with support for C17 language features is required. 配置过程检测到你的系统编译器不支持 C17 语言特性&#xff0c;而 PHP 8.2 的编译需要编译器支持 C17 sudo yum update -y sudo yum install centos-releas…...

工业传动核心部件深度剖析:丝杆升降机与气缸的技术特性及选型指南

在工业自动化技术飞速发展的当下&#xff0c;丝杆升降机与气缸作为关键的直线传动部件&#xff0c;广泛应用于各类机械设备中。对于工程师而言&#xff0c;深入了解它们的技术特性、优缺点及适用场景&#xff0c;是实现高效、精准设备设计的重要前提。本文将从技术原理出发&…...

flask 获取各种请求数据:GET form-data x-www-form-urlencoded JSON headers 上传文件

在 Flask 里&#xff0c;能使用多种方法获取不同类型的请求数据&#xff0c;下面详细介绍常见请求数据的获取方式。 获取查询字符串参数&#xff08;GET 请求&#xff09; 查询字符串参数一般在 URL 里&#xff0c;以 ?key1value1&key2value2 这种形式存在。可通过 requ…...

c++_2011 NOIP 普及组 (1)

P1307 [NOIP 2011 普及组] 数字反转 P1307 [NOIP 2011 普及组] 数字反转 - 洛谷 # P1307 [NOIP 2011 普及组] 数字反转 ## 题目描述 给定一个整数 $N$&#xff0c;请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式&#xff0c;即除非给定的原数为零&…...

​​信息泄露:网站敏感文件泄漏的隐形危机与防御之道​

在网络安全领域&#xff0c;​​信息泄露​​常被称为“沉默的杀手”。攻击者无需复杂漏洞&#xff0c;仅通过网站无意暴露的敏感文件&#xff08;如源码备份、配置文件、版本控制记录&#xff09;&#xff0c;即可获取数据库密码、API密钥甚至服务器权限。本文将深入剖析信息泄…...

C++笔记-多态(包含虚函数,纯虚函数和虚函数表等)

1.多态的概念 多态(polymorphism)的概念:通俗来说&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运行时多态(动态多态)&#xff0c;这里我们重点讲运行时多态&#xff0c;编译时多态(静态多态)和运行时多态(动态多态)。编译时多态(静态多态)主要就是我们前面讲的函…...

2025年- H22-Lc130-206. 反转链表(链表)---java版

1.题目描述 2.思路 使用迭代法 (1)定义一个前指针 (2)然后定义两个变量 curr&#xff08;head&#xff09;&#xff0c;curr.next。 (3)curr和curr.next交换位置&#xff08;只要当前指针不为空&#xff0c;执行两两交换&#xff09; 3.代码实现 /*** Definition for singly-…...

智能家居的OneNet云平台

一、声明 该项目只需要创建一个产品&#xff0c;然后这个产品里面包含几个设备&#xff0c;而不是直接创建几个产品 注意&#xff1a;传输数据使用到了不同的power&#xff0c;还有一定要手机先联网才能使用云平台 二、OneNet云平台创建 &#xff08;1&#xff09;Temperatur…...

二、shell脚本--变量与数据类型

1. 变量的定义与使用 定义变量&#xff1a;简单直接 在 Shell 里定义变量相当容易&#xff1a; 基本格式: variable_namevalue关键点 ❗&#xff1a;赋值号 的两边绝对不能有空格&#xff01;这绝对是初学者最容易踩的坑之一 &#x1f628;&#xff0c;务必留意&#xff01…...

GitHub Actions 和 GitLab CI/CD 流水线设计

以下是关于 GitHub Actions 和 GitLab CI/CD 流水线设计 的基本知识总结: 一、核心概念对比 维度GitHub ActionsGitLab CI/CD配置方式YAML 文件(.github/workflows/*.yml).gitlab-ci.yml执行环境GitHub 托管 Runner / 自托管GitLab 共享 Runner / 自托管市场生态Actions Mar…...

穿越数据森林与网络迷宫:树与图上动态规划实战指南

在 C 算法的浩瀚宇宙中&#xff0c;树与图就像是神秘的迷宫和茂密的森林&#xff0c;充满了未知与挑战。而动态规划则是我们探索其中的神奇罗盘&#xff0c;帮助我们找到最优路径。今天&#xff0c;就让我们一起深入这片神秘领域&#xff0c;揭开树与图上动态规划的神秘面纱&am…...

Java学习手册:Spring 生态其他组件介绍

一、微服务架构相关组件 Spring Cloud 服务注册与发现 &#xff1a; Eureka &#xff1a;由 Netflix 开源&#xff0c;包含 Eureka Server 和 Eureka Client 两部分。Eureka Server 作为服务注册表&#xff0c;接收服务实例的注册请求并管理其信息&#xff1b;Eureka Client 负…...

[android]MT6835 Android 移植brctl指令

说明 android默认brctl不支持showmacs选项&#xff0c;需要移植brctl-utils软件包 移除toybox中brctl编译 mssi/external/toybox/Android.bp 将 toybox_symlinks ["[","acpi","base64","basename","blockdev","br…...

安卓基础(悬浮窗分级菜单和弹窗)

initializeViews() 初始化 把全部的按钮都弄出来 // 主菜单按钮ImageButton mainButton floatingMenuView.findViewById(R.id.main_button);// 二级菜单按钮subButtons new ImageButton[3];subButtons[0] floatingMenuView.findViewById(R.id.sub_button_1);subButtons[1]…...

HTTP基础介绍+OSI七层参考模型+HTTP协议介绍

图片来源于网络 图片来源于网络 浏览器 Chrome:谷歌浏览器&#xff0c;推荐 Safari&#xff08;WebKit&#xff09;&#xff1a;苹果浏览器&#xff0c;iOS&#xff0c;macOS Firefox&#xff1a;火狐浏览器&#xff0c;开源插件特别多&#xff08;FireBug&#xff09; IE:Wi…...

【项目实践】boost 搜索引擎

1. 项目展示 boost搜索引擎具体讲解视频 2. 项目背景 对于boost库&#xff0c;官方是没有提供搜索功能的&#xff0c;我们这个项目就是来为它添加一个站内搜索的功能。 3. 项目环境与技术栈 • 项目环境&#xff1a; ubuntu22.04、vscode • 技术栈&#xff1a; C/C、C11、S…...

接口隔离原则(ISP)

非常好&#xff0c;**接口隔离原则&#xff08;ISP: Interface Segregation Principle&#xff09;是 SOLID 五大原则中的第四个&#xff0c;它专门解决“一个接口太臃肿”**导致的麻烦。 我来从以下几个维度详细拆解&#xff1a; &#x1f9e0; 什么是接口隔离原则&#xff1…...

Leetcode刷题记录29——矩阵置零

题源&#xff1a;https://leetcode.cn/problems/set-matrix-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked 题目描述&#xff1a; 思路一&#xff1a; &#x1f4a1; 解题思路 本题中我们采用如下策略&#xff1a; 第一次遍历整个矩阵&#xff0c;记…...

复刻低成本机械臂 SO-ARM100 组装篇(打螺丝喽)

视频讲解&#xff1a; 复刻低成本机械臂 SO-ARM100 组装篇&#xff08;打螺丝喽&#xff09; 组装的视频有很多&#xff0c;参考大佬的《手把手复刻HuggingFace开源神作之Follower机械臂组装&#xff0c;资料已整理》_哔哩哔哩_bilibili&#xff0c;跟着视频做&#xff0c;大体…...

[更新完毕]2025东三省B题深圳杯B题数学建模挑战赛数模思路代码文章教学:LED显示屏颜色转换设计与校正

完整内容请看文章最下面的推广群 已经更新完整的文章代码 基于非线性映射与深度模型的多通道LED显示屏色彩校正 摘要 本研究聚焦于高动态色彩空间下LED显示屏的色彩映射与逐点校正问题&#xff0c;结合非线性回归理论与深度学习模型&#xff0c;构建了一套涵盖BT.2020映射、RG…...

Easy云盘总结篇-登录注册

**说在前面&#xff1a;该项目是跟着B站一位大佬写的&#xff0c;不分享源码&#xff0c;支持项目付费 ** 获取图形验证码 可以看到这里有2两种图形验证码&#xff0c;分为&#xff1a; type0&#xff1a;如上图下面那个&#xff0c;是完成操作后要进行注册的验证码 type1: 如…...

04 基于 STM32 的时钟展示程序

前言 我们经常会看到 各个场合下面有 基于数码管 的时钟程序 比如 在车站, 教室, 办公室 等等 各个场合都有 然后 这里就是做一个 简单的 时钟程序 展示程序 测试用例 每一秒钟更新时间, 然后 迭代更新 天, 时, 分 等等 然后 主流程 基于 天, 时分秒 渲染数码管 #incl…...

音视频开发技术总结报告

音视频开发技术总结报告 一、音视频开发基础 1、音频基础 声音原理 声波特性&#xff1a;频率、振幅、波长人耳听觉范围&#xff1a;20Hz-20kHz声音三要素&#xff1a;音调、音量、音色 数字音频基础 采样率&#xff1a;常见44.1kHz、48kHz、96kHz量化位数&#xff1a;8bit、…...

FastAPI系列13:API的安全防护

API的安全防护 1、HTTPS 强制什么是HTTPS强制如何在FastAPI中实现HTTPS强制 2、CORS跨域资源共享什么是CORS在 FastAPI 中开启 CORS 3、SQL注入防护什么是SQL注入如何在FastAPI中实现SQL注入防护 4、CSRF防护什么是CSRF防护如何在FastAPI中实现CSRF防护 在 FastAPI系列12&…...

每天一道面试题@第五天

1.包装类型的缓存机制了解么&#xff1f; 指部分包装类在创建对象时&#xff0c;会将一定范围内的对象缓存起来&#xff0c;当再次使用相同值创建对象时&#xff0c;优先从缓存中获取&#xff0c;而不是重新创建新对象。【提高性能】【节省内存】 列举几个常见的包装类缓存机…...

Python硬核革命:从微控制器到FPGA的深度开发指南

1. 重新定义硬件开发:Python的颠覆性突破 传统硬件开发长期被C/C++和Verilog/VHDL统治,但Python正通过两条路径改变这一格局: 1.1 微控制器领域的MicroPython革命 完整Python 3.4语法支持,运行在资源受限的MCU上(最低要求:64KB ROM,16KB RAM) 直接内存访问能力,突破…...

WebRTC 服务器之Janus概述和环境搭建

1 概述 Janus 是由 Meetecho 开发的通用 WebRTC 服务器&#xff0c;它为构建 WebRTC 应用程序提供了一个模块化框架。服务器目标&#xff1a;Janus WebRTC 网关被设计为轻量级、通用的 WebRTC 服务器&#xff0c;除了实现以下方法外&#xff0c;它本身不提供任何功能&#xff1…...

mcp+llm+rag

MCPRAG简介 前言一、MCP是什么&#xff1f;二、MCP工作原理&#xff08;1. MCP Hosts&#xff08;主机&#xff09;&#xff08;2.MCP Clients&#xff08;客户端&#xff09;(3. MCP Servers&#xff08;服务端&#xff09;(4. Local Data Sources&#xff08;本地数据源&…...

Seata RM的事务提交与回滚源码解析

文章目录 前言一、RM提交事务二、RM回滚事务2.1、undo校验逻辑2.2、执行回滚逻辑 总结RM 的事务提交与回滚行为说明&#xff08;基于 Seata AT 模式&#xff09;1. 提交阶段&#xff08;Phase Two Commit&#xff09;2. 回滚阶段&#xff08;Phase Two Rollback&#xff09; 前…...

Ubuntu 24.04 完整Docker安装指南:从零配置到实战命令大全

Ubuntu 24.04 完整Docker安装指南&#xff1a;从零配置到实战命令大全 文章目录 Ubuntu 24.04 完整Docker安装指南&#xff1a;从零配置到实战命令大全1. 安装 Docker2. 配置 Docker 镜像加速器2.1 配置 Docker 镜像源2.2 重启 Docker 服务 3. Docker 常用命令3.1 Docker 常用命…...

设计模式简述(十七)备忘录模式

备忘录模式 描述组件使用 描述 备忘录模式用于将对象的状态进行保存为备忘录&#xff0c;以便在需要时可以从备忘录会对象状态&#xff1b;其核心点在于备忘录对象及其管理者是独立于原有对象之外的。 常用于需要回退、撤销功能的场景。 组件 原有对象&#xff08;包含自身…...

【ICMP协议深度解析】从网络诊断到安全实践

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键报文类型说明协议版本对比 二、实战演示环境配置要求核心实验实现实验1&#xff1a;标准ping流程实验2&#xff1a;traceroute路径发现实验3&#xff1a;自定义ICMP…...

《应用开发突围指南:敏捷开发的实战精髓》

如何在应用开发中精准且深入地应用敏捷开发方法呢&#xff1f;让我们一同深入探索。 敏捷开发&#xff0c;绝非仅仅是一种开发流程&#xff0c;更是一种蕴含深刻智慧的理念与思维方式。它与传统开发模式有着本质的区别&#xff0c;传统开发模式如同严谨的线性旅程&#xff0c;…...

【Mytais系列】SqlSession

MyBatis 的 SqlSession 是框架的核心接口之一&#xff0c;它是应用程序与 MyBatis 交互的顶层 API&#xff0c;用于执行 SQL 命令、管理事务和访问数据库。以下是关于 SqlSession 的详细说明&#xff1a; 1. 核心功能 (1) 执行 SQL 操作 增删改查&#xff1a;通过方法如 sele…...

【掌握 DDL】:SQL 中的数据库与表管理

掌握 DDL&#xff1a;SQL 中的数据库与表管理 掌握 DDL&#xff1a;SQL 中的数据库与表管理数据库 DDL创建数据库查看数据库查看所有数据库查看数据库创建语句 进入数据库删除数据库备份数据库备份恢复 查看数据库连接深入理解数据库创建与删除数据库字符集与校验规则 表 DLL创…...

第43周:GAN总结

目录 摘要 Abstract 计算机视觉中的分类 架构变体 损失变体 时间序列中的GAN 连续型GAN 离散型GAN 总结 摘要 本周总结了GAN的变形&#xff0c;主要从图像处理和时间序列生成两部分入手&#xff0c;分别找出了其中比较经典的几种GAN变种模型&#xff0c;简单分析了…...

安卓基础(MediaProjection)

1. Display 类 ​​作用​​&#xff1a;代表显示设备&#xff08;手机屏幕、外接显示器&#xff09;​​常用方法​​&#xff1a; display.getRotation() // 获取屏幕方向&#xff08;横屏/竖屏&#xff09; display.getRefreshRate() // 获取屏幕刷新率&#xff08;如&…...

Android Compose 物联网(IoT)UI 组件库封装指南

Android Compose 物联网封装组件 在物联网(IoT)应用开发中&#xff0c;使用Jetpack Compose可以创建现代化、响应式的用户界面。以下是一些针对物联网场景的Compose封装组件思路和实现方法&#xff1a; 常用物联网组件封装 1. 设备状态指示器 Composable fun DeviceStatusI…...

实用在线工具箱OmniTools

简介 OmniTools 是一个自托管的网络应用&#xff0c;提供多种在线工具&#xff0c;旨在简化日常任务。它包含了一系列独立的、小型但实用的工具&#xff0c;涵盖了文件处理、文本操作、网络请求、系统监控等多个方面。 OmniTools 的设计理念是简单、易用、可定制&#xff0c;方…...

【AI大模型学习路线】第一阶段之大模型开发基础——第三章(大模型实操与API调用)单轮对话与多轮对话调用。

【AI大模型学习路线】第一阶段之大模型开发基础——第三章&#xff08;大模型实操与API调用&#xff09;单轮对话与多轮对话调用&#xff1f; 【AI大模型学习路线】第一阶段之大模型开发基础——第三章&#xff08;大模型实操与API调用&#xff09;单轮对话与多轮对话调用&…...

数字化转型进阶:26页华为数字化转型实践分享【附全文阅读】

本文分享了华为数字化转型的实践经验和体会。华为通过数字化变革,致力于在客户服务、供应链、产品管理等方面提高效率,并把数字世界带入每个组织,构建万物互联的智能世界。华为的数字化转型愿景是成为行业标杆,通过推进数字化战略、构建面向业务数字化转型的IT组织阵型、坚…...

Go语言的优势与应用场景 -《Go语言实战指南》

一、 Go语言的五大核心优势 1. 语法简洁&#xff0c;开发高效 Go语言借鉴了C语言的表达方式&#xff0c;但去掉了多余复杂的特性&#xff08;如继承、多态、异常处理等&#xff09;&#xff0c;语法风格清晰明了&#xff0c;极大地降低了学习成本&#xff1a; • 无需头文件…...