鸿蒙嵌入式设备开发之hello world

1. 环境搭建
目前鸿蒙设备的开发环境,可以分为2个部分:Windows调试环境,和Linux编译环境。 

其中,

  • Linux环境负责编译代码,并生成鸿蒙的包。
  • Windows环境负责连接设备,进行烧录和调试。

特别注意,Linux环境不可少,因为目前只支持在Linux环境下编译,不信邪,强行在Windows上编译的结果就是: 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

1.2. Windows开发环境搭建

安装开发工具
Windows环境需要的工具列表:

  • Visual Studio Code
  • Python v3.7/v3.8
  • Node.js v12.0.0+
  • hpm
  • DevEco Device Tool 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

一些要点

  • 1). 建议按照列表的顺序安装各个工具
  • 2). Python只能是3.7 或者3.8,否则会导致DevEco Device Tool无法安装

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

  • 3). Node.js 需要 v12 以上
  • 4). hpm安装完毕以后,需要设置一个特殊权限,否则在执行的时候,会报错“无法加载文件” 
    可以通过在命令行里用管理员执行 “set-executionpolicy remotesigned”来解决。

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

  • 5). 打开VSCode,看到这个画面,表示所需的工具安装成功。  

    嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

    安装USB驱动
  • 用USB线将小车连接到电脑后,可以先到系统的设备里查看一下,是否能找到对应的设备。 
      

    嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区


    如果出现了感叹号,表示需要安装相关的驱动。 


步骤

  • 1). 下载驱动 
    http://www.wch.cn/search?q=ch340g&t=downloads 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

  • 2). 安装 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

  • 3). 检查,在设备管理器里看到USB-SERIAL CH340,表示识别成功。 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

  • 4). 在VSCode里检查,DevEco Home -> Devices 可以看到跟设备管理器里一样名字的设备,注意对应的COM口编号。  

    嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

    3.3. 安装Linux编译环境

我本来想自己装一个Ubuntu,但是发现速度有点慢,就直接用了虚拟机了。


虚拟机是VMWare格式的,可以用VMWare的Player直接打开。  

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

  • 0). 虚拟机的账号是 harmony,密码 123456
  • 1). 使用VMWare Player打开虚拟机以后,需要安装VMWare Tools才可以调整虚拟机窗口的大小。
  • 2). 首次开机后,需要手动启动samba服务,运行 "sudo service smbd start"
  • 3). 开机后,运行 ifconfig -a 查看 ip

3.4. Windows连接Linux
利用已经安装好的samba服务,Windows可以很方便的访问Linux中的文件:

在文件浏览器,而不是IE浏览器的地址栏中,输入 \\\\<linux 系统 ip>
或者
通过网上邻居查找也可以。

 
通过在Windows的VSCode中打开Linux中的鸿蒙项目,就可以把Linux环境中编译好的鸿蒙包,在Windows下烧录到鸿蒙小车中。

3.5. 烧录第一个鸿蒙系统
1). 打开鸿蒙项目
在Windows的VSCode中,打开Linux环境下的鸿蒙源码目录,在 harmony\code\code-1.0文件夹  

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区


如果提示这不是一个鸿蒙项目,选择“继续打开”,即可。

2). 配置项目
DevEco Home -> Projects -> Settings 
配置好upload_port为刚刚在设备管理器看到的COM口,如果只连了一个鸿蒙设备,直接从列表里选中就可以了。 
其他upload_protocol和upload_partitions没什么可选的,按照截图别放空就好。 
记得保存Save。

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

然后点Open打开项目,留意左边第二列的PROJECT TASKS,这是一系列快捷指令,接下去的操作要用到这些指令。 
 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

另外,这个地方,与鸿蒙开发者网站的截图略有不同,我找了好久也没有找到官网图示的位置,好在不影响hello world。  

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

3). 编译Build

前边说过,直接在Windows的VSCode里执行build,是不可以的。 

这个虚拟机貌似是没有装VSCode的,但是支持从命令行进行编译。 

所以,编译可以直接在Linux虚拟机上进行,也可以选择在Windows上利用ssh连接到Linux来进行。 

具体的做法是,

  • 打开控制台
  • 进入到项目目录下
  • 执行编译命令
python build.py wifiiot
  • 看到这段日志,表示编译成功: 
     

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

4). 烧录

烧录可以在Windows上进行,从刚刚的PROJECT TASKS中执行Upload指令即可。 
  
出现Connecting, please reset device的日志时,在30秒内,按一下小车的系统复位键(RST): 
 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

如果动作太慢,烧录指令就会失败。否则,应该能看到日志继续刷新,直到出现SUCCESS字样,表示烧录成功。 
 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

怎么知道烧录成功了呢? 
还记得小车显示屏上显示的文字吗? 
如果现在看不到了,那就表示你把原来自带的鸿蒙系统给覆盖了,说明烧录成功了……

3.6. 编写HelloWorld
但是,这还没有完,因为我还没有写HelloWorld。 
 

1). 添加HelloWorld App目录
切换到Explorer模式,查看文件列表。 
在code-1.0/applications/sample/wifi-iot/app目录下,创建一个helloworld目录 
 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

