鸿蒙嵌入式设备开发之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;实时地灵活地…

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…

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

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

高考加油,奥利给

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

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

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

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

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

【set】集合总结

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

Python数据分析I

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

安卓手机平板使用JuiceSSH无公网IP远程连接本地服务器详细流程

文章目录 前言1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 前言 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? 本文就和大家分享一下如何使用 cpolarJuiceSSH 实现手机端远程连接Linux…

深入ES6:解锁 JavaScript 类与继承的高级玩法

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; ES5、ES6介绍 文章目录 &#x1f4af;Class&#x1f35f;1 类的由来&#x1f35f;2 co…

我国衡器市场规模逐渐扩大 出口量远大于进口量

我国衡器市场规模逐渐扩大 出口量远大于进口量 衡器是利用力的杠杆平衡原理或胡克定律来测定物体质量的一种仪器设备。随着生产技术逐渐进步&#xff0c;衡器的种类逐渐增多。根据衡量方法不同&#xff0c;衡器大致可分为非自动衡器、自动衡器等&#xff1b;根据结构原理不同&a…

操作系统教材第6版——个人笔记6

3.3.4 页面调度 页面调度 当主存空间已满而又需要装入新页时&#xff0c;页式虚拟存储管理必须按照一定的算法把已在主存的一些页调出去 #主存满加新&#xff0c;把已在主存一些页调出选择淘汰页的工作称为页面调度 选择淘汰页的算法称为页面调度算法 页面调度算法设计不当&a…

现代密码学-认证协议

A.B两个用户想通过网络先建立安全的共享密钥再进行保密通信&#xff1f;A(B)如何确信自己正在和B(A)通信而不是C&#xff1f;这种通信方式为双向通信&#xff0c;此时的认证为相互认证。 相互认证 A/B两个用户在建立共享密钥时需要考虑的核心问题&#xff1a;保密性和实时性&…

家政服务小程序,提高企业在市场中的竞争力

近几年&#xff0c;人们对家政的需求持续增加&#xff0c;面对小程序的快速发展&#xff0c;互联网家政的模式成为了市场新的发展方向&#xff0c;越来越多的居民也开始在线上预约家政服务。随着当下人们对家政的需求日益提升&#xff0c;线上家政小程序利用各种信息技术&#…

verilog阻塞和非阻塞语法

阻塞和非阻塞是FPGA硬件编程中需要了解的一个概念,绝大部分时候,因为非阻塞的方式更加符合时序逻辑设计的思想,有利于时钟和信号的同步,更加有利于时序收敛,所以除非特殊情况,尽量采用非阻塞方式。 1,非阻塞代码 非阻塞赋值,A和B是同时被赋值的,具体是说在时钟的上升…

5. MySQL 运算符和函数

文章目录 【 1. 算术运算符 】【 2. 逻辑运算符 】2.1 逻辑非 (NOT 或者 !)2.2 逻辑与运算符 (AND 或者 &&)2.3 逻辑或 (OR 或者 ||)2.4 异或运算 (XOR) 【 3. 比较运算符 】3.1 等于 3.2 安全等于运算符 <>3.3 不等于运算符 (<> 或者 !)3.4 小于等于运算符…