一、鸿蒙编译篇
一、下载源码和编译
https://blog.csdn.net/xusiwei1236/article/details/142675221
https://blog.csdn.net/xiaolizibie/article/details/146375750
https://forums.openharmony.cn/forum.php?mod=viewthread&tid=897
repo init -u https://gitee.com/openharmony/manifest -b OpenHarmony-5.0.0-Release --no-repo-verifygit config --global http.postBuffer 524288000 # 增大缓冲区至500MB
git config --global core.compression 0 # 禁用压缩(减少CPU负载)repo sync -crepo forall -c 'git lfs pull'下载编译器
build/prebuilds_download.shsudo apt-get install libxcursor-dev libxrandr-dev libxinerama-dev编译
1. 32 位系统编译(默认)
./build.sh --product-name rk3568 --ccache2. 64 位系统编译 社区停止维护了(不一定)
./build.sh --product-name rk3568 --target-cpu arm64 --ccache3 编译一次之后
./build.sh --product-name rk3568 --ccache --no-prebuilt-sdk4 模块话编译
./build.sh --product-name rk3568 --ccache -T module-hdi-sink --fast-rebuild
生成的文件如下:
路径在/out/rk3568/packages/phone/images
二、openHarmony源码构建体系
https://blog.csdn.net/GuanFuXinCSDN/article/details/119853442
https://blog.csdn.net/weixin_40870382/article/details/129876626
以下是源码目录的说明:
目录名 | 描述 |
---|---|
applications | BearPi-HM_Nano应用程序样例 |
base | 基础软件服务子系统集&硬件服务子系统集 |
build | 组件化编译、构建和配置脚本 |
docs | 介绍、说明资料 |
domains | 增强软件服务子系统集(注:使用hpm方式下载时可能不存在) |
drivers | 驱动子系统(注:使用hpm方式下载时可能不存在) |
foundation | 系统基础能力子系统集 |
kernel | 内核子系统 |
prebuilts | 编译器及工具链子系统 |
test | 测试子系统 |
third_party | 开源第三方组件 |
utils | 常用的工具集 |
vendor | 厂商提供的软件 |
build.py | 编译脚本文件 |
三种编译方式
1 build.sh
./build.sh --product-name rk3568 --ccache
2 build.py
./build.py --help
3 hb set / hb build
默认没有,需要安装
3种形式的编译入口最终都汇总到hb build。即内部实际上是统一的。
三、构建体系核心-GN与Ninja
https://blog.csdn.net/fangye945a/article/details/121492022
https://hahaha.fmy1024.cn/html_online/1404_136525054online.html
https://blog.csdn.net/weixin_43288065/article/details/128037209
1 鸿蒙系统的构建工具
(1)源码编辑。用户自选,如sourceinsight,vscode都比较常用
(2)编译工具链。鸿蒙官方提供,目前均为交叉编译工具链,clang或gcc系
(3)基本工程管理。使用ninja,来自于google
(4)工程管理脚本。使用python3
(5)ninja生成器。使用gn
python+gn+ninja
2 什么是Ninja
ninjia是一个致力于速度的小型编译系统工具 (类似于Make编译工具)其主要有两个特点:
1.可以通过其他高级的编译系统生产其输入文件。
2.它的设计就是为了更快的编译。
3 什么是GN
gn 即 Generate ninjia ,顾名思义就是用来生成ninjia编译文件的工具,可以理解为cmake工具。
4 gn与ninjia的关系
可以理解为make与cmake之间的关系,ninjia于GUN make构建工具类比对应关系如下:
ninjia工具 Make GUN工具 功能作用gn <----------> cmake -------------> 生成构建文件xxx.gn <----------> CMakeList --------------> 描述构建所需的编译文件xxx.ninjia <----------> Makefile ---------------> 描述代码的具体编译步骤ninjia <----------> Make ----------------> 编译代码
5 ninja测试demo
https://blog.csdn.net/define_me_freedom/article/details/104195946
GN语法简单入门.pdf
tree
.
├── build
│ ├── BUILDCONFIG.gn
│ └── BUILD.gn
├── BUILD.gn
├── lib
│ ├── BUILD.gn
│ ├── libtest1.c
│ └── libtest1.h
└── main├── BUILD.gn└── main.c1 每一个目录下面都要有一个BUILD.gn,包括根目录
2 build/BUILD.gn 里面是具体的编译工具链
3 GN构建系统严格要求使用空格(Space)进行代码缩进,任何Tab字符均被视为非法语法,可以用gn format 修复
3 构建命令为:gn gen outninja -C out/ main --没有直接编译通过,应该是环境有问题,直接安装gn工具测试4 在源码中编译的方法(鸿蒙)./build.sh --product-name rk3568 --ccache -T hello --fast-rebuild
四 OH源码编译过程详解
1 产品的定义在vendor下定义
2 编译的过程
OHOSBuildModule实现了BuildModuleInterface接口
BuildModuleInterface接口的run函数分别调用了10个函数,构成了整个编译过程的10个子阶段
def run(self):try:self._prebuild()self._preload()self._load()self._pre_target_generate()self._target_generate()self._post_target_generate()self._pre_target_compilation()self._target_compilation()except OHOSException as exception:raise exceptionelse:self._post_target_compilation()finally:self._post_build()
如何将所有文件打包成update.img?
五、OpenHarmony构建系统–GN与子系统、部件、模块详解
1 产品(product)
在**vendor/{产品解决方案厂商}/{产品名称}**_中,以rk3568为例
1 config.json文件中可以配置产品所需要的子系统,其中的inherit字段可以继承事先定义好的样板模板,
模板位于”productdefine/common“目录下
2 领域(domain)
OpenHarmony技术架构中有四大子系统集:“系统基本能力子系统集”、“基础软件服务子系统集”、“增强软件服务子系统集”、“硬件服务子系统集”。四大子系统不会直接出现在编译选项或者参数中,而是有对应的一级源代码文件夹:“系统基本能力子系统集”对应源码foundation文件夹;“基础软件服务子系统集”和“硬件服务子系统集”对应源码base文件夹;“增强软件服务子系统集”对应源码domains文件夹。
3 子系统(SubSystem)
子系统是一个逻辑概念,它具体由对应的部件构成。在多设备部署场景下,支持根据实际需求裁剪某些
非必要的子系统或部件。在build/subsystem_config.json中定义
4 部件(component)
部件是对子系统的进一步拆分,可复用的软件单元,每一个部件单独存放一个文件夹,它包含源码、配
置文件、资源文件和编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。部
件由对应源码文件夹下的bundle.json文件进行定义
路径规则为:{领域}/{子系统}/{部件},部件目录树规则如下
component
├── interfaces
│ ├── innerkits # 系统内接口,部件间使用
│ └── kits # 应用接口,应用开发者使用
├── frameworks # framework实现
├── services # service实现
└── BUILD.gn # 部件编译脚本
5 模块(module)
模块就是编译子系统的一个编译目标,部件也可以是编译目标。模块属于哪个部件,在gn文件中由
part_name指定.
6 特性(feature)
特性是部件用于体现不同产品之间的差异。通常不同特性可以定义不同编译宏或者代码,从而影响到源
代码中define的特性。
相关文章:

