详解OpenHarmony各部分文件在XR806上的编译顺序

2024-01-30 13:12

本文主要是介绍详解OpenHarmony各部分文件在XR806上的编译顺序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,今天我们来谈一谈编程时一个很有趣的话题——编译顺序。我知道,一提到编译可能大家会感到有点儿头疼,但请放心,我不会让大家头疼的。我们要明白,在开始写代码之前,了解整个程序的编译路径是十分有必要的。这就好比你要去一个陌生的地方,首先得知道怎么走才能到达目的地,对吧?

20211210_151829-resized.jpg

首先呢,得看看这个vendor/xradio/xr806/config.json,这可是个关键角色。它就像是一个交通警察,告诉编译器:“嘿,你得先编译这个,然后再编译那个。”其中的product_name就是交通警察手中的指挥棒,它决定了执行hb set时会出现的选项。而device_companyboardkernel_type这三位则是一同决定了代码的行走路径。

当你用hb set选定了wifi_skylark后,就会在根目录中生成一个叫做ohos_config.json的文件。这个文件就像是一张地图,上面清楚地标明了各个代码文件应该放置的位置。这样,编译器就知道去哪里找这些代码了。

378790254-6573fb3f993f8.png

然后,当你执行hb build -f命令时,HarmonyOS的编译脚本就会从device_path中获取编译工具和编译选项,从product_path下寻找BUILD.gn文件。这个过程就像是在准备一场演出,编译工具是音响设备,编译选项是音量调节器,而BUILD.gn文件则是节目单。

3430817475-6573fbfd9cdbc.png

BUILD.gn文件中的内容可是相当精彩的。其中build_ext_component("libSDK")就像是一个大明星,有很多依赖项需要先行准备。这些依赖项就像是它的伴舞团队和乐队,得提前到位才能确保演出的顺利进行。

3136971961-6573fe6b47cf3.png

同样的道理也适用于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上的编译顺序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/660350

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input