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

    文章

    3482

    浏览量

    186011
  • 烧录
    +关注

    关注

    8

    文章

    259

    浏览量

    35585
  • HarmonyOS
    +关注

    关注

    79

    文章

    1975

    浏览量

    30213
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

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

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

    模块单模和多模的区别

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

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

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

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

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

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

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

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

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

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

    在光纤通信领域,光模块是实现光信号传输和接收的关键组件。在光模块市场上,单模(Single-Mode,简称SM)和多模(Multi-Mode,简称MM)是两种常见的类型,它们在应用场景、性能特点和技术参数等方面存在明显的差异。本
    的头像 发表于 05-28 15:28 7240次阅读

    单模单纤光模块怎么配对

    单模单纤光模块是一种光纤通信设备,主要用于长距离、高速率的光纤通信系统中。它采用单模光纤作为传输介质,具有传输距离远、带宽大、信号质量好等特点。 一、光模块的选型 光
    的头像 发表于 08-08 17:06 1208次阅读

    单模单纤光模块是用哪种光纤跳线

    单模单纤光模块是一种常见的光通信设备,它使用单模光纤跳线进行数据传输。 单模单纤光模块的定义 单模
    的头像 发表于 08-08 18:15 1202次阅读

    如何解决单模模块使用多模光纤的问题

    单模模块和多模光模块是两种不同类型的光模块,它们在光纤通信系统中有着不同的应用场景。 单模模块
    的头像 发表于 08-23 09:47 1200次阅读

    万兆光模块单模和多模的区别

    万兆光模块,即10Gbps(10 Gigabit per second)的光模块,是现代通信系统中不可或缺的组件之一。它们在数据中心、企业网络、服务提供商网络等场景中广泛应用。万兆光模块主要分为
    的头像 发表于 08-23 09:49 1935次阅读

    千兆光模块单模与双模的区别

    千兆光模块单模与双模的主要区别体现在以下几个方面: 1. 传输模式与光纤芯径 单模模块:其传输模式为单一光波长模式,光纤芯径较细,只能容纳单一光波传输。这种设计使得
    的头像 发表于 09-25 10:11 1059次阅读