一、鸿蒙编译篇
一、下载源码和编译 https://blog.csdn.net/xusiwei1236/article/details/142675221 https://blog.csdn.net/xiaolizibie/article/details/146375750 https://forums.openharmony.cn/forum.php?modviewthread&tid897 repo init -u https://gitee.com/openharmony/mani…...
DataStreamAPI实践原理——计算模型
引入 Apache Flink 是一个框架和分布式处理引擎,用于在 无边界 和 有边界 数据流上进行有状态的计 算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。Flink可以处理批数据也可以处理流数据,本质上,流处理…...

得物业务参数配置中心架构综述
一、背景 现状与痛点 在目前互联网飞速发展的今天,企业对用人的要求越来越高,尤其是后端的开发同学大部分精力都要投入在对复杂需求的处理,以及代码架构,稳定性的工作中,在对比下,简单且重复的CRUD就显得…...

【算法】单词搜索、最短距离
单词搜索 这道题主要考察了深度优先遍历(DFS)算法。 我们通过几个简单例子来分析一些细节问题: 1. 要搜索的单词串:abc 搜索的过程中必须按照字母顺序,首先从矩阵中的第一个元素开始搜索,遇到字母a则开始深度优先遍历࿰…...

Python函数基础:简介,函数的定义,函数的调用和传入参数,函数的返回值
目录 函数简介 函数定义,调用,传入参数,返回值 函数的定义 函数的调用和传入参数 函数的返回值 函数简介 函数简介:函数是组织好,可重复使用,用来实现特定功能(特定需求)的代码…...