2). 添加c代码
创建一个hello_world.c文件,内容如下:

#include <stdio.h>
#include "ohos_init.h"
#include "ohos_types.h"void HelloWorld(void)
{printf("[DEMO] Hello world.\n");
}
SYS_RUN(HelloWorld);
  • 3). 添加HelloWorld配置文件
    创建一个BUILD.gn文件,内容如下:
static_library("helloworld") {sources = ["hello_world.c"]include_dirs = ["//utils/native/lite/include"]
}

 
4). 添加HelloWorld作为应用启动入口

修改 code-1.0/applications/sample/wifi-iot/app/BUILD.gn

import("//build/lite/config/component/lite_component.gni")# 旧的
#lite_component("app") {
#    features = [
#        "startup",
#    ]
#}# 新的
lite_component("app") {features = ["helloworld:helloworld",]
}


5). 重新编译并烧录
修改完,保存,重新编译,并烧录。

虽然我们尝试在输出hello world日志,但是,这个日志并不会出现在小车的显示屏上,也不会直接出现在VSCode的Output里。

6). 查看Hello World
要想看到hello world的输出,需要读取串口的数据。 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

在VSCode的命令行里,按下Ctrl+T,然后选择目标COM口序号,这里就一个COM,所以按下1 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

然后按下小车的系统复位键(RST),系统会重启,然后就可以看到 Hello World了。 

嵌入式开发小白跟连老师学鸿蒙设备开发之hello world-鸿蒙开发者社区

至此,Hello World的任务就完成了。

最后

如果你想成为一名鸿蒙开发者,以下这些资料将是十分优质且有价值,让你的鸿蒙开发之路事半功倍!相对于网上那些碎片化的知识内容,这份学习资料的知识点更加系统化,更容易理解和记忆。

内容包含了:【OpenHarmony多媒体技术、Stage模型、ArkUI多端部署、分布式应用开发、音频、视频、WebGL、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战】等技术知识点。

