0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈HarmonyOS单模块编译

鸿蒙系统HarmonyOS 来源:oschina.net 作者:软通夏德旺 2021-02-05 11:40 次阅读

我这里以3518的开发板为例进行讲解,3516的也是通用的。

下面是之前全量编译的脚本

python build.py ipcamera_hi3518ev300 -b debug

HarmonyOS最初只能支持全量编译的方式,这种方式最大的弊端就是我们在系统源码上开发一个用户态程序,每次都需要全量编译好系统之后进行镜像的烧录,每次编译加烧录少说需要15分钟时间,对于我们开发测试及其消耗时间,试想下每次就是想加入一行log调试下这么费劲会多么麻烦。

还好,后面随着HarmonyOS的源码更新,开始支持用户态程序的单模块编译了,编译的脚本如下:

python build.py ipcamera_hi3518ev300 -T //applications/sample/camera/app:camera_app

这里以单独编译HarmonyOS自带的HelloWorld项目为例,这个-T参数非常重要,它就是代表单模块编译的,//applications/sample/camera/app只的要编译的模块的绝对路径,camera_app为要编译的模块名称。

这里先结合HarmonyOS源码讲下-T参数的由来,如果各位是通过下载压缩包的方式下载的官方的code1.0的源码压缩包解压的话,肯定是不支持该参数的,也就是说不支持单模块编译。下面来看下该参数是在什么时候更新到源码库的吧,首先我们去gitee上找到编译构建框架所在的代码仓,如下图

pIYBAGAcvO2ASDHfAAEP5kjj-38386.png

然后,我们查看该仓库下的commit记录,然后就可以找到下面的关键记录

pIYBAGAcvP2AM-dYAAAkajccrX4161.png

看commit的日志已经很明确了这里加入了单模块构建,下面我们打开该commit记录仔细看看具体修改了什么

pIYBAGAcvQuAIUbAAAChnwdl7ww195.png

看到这里,大家就知道这个-T参数怎么来的了吧,为了让你的代码支持单模块编译,赶紧去git更新下代码吧,如果下载code1.0离线代码的也不用着急,可以直接把build仓下的最新代码全部下载下来替换之前的build仓即可。

下面再来讲讲前面单模块编译最后面的那个模块名称camera_app怎么来的吧,关于用户态程序如何编译的,建议大家好好看看官方源码的“用户程序框架”仓下的介绍,绝对会受益良多。我这里挑重点讲,首先是在//build/lite/product/ipcamera_hi3518ev300.json这个文件中进行了用户程序编译的相关配置,可以理解为一个配置清单,告诉系统哪些用户态程序需要参与编译。我们可以在里面找到如下配置

{ "name": "applications", "component": [ { "name": "camera", "dir": "//applications/sample/camera/app:camera_app", "features":[] }, { "name": "communication", "dir": "//applications/sample/camera/communication:sample", "features":[] } ] },

看到dir后面的配置就自然会联想到我们之前-T后面的参数为何要使用它了吧,那么最后的冒号后面的camera_app参数又从哪里来呢?

那么这里首先要对linux下的c语言编译有一定了解才行了,大家如果看不懂后面的可以先去补习下Makefile和gn的知识。

这里每个用户态程序都是通过gn文件配置进行编译的,我们先在源码目录下找到这个模块路径,如下图

哈哈,大家可能会疑惑我咋是用idea在看代码,因为本人电脑没安装source insight,加上本人最精通的技术是javaAndroid,所以使用idea习惯了,一个快速检索功能足够我阅读系统源码了。

这里我们看到了BUILD.gn脚本,打开瞅瞅,可以看到如下关键代码,

lite_component("camera_app") { target_type = "executable" features = [ ":hello_world", ] }

之前调用的参数模块名称camera_app就是在这里配置的。

下面简单列举一个gn的一个标准的helloworld用法,如下

executable("hello_world") { sources = [ "hello_world.c", ] }

后面我在讲如何创建一个独立的用户态程序会编写这个gn文件和json文件。本篇已经够长了,就放在下一篇博客讲解了。

看系统源码确实还是很有意思的,只奈工作太忙没有时间看。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • intel
    +关注

    关注

    19

    文章

    3451

    浏览量

    184764
  • 烧录
    +关注

    关注

    8

    文章

    216

    浏览量

    35189
  • HarmonyOS
    +关注

    关注

    79

    文章

    1780

    浏览量

    29233
