详解OpenHarmony各部分文件在XR806上的编译顺序
大家好,今天我们来谈一谈编程时一个很有趣的话题——编译顺序。我知道,一提到编译可能大家会感到有点儿头疼,但请放心,我不会让大家头疼的。我们要明白,在开始写代码之前,了解整个程序的编译路径是十分有必要的。这就好比你要去一个陌生的地方,首先得知道怎么走才能到达目的地,对吧?
首先呢,得看看这个vendor/xradio/xr806/config.json
,这可是个关键角色。它就像是一个交通警察,告诉编译器:“嘿,你得先编译这个,然后再编译那个。”其中的product_name
就是交通警察手中的指挥棒,它决定了执行hb set时会出现的选项。而device_company
、board
、kernel_type
这三位则是一同决定了代码的行走路径。
当你用hb set选定了wifi_skylark
后,就会在根目录中生成一个叫做ohos_config.json
的文件。这个文件就像是一张地图,上面清楚地标明了各个代码文件应该放置的位置。这样,编译器就知道去哪里找这些代码了。
然后,当你执行hb build -f
命令时,HarmonyOS的编译脚本就会从device_path中获取编译工具和编译选项,从product_path
下寻找BUILD.gn文件。这个过程就像是在准备一场演出,编译工具是音响设备,编译选项是音量调节器,而BUILD.gn
文件则是节目单。
BUILD.gn
文件中的内容可是相当精彩的。其中build_ext_component("libSDK")
就像是一个大明星,有很多依赖项需要先行准备。这些依赖项就像是它的伴舞团队和乐队,得提前到位才能确保演出的顺利进行。
同样的道理也适用于group("xr806")和ohosdemo/BUILD.gn
中的内容。这些文件和文件夹都需要按照一定的顺序进行编译,才能确保整个程序的顺利运行。
最后呢,当你打开hello_demo/BUILD.gn
时,你会看到import("//device/xradio/xr806/liteos_m/config.gni")
这句话。这就像是在演出开始前,主持人走上台说:“感谢大家的支持,现在我们开始演出!”然后,static_library("app_hello")
就像是第一个节目,闪亮登场!
你想想看,一群代码如果不按照顺序来,岂不是乱成一锅粥了?好在Harmony给我们提供了明确的编译顺序,让代码们可以乖乖排队,一个个等待被编译。所以说啊,编译顺序可是个大学问。只有掌握了正确的顺序,才能让代码们和谐共处,共同演绎出一场精彩的程序运行秀!
以XR806_OpenHarmony为例,当你通过hb set选定wifi_skylark
后,会在根目录中生成一个叫ohos_config.json
的文件。这个文件里主要包括以下内容:
{"root_path": "/home/workspace/Harmony_XR806","board": "xr806","kernel": "liteos_m","product": "wifi_skylark","product_path": "/home/workspace/Harmony_XR806/vendor/xradio/xr806","device_path": "/home/workspace/Harmony_XR806/device/xradio/xr806/liteos_m"
}
然后,当你执行hb build -f
时,HarmonyOS的编译脚本就会从device_path中获取编译工具和编译选项,然后从product_path下寻找BUILD.gn文件。
现在让我们看看这个BUILD.gn文件的内容:
build_ext_component("libSDK") {exec_path = rebase_path(".", root_build_dir)outdir = rebase_path("$root_out_dir")command = "./build.sh ${outdir}"deps = ["//kernel/liteos_m:kernel", #(3)"os:liteos_glue","adapter/hals:adapter","adapter/console:app_console","ohosdemo:ohosdemo", #(2)]
}group("xr806") {deps = [":libSDK" #(1)]
}
这里有三个需要注意的地方:
1、deps关键字代表执行group("xr806")前需要先执行libSDK,也就是build_ext_component("libSDK")。
2、在执行build_ext_component("libSDK")前,需要先找到ohosdemo文件夹下的BUILD.gn,并且这个文件里会有ohosdemo的定义。
3、//代表绝对路径,可以理解为根目录。比如//kernel/liteos_m代表根目录下的kernel/liteos_m文件夹。
最后,关于演示部分:
XR806_OpenHarmony串口默认配置为:波特率115200,无校验,8位数据位,1位停止位。开发板成功连接PC上对串口调试助手后按下开发板的复位按键串口输出。这段文字描述了如何配置串口以及如何通过串口输出信息。当你连接开发板到PC并使用串口调试助手进行调试时,你可以通过发送复位信号来启动应用程序,然后你将看到“Hello World!”消息输出到串口上。这个过程就像是我们在家里看电视,按下遥控器上的播放键就能看到精彩的节目一样简单!希望大家在编码的道路上越走越顺!
本文转载自:【XR806开发板试用】+4.OpenHarmony编译顺序 - 极术社区 - 连接开发者与智能计算生态
相关文章:

详解OpenHarmony各部分文件在XR806上的编译顺序
大家好,今天我们来谈一谈编程时一个很有趣的话题——编译顺序。我知道,一提到编译可能大家会感到有点儿头疼,但请放心,我不会让大家头疼的。我们要明白,在开始写代码之前,了解整个程序的编译路径是十分有必…...

【美团】无人机-大数据开发工程师
更新时间:2024/01/29 工作地点:北京市 事业群:到家事业群 工作经验:3年 部门介绍 为了更好地提升城市即时配送的效率与体验,美团于2017年启动了无人机配送服务的探索,通过科技创新推动履约工具变革&#x…...

微服务系统设计:横向扩展和纵向扩展的对比
微服务扩展性:水平扩展 vs 垂直扩展 特点水平扩展垂直扩展扩展单位增加微服务实例增加单个实例的资源 (CPU,内存)方向向外,增加节点向上,增加单个节点的资源复杂性随着实例数量的增加,管理难度更大管理更简单…...

Java基于SpringBoot+Vue的网上超市管理系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

HTTP中POST、GET、PUT、DELETE方式的区别
GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作&#x…...

77.Go中interface{}判nil的正确姿势
文章目录 一:interface{}简介二、interface{}判空三:注意点四:实际案例 一:interface{}简介 在go中的nil只能赋值给指针、channel、func、interface、map或slice类型的变量 interface 是否根据是否包含有 method,底层…...

ES实战回顾
1、你用的集群节点情况? 一个ES集群,18个节点,其中3个主节点,15个数据节点,500G左右的索引数据量,没有单独的协调节点,它的每个节点都可以充当协调功能; 2、你们常用的索引有哪些&a…...

Mysql 删除数据
从数据表中删除数据使用DELETE语句,DELETE语句允许WHERE子句指定删除条件。DELETE语句基本语法格式如下: DELETE FROM table_name [WHERE <condition>]; table_name指定要执行删除操作的表;“[WHERE <condition>]”为可选参数&a…...

CSS设置单行文字水平垂直居中的方法
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>单行文字水平垂直居中</title><style>div {/* 给div设置宽高 */width: 400px;height: 200px;margin: 100px auto;background-color: red;/…...

数论与图论
数论🎈 筛质数 最普通的筛法O(nlogn): void get_primes2(){for(int i2;i<n;i){if(!st[i]) primes[cnt]i;//把素数存起来for(int ji;j<n;ji){//不管是合数还是质数,都用来筛掉后面它的倍数st[j]true;}} } 诶氏筛法 O(nloglogn)&#…...

海外云手机三大优势
在全球化潮流下,企业因业务需求对海外手机卡等设备的需求不断攀升,推动了海外云手机业务的蓬勃发展。相较于自行置备手机设备,海外云手机不仅能够降低成本,还具备诸多优势,让我们深入探讨其中的三大黄金优势。 经济实惠…...

AndroidStudio安装教程基础篇
Android Studio是专为Android应用程序开发而设计的官方集成开发环境(IDE)。它提供了丰富的工具和功能,帮助开发者更高效地构建出色的应用程序。本文将为您提供Android Studio的安装文档基础指南,帮助您顺利安装并开始使用这款强大…...

RK3568 Android 13 系统裁剪
android 13 系统裁剪是个大工程,裁剪也是需要大量的测试,才能保证系统的稳定性,以下是RK官方给出的裁剪方案,有兴趣的可以去看一下,对裁剪不是要求过高的可以根据官方的建议,对系统进行裁剪: Rockchip And…...

Ubuntu 隐藏Telnet主机SSH服务时显示版本信息问题
一、背景 默认情况下,我们通过telnet服务器的22端口,能够获取OpenSSH服务的banner信息(如下图所示)。而低版本的OpenSSH存在许多高危漏洞。。为了安全我们要隐藏这个信息。 二、隐藏Telnet版本信息 当使用telnet命令,telnet 192.168.31.20…...

webpack环境配置
1.首先安装 cross-env npm install cross-env --save-dev 在package.json里面配置 根据不同命令打包 "scripts": {"dev": "cross-env NODE_ENVdevelopment webpack-dev-server --config webpack.config.dev.js","dev:test": "c…...

树控件、下拉框、文本框常用测试用例
01 控件的测试外观操作 1)项目中的所有树是否风格一致 2)树结构的默认状态是怎样的。比如默认树是否是展开,是展开几级? 是否有默认的焦点?默认值是什么?展开的节点图标和颜色? 3)…...

Java把列表数据导出为PDF文件,同时加上PDF水印
一、实现效果 二、遇到的问题 实现导出PDF主体代码参考:Java纯代码实现导出PDF功能,下图是原作者实现的效果 导出报错Font STSong-Light with UniGB-UCS2-H is not recognized.。参考:itext 生成 PDF(五) 使用外部字体 网上都是说jar包的版本…...

const与readonly详解
const与readonly详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨在TypeScript中常用的const与readonly关键字,了解它…...

ArcGIS Pro 如何计算长度和面积等数据?
要素的几何属性属于比较重要的信息,作为一款专业的GIS软件,ArcGIS Pro自然也是带有计算几何的功能,这里为大家介绍一下计算方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的矢量数据,除了矢…...

IntelliJ创建一个springboot工程
安装jdk mac教程 windows教程 安装maven mac教程 windows教程 建议: 在本地磁盘新建一个文件夹叫maven,然后把下载的maven安装到这里。在后续的IntelliJ操作中,配置maven的settings.xml和repository地址为这个目录下的地址。 创建sprin…...

Spark入门02-Spark开发环境配置(idea环境)
安装与配置Spark开发环境 1.下载解压安装包 https://archive.apache.org/dist/spark/spark-2.1.2/ https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.3.4/ 2、新建Scala项目 参考https://blog.csdn.net/weixin_38383877/article/details/135894760 3、项目中引…...

Codeforces Round 886 (Div. 4)
目录 A. To My Critics B. Ten Words of Wisdom C. Word on the Paper D. Balanced Round E. Cardboard for Pictures F. We Were Both Children G. The Morning Star H. The Third Letter A. To My Critics 直接模拟 void solve(){int a,b,c; cin>>a>>b&…...

Pull模式和Push模式
Pull模式是一种消息消费模式,其中客户端主动从服务端拉取数据。 优点:客户端可以根据自己的消费能力来消费数据,不存在消息堆积的情况。 缺点:消息处理可能不及时,可能存在大量无效请求,客户端需要考虑拉取…...

高端车规MCU的破局之路
目录 1 低质量的无效内卷 2 高端车规MCU产品共性 2.1 支持标定测量 2.2 低延迟通信加速 2.3 完备的网络安全解决方案 2.4虚拟化 3 国产替代的囚徒困境 1 低质量的无效内卷 近几年,车规MCU国产替代的呼声此消彼长,但仍然集中在低端产品。 从产…...

活字格V9获取图片失败bug,报错404,了解存储路径,已改为批量上传和批量获取
项目场景: 问题描述 原因分析: 解决方案: 完成了批量上传功能,这插件真的很方便 于是写了个批量获取附件的js代码,我真厉害 项目场景: 活字格V9版本获取图片链接Upload 【9.0.103.0】图片上传的存储路…...

【Echart】echart图表不显示总结
【Echart】echart图表不显示 经常遇到的场景:v-if和el-tabs切换图表不显示图表; 1、echarts.init时确认dom容器是否设置了宽高,必须设置宽高; 错误写法 <div id"line" ref"lineChart" width"100%&qu…...

vue 组件之间相互传值的6种方法
Vue.js 中组件间通信的方法有很多种,以下是6种常见的直接或间接的组件传值方式: 1. Props(父向子) 优点: 易于理解,符合单向数据流的原则,有利于代码维护。 缺点: 数据只能从父组件…...

开源大规模分布式MQTT消息服务器EMQX部署教程
1.EMQX是什么? EMQX 是一款开源的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条,单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息,并…...

postgresql慢查询排查和复现
postgresql慢查询排查和复现 一. 介绍一张表:pg_stat_activity pg_stat_activity 是 PostgreSQL 中一个非常有用的系统视图,提供了有关当前数据库连接和活动查询的信息。通过查询这个视图,你可以获取有关正在执行的查询、连接的用户、进程 …...

【服务器】搭建ChatGPT站点常见问题
目录 ❓ 常见问题 🌼1. 什么是OpenAI APIkey? 🌼2. 什么是Token? 🌼3. 为什么回复不是GPT-4? 🌼4. 如何区分 GPT-3.5 和 GPT-4 🌼5. 为什么回复到一半卡住? 🌼6.…...