鸿蒙Next全套VIP学习资料←点击领取!(安全链接,放心点击

1.鸿蒙核心技术学习路线

2.大厂面试必问面试题

3.鸿蒙南向开发技术

 4.鸿蒙APP开发必备

 5.HarmonyOS Next 最新全套视频教程

 6.鸿蒙生态应用开发白皮书V2.0PDF

这份全套完整版的学习资料已经全部打包好,朋友们如果需要可以点击→鸿蒙Next全套VIP学习资料:免费领取(安全链接,放心点击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/849275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

访问成员变量(反射)

文章目录 前言一、访问成员变量的方法二、Field类 1.常用方法2.实操展示总结 前言 为了实现随时随地调用某个类的某个成员变量&#xff0c;我们可以通过反射的Field类进行调用。这其中需要我们获取该类的Class对象&#xff0c;再调用Field类的相关方法&#xff0c;实时地灵活地…

mysql 元数据锁(MDL)

因为当我们对数据库表进行操作时&#xff0c;会自动给这个表加上 MDL 对一张表进行 CRUD 操作时&#xff0c;加的是MDL 读锁&#xff1b;对一张表做结构变更操作的时候&#xff0c;加的是 MDL 写锁&#xff1b; MDL 是为了保证当用户对表执行 CRUD 操作时&#xff0c;防止其他…

618什么数码好物值得入手?优质数码清单分享,错过等明年!

在到来的618年中大促&#xff0c;各种数码好物竞相亮相&#xff0c;正是您更新装备、升级体验的黄金时刻&#xff0c;在这个购物的狂欢节里&#xff0c;我们特别为大家准备了一份精选的优质数码清单&#xff0c;帮助大家从海量的选择中筛选出真正值得入手的宝贝&#xff0c;这些…

Wireshark抓包日常运维实用过滤

0x0 Wireshark 介绍 Wireshark 是一款功能强大的网络分析工具&#xff0c;适用于网络专业人员。它提供了出色的过滤器&#xff0c;您可以轻松放大到您认为可能存在问题的位置。过滤器的主要好处是消除定位流量&#xff0c;并缩小要查找的数据类型。 0x1 根据源 IP 地址过滤主…

探秘Facebook:社交媒体的未来之路

Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;一直处于数字社交革命的前沿。然而&#xff0c;随着科技和社会的不断发展&#xff0c;Facebook正面临着新的挑战和机遇。本文将探索Facebook的未来之路&#xff0c;揭示社交媒体的新趋势和发展方向。 1. 深度社…

恢复误删和格式化的文件的利器

一、简介 1、一款由Piriform开发的免费文件恢复工具,它能够帮助用户恢复那些不小心从电脑上删除的文件,包括从回收站清空的文件,以及因用户错误操作而从存储设备中删除的图片、音乐、文档等多种格式的文件。Recuva支持对硬盘、闪存卡、U盘等多种存储介质进行扫描与恢复,并且…

Codeforces Round 951 (Div. 2) F. Kostyanych‘s Theorem(思维题 交互好题)

题目 交互题&#xff0c;n&#xff08;n<1e5&#xff09;个点的完全图&#xff0c;无向的&#xff0c;初始恰好删了n-2条边 每次询问可以输入一个d&#xff1a;? d 交互器会输出一个当前度>d的点v&#xff0c; 如果有多个这样的点&#xff0c;输出度最小的&#xff…

DALL-E 2: 重新定义图像生成的人工智能

前言 随着人工智能技术的迅猛发展&#xff0c;图像生成已经成为AI研究领域中的一个重要方向。OpenAI推出的DALL-E 2无疑是其中的佼佼者。这一强大的生成模型能够根据文本描述生成高质量的图像&#xff0c;为创意工作者和各行各业的专业人士提供了全新的工具。本文将深入探讨DA…

Python和C++赋值共享内存、Python函数传址传值、一些其他的遇到的bug

1、Numpy共享内存的情况&#xff1a; array1 np.array([1, 2, 3]) array2 array1 array2[0] 0 # array1也会跟着改变&#xff0c;就地操作 array2 array2 * 2 # array2不会跟着改变&#xff0c;属于非就地操作&#xff0c;会创建一个新的地址给array2array2 array1…

1+x(Java)中级题库易混淆理论题(三)

SQL 语句中进行 group by 分组时&#xff0c;可以不写 where 子句 分组时可以多层分组&#xff0c;比如&#xff1a;先按照省、再按照市来分组。 File 类不能获取文件的内容 在使用 select 语句进行查询分组时&#xff0c;如果希望去掉不满足条件的分组&#xff0c;使用 hav…

C#中实现订单30分钟自动取消的策略

在电子商务或在线预订系统中&#xff0c;订单超时自动取消是一个常见的需求。这种机制可以确保那些长时间未支付的订单不会一直占用系统资源&#xff0c;从而提高系统的效率和可靠性。本文将介绍如何在C#中实现一个订单在30分钟内未支付则自动取消的策略。 一、需求分析 首先…

【前端】JS示例:判断Array()类型的数组里是否存在指定的值,不存在就追加进去

在jQuery中&#xff0c;虽然jQuery主要用于操作DOM和提供丰富的JavaScript库&#xff0c;但它并没有专门用于数组操作的特定函数。然而&#xff0c;你可以使用原生的JavaScript数组方法来检查数组中是否存在某个值&#xff0c;并在不存在时将其添加到数组中。 以下是一个简单的…

高考加油,奥利给

又到了一年一度的高考时刻了啊&#xff0c;高考是漫漫人生路上的一个转折点&#xff0c;祝各位莘莘学子都超常发挥、金榜题名

阿贝云免费虚拟主机和免费云服务器评测

阿贝云是一家提供免费虚拟主机和免费云服务器的云服务提供商。他们的服务非常受用户欢迎&#xff0c;因为他们提供的免费方案相比其他竞争对手来说更具竞争力。用户可以在阿贝云上轻松创建自己的网站&#xff0c;并享受稳定可靠的服务。阿贝云的免费虚拟主机套餐包括免费的域名…

人类语言处理nlp部分笔记——二、BERT和它的家族-介绍和微调

参考自李宏毅课程-人类语言处理 二、BERT和它的家族-介绍和微调 1. What is pre-train model 这里所说的pre-train model是输入一串tokens&#xff0c;能够输出一串vectors&#xff0c;且每个vector可以表示对应的语义的模型&#xff0c;这些vectors也被称作为embeddings。以…

笔记-python爬虫之xpath的基本使用

一、简介 XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素&#xff0c;并且 XQuery 和 XPointer 都构建于 XPath 表达之上。 参照 二、安装 1 pip3 install lxml三、使用 1、导入 1 from lx…

【set】集合总结

一、Set Set集合是Collection的子接口,代表一种集合,此种集合是元素不重复. 有两个常用实现类 HashSet 是元素不重复,无序,主要是指遍历顺序和插入顺序不一致 TreeSet 是元素不重复,排序 LinkedHashSet不常用 二、HashSet 1.1 介绍 HashSet是Set的实现类 底层是由哈希表实…

微信小程序上线后获取定位失效

描述 微信小程序在开发过程中&#xff0c;不论是模拟器还是真机调试都能正常正常获取定位信息 但是上线后异常 解决 ​ 我这里以uniapp开发举例 manifest.json文件中 >> 微信小程序模块 >> 微信小程序权限配置 >> 勾选位置接口&#xff0c;描述必填&#x…

Python数据分析I

目录 注&#xff1a;简单起见&#xff0c;下文中"df"均写为"表名"&#xff0c;"函数"均写为"HS"&#xff0c;"属性"均写为"SX"&#xff0c;"范围"均写为"FW"。 1.数据分析常用开源库 注释…

在Linux环境中通过Docker运行swift

直接在Linux环境安装 swift 编译环境太难了&#xff0c;总是会遇到各种各样的问题。发现swift可以用docker安装后&#xff0c;分分钟就搞定了&#xff0c;太棒了。 1. 拉取 swift 镜像 docker pull swift:latest2. Linux本地创建程序目录 容器里面创建的文件都是临时的&…