收藏 人收藏

    评论

    相关推荐

    模块价格是多少钱?单模模块和多模光模块哪个贵?

    CFP/CFP2/CFP4光模块价格:2500+元;上述的几种光模块价格是根据封装类型来进行区分的。但是,光模块中还存在着单模模块和多模
    发表于 08-31 14:09

    单模模块和多模光模块的区别是什么?

    `随着光通讯、数据中心的发展,光模块的应用越来越广泛。而光模块类型、传输数据也是越来越多样化。40G光模块、100G光模块单模
    发表于 03-13 15:02

    浅谈Keil-MDK创建及其编译过程

    浅谈Keil-MDK创建项目&编译过程---Code-data,RO-data,RW-data,ZI-data一、编译过程二、MDK 编译工具(1)创建一个新的工程(2)添加 star
    发表于 02-24 06:03

    模块单模和多模的六大区别及区分方法

    本文开始介绍了单模模块与多模光模块的相关概念,其次介绍了光模块单模和多模的区别,最后介绍了单模
    发表于 04-19 14:41 20.9w次阅读

    单模模块和多模光模块之间的区别

    随着光通讯、数据中心的发展,光模块的应用越来越广泛。而光模块类型、传输数据也是越来越多样化。40G光模块、100G光模块单模
    发表于 05-03 10:36 2.9w次阅读

    浅谈 Atmel Studio 6和IAR C编译器之间的链接问题

    浅谈 Atmel Studio 6和IAR C编译器之间的链接问题
    的头像 发表于 07-04 09:50 3245次阅读

    模块单模和多模的区别

    一般多模光波长为850nm,单模光波长则主要以1310nm和1550nm为主。多模光模块由于模间色散比较严重,只能用于短距离传输(SR);而单模模块多用于LR、ER、ZR等远距离传输
    的头像 发表于 06-24 16:09 4.3w次阅读

    单模光纤和多模光纤有什么区别

    单模光纤和多模光纤,比较大的区别就是在传输距离上,单模光纤传输距离比较远,按照不同的类型的光纤和光模块的组合,单模光纤可以传输5公里、10公里、20公里甚至更远的距离。而多模光纤,不同
    发表于 04-05 17:22 7635次阅读

    HarmonyOS编译Linux的编译环境搭建

    顺利拿到板子,开搞,第一步当然是环境搭建。论坛的大大们早就为我们准备好了详细的攻略。笔者并没有一台独立的Ubuntu机器,于是在Windows上安装VMWare虚拟机作为编译HarmonyOS
    的头像 发表于 11-25 09:52 3057次阅读
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>编译</b>Linux的<b class='flag-5'>编译</b>环境搭建

    浅谈单模光纤的多模光纤的区别

    单模光纤因其模间色散很小,相比于多模光纤可支持更长传输距离,在100Mbps的以太网以至1G千兆网,单模光纤都可支持超过5KM的传输距离。目前来看,单模光纤依旧是光纤传输的主流应用。本期文章跟着易天光通信(ETU-LINK)一起
    的头像 发表于 05-27 15:00 3133次阅读
    <b class='flag-5'>浅谈</b><b class='flag-5'>单模</b>光纤的多模光纤的区别

    单模光纤和多模光纤的区别 单模模块和多模光模块的区别

    我们知道光纤和光模块都有单模和多模两种类型,那么我们可能在使用中会产生疑问,单模/多模光纤和单模/多模光模块如何配套使用?它们可以混用吗?龙
    的头像 发表于 09-16 11:19 1.4w次阅读

    浅谈单模光纤和多模光纤

    一般距离近的用多模光纤,比如室内数据传输,而远的(长途传输)只能用单模光纤,多模光纤的收发器比单模的便宜很多。
    的头像 发表于 09-30 18:00 1486次阅读
    <b class='flag-5'>浅谈</b><b class='flag-5'>单模</b>光纤和多模光纤

    如何区分单模多模光模块的区别

    随着光通信技术的发展,单模与多模光模块成为了光纤通信系统中的重要组成部分。 一、概述 光模块是光通信系统中用于将光信号转换为电信号或者将电信号转换为光信号的重要部件。根据光纤的工作方式的不同,光
    的头像 发表于 04-03 16:48 235次阅读

    单模光纤能用多模光模块吗为什么

    单模光纤和多模光纤是两种不同的光纤传输方式。单模光纤通常用于长距离传输和高速传输,而多模光纤则主要用于短距离传输。由于它们之间存在一些差异,因此不能直接使用多模光模块进行单模光纤的传输
    的头像 发表于 04-03 16:50 312次阅读

    单模模块可以用多模光纤吗

    单模模块和多模光纤是光通信中常用的组件。单模模块主要用于传输单一模式的光信号,而多模光纤则可以传输多种不同模式的光信号。所以,严格来说,单模
    的头像 发表于 04-03 16:57 341次阅读