基于FFmpeg命令行的实时图像处理与RTSP推流解决方案
前言 在一些项目开发过程中需要将实时处理的图像再实时的将结果展示出来,此时如果再使用一张一张图片显示的方式展示给开发者,那么图像窗口的反复开关将会出现窗口闪烁的问题,实际上无法体现出动态画面的效果。因此,需要使用码流…...

【随笔】地理探测器原理与运用
文章目录 一、作者与下载1.1 软件作者1.2 软件下载 二、原理简述2.1 空间分异性与地理探测器的提出2.2 地理探测器的数学模型2.21 分异及因子探测2.22 交互作用探测2.23 风险区与生态探测 三、使用:excel 一、作者与下载 1.1 软件作者 作者: DOI: 10.…...
【人工智能】Python中的深度学习模型部署:从训练到生产环境
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着深度学习在各个领域的应用日益增多,如何将训练好的深度学习模型高效地部署到生产环境中,成为了开发者和数据科学家的重要课题。本文将…...
Rule.resource作用说明
1. 说明 作用 Rule.resource 用于定义哪些文件需要被当前规则处理。它是对传统 test、include、exclude 的更底层封装,支持更灵活的匹配方式。 与 test/include/exclude 的关系 test: /.js$/ 等价于resource: { test: /.js$/ } include: path.resolve(__dirname, ‘…...
C++如何设计线程池(thread pool)来提高线程的复用率,减少线程创建和销毁的开销
线程池的基本概念与多线程编程中的角色 线程池,顾名思义,是一种管理和复用线程的资源池。它的核心思想在于预先创建一定数量的线程,并将这些线程保持在空闲状态,等待任务的分配。一旦有任务需要执行,线程池会从池中取出…...

从零开始使用SSH链接目标主机(包括Github添加SSH验证,主机连接远程机SSH验证)
添加ssh密钥(当前机生成和远程机承认) 以下是从头开始生成自定义名称的SSH密钥的完整步骤(以GitHub为例,适用于任何SSH服务): 1. 生成自定义名称的SSH密钥对 # 生成密钥对(-t 指定算法,-f 指定路径和名称…...

Maxscale实现Mysql的读写分离
介绍: Maxscale是mariadb开发的一个MySQL数据中间件,配置简单,能够实现读写分离,并且能根据主从状态实现写库的自动切换,对多个服务器实现负载均衡。 实验环境: 基于gtid的主从同步的基础上进行配置 中…...
以运营为核心的智能劳动力管理系统,破解连锁零售、制造业排班难题
在连锁零售、制造业、物流等劳动力密集型行业中,排班与考勤管理不仅是人力资源管理的核心环节,更是直接影响企业运营效率、成本控制与合规风险的关键场景。尤其在当前经济环境下,企业面临用工成本攀升、政策合规趋严、业务波动频繁等多重挑战…...
c++_csp-j算法 (5)
动态规划 介绍 动态规划(Dynamic Programming)是一种常用的解决优化问题的算法设计技术,常用于解决具有重叠子问题和最优子结构性质的问题。动态规划算法通过将问题划分为子问题,解决子问题并将子问题的解保存起来,最终构建出原问题的解。在本节中,我们将详细介绍动态规…...
sql server tempdb库的字符集和用户库字符集不一样
执行2个表用not in 关联,但是提示这个错误 消息 468,级别 16,状态 9,第 74 行 无法解决 equal to 运算中 "Latin1_General_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。 对比2个表字段字符集都是&…...

Spring Boot 启动生命周期详解
Spring Boot 启动生命周期详解 1. 启动阶段划分 Spring Boot 启动过程分为 4个核心阶段,每个阶段涉及不同的核心类和执行逻辑: 阶段 1:预初始化(Pre-initialization) 目标:准备启动器和环境配置关键类&am…...
蓝桥杯 20. 压缩变换
压缩变换 原题目链接 题目描述 小明最近在研究压缩算法。他知道,压缩时如果能够使数值很小,就能通过熵编码得到较高的压缩比。然而,要使数值变小是一个挑战。 最近,小明需要压缩一些正整数序列,这些序列的特点是&a…...

数据湖DataLake和传统数据仓库Datawarehouse的主要区别是什么?优缺点是什么?
数据湖和传统数据仓库的主要区别 以下是数据湖和传统数据仓库的主要区别,以表格形式展示: 特性数据湖传统数据仓库数据类型支持结构化、半结构化及非结构化数据主要处理结构化数据架构设计扁平化架构,所有数据存储在一个大的“池”中多层架…...
YOLO改进实战:添加SOCA注意力机制提升目标检测性能
## 目录 1. **注意力机制简介** 2. **SOCA模块的核心原理** 3. **YOLOv5添加SOCA的完整步骤** 4. **实验效果与性能对比** 5. **SOCA的改进优势与创新性** --- ### 一、注意力机制简介 注意力机制(Attention Mechanism)模仿人类视觉的选择性关注特性,通过动态…...
Python爬虫实战:获取网yi新闻网财经信息并做数据分析,以供选股做参考
一、引言 在财经领域,股市信息对投资者意义重大。网yi新闻作为知名新闻资讯平台,其股市板块蕴含丰富的最新股市热点信息。然而,依靠传统人工方式从海量网页数据中获取并分析这些信息,效率低下且难以全面覆盖。因此,利用爬虫技术自动化抓取相关信息,并结合数据分析和机器…...

解决conda虚拟环境安装包却依旧安装到base环境下
最近跑项目装包装到几度崩溃,包一直没有安装到正确位置,为此写下这篇文章记录一下,也希望能帮到有需要的人。(此文章开发环境为anaconda和window) 方法一 先conda deactivate,看到(base)消失…...
IPOF方法学应用案例:动态电压频率调整(DVFS)在AIoT芯片中的应用
案例:动态电压频率调整(DVFS)在AIoT芯片中的应用 一、背景知识 继上一篇IPOF(Input-Process-Output-Feedback)方法学简介, 这一篇我们给出一个IPOF在集成电路芯片领域的一个应用场景。 动态电压频率调整&…...
Vue 3新手入门指南,从安装到基础语法
作为一名前端新手,你可能听说过Vue.js的简单与强大,但面对框架的安装和一堆新概念,可能会觉得无从下手。别担心!这篇文章将带你从零开始,完成Vue3的安装,并通过简单示例掌握核心语法。无论你是完全零基础&a…...
反爬加密字体替换机制解析
加密字体替换是网站反爬虫的常用技术之一,其核心是通过自定义字体文件对关键数据(如数字、文字)进行动态渲染,使源码中显示的字符与用户实际看到的内容不一致。下面从技术原理、实现类型和破解方法三个方向展开分析,并…...

字节跳动开源数字人模型latentsync1.5,性能、质量进一步优化~
项目背景 LatentSync1.5 是由 ByteDance 开发的一款先进的 AI 模型,专门针对视频唇同步(lip synchronization)任务设计,旨在实现音频与视频唇部动作的高质量、自然匹配。随着 AI 技术的快速发展,视频生成和编辑的需求…...

Day12(回溯法)——LeetCode51.N皇后39.组合总和
1 前言 今天刷了三道回溯法和一道每日推荐,三道回溯法也迷迷糊糊的,每日推荐把自己绕进去了,虽然是一道之前做过的题的变种。刷的脑子疼。。。今天挑两道回溯题写一下吧,其中有一道是之前做过的N皇后,今天在详细写一写…...
简历中的专业技能
Java 精通Java 核心,多年一线研发经验,具备良好的编码能力、并熟练应用设计模式精通多进程、Java 高并发编程,阅读过相关 JDK 源码以及Lock锁的底层源码,熟悉 AQS 和 CAS 的核心思想,能够运用其机制优化并发编程精通 …...

力扣HOT100——102.二叉树层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] /*** Definition for a bi…...
【Token系列】05 | 位置编码不是位置信息:Transformer如何建立语言顺序感?
文章目录 05 | 位置编码不是位置信息:Transformer如何建立语言顺序感?一、为什么Transformer需要“位置感知”?二、什么是位置编码(Position Encoding, PE)?三、相对 vs 绝对位置编码四、可学习位置编码机制…...
springboot启动的端口如何终止
若要终止 Spring Boot 应用所使用的端口,可依据应用的运行方式,采用不同的解决办法。以下为你详细介绍: 1. 直接停止正在运行的 Spring Boot 应用程序 开发环境(IDE 中运行) IntelliJ IDEA:在 IDE 的运行…...