Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
易拉罐小皮
鸿蒙开发指南
提交
6e0a4a65
鸿
鸿蒙开发指南
项目概览
易拉罐小皮
/
鸿蒙开发指南
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
鸿
鸿蒙开发指南
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
6e0a4a65
编写于
9月 10, 2020
作者:
唐门教主
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add new file
上级
6fa15ade
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
213 addition
and
0 deletion
+213
-0
HarmonyOS应用开发 — 设备虚拟化特性开发.md
HarmonyOS应用开发 — 设备虚拟化特性开发.md
+213
-0
未找到文件。
HarmonyOS应用开发 — 设备虚拟化特性开发.md
0 → 100644
浏览文件 @
6e0a4a65
# 一、介绍
**本篇将实现的内容**
通过本活动,您将能够使用我们的DevEco Device Tool完成摄像头设备的开发。达到以下效果:在使用华为手机畅联通话的过程中,可以将开发板摄像头虚拟化为手机的摄像头,在手机上展示摄像头设备拍摄到的画面
**您将会学到什么**
-
如何通过HPM包管理器获取基于HarmonyOS的具有设备虚拟化能力的摄像头解决方案工程。 使用DevEco Device
-
Tool开发环境完成代码开发、代码安全检查、编译、调试、烧录全流程。
# 二、您需要什么
## 1. 硬件要求
1.
H3518EV300+H3861WiFi模组的开发板、配套摄像头
2.
华为手机(EMUI 10.1)
3.
PC电脑
## 2. 软件要求
-
VS Code。
-
DevEco Device Tool插件。
## 3. 需要的知识点
-
硬件基础开发能力
-
C语言基础能力
提示:所有软硬件环境已经在CodeLab现场为大家准备好了
# 三、能力接入准备(可选)
参考文档第"3 环境搭建"
上述环境在CodeLab现场已经为大家准备好。
# 四、Codelabs操作步骤(1、2、3···)
## 1. 访问站点https://hpm.cbg.huawei.com/#/home,如下图
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908150049771.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
## 2. 点击"直接下载"获取到文件"xxx.zip",如果没有登录,会弹出登录页面,输入用户名,密码。Codelab现场已经登录。
## 3. 打开vscode编辑器,找到"Welcome页面->Create Project" 如下图
在插件welcome首页,选择Import Project按钮
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908150251878.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
出现下面的窗口,选择源码路径,点击Import:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908150312126.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
导入源码后的窗口,左边栏会显示源码的目录结构:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908150329998.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
## 4. 点击
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908150715560.png#pic_center
)
打开TERMINAL窗口,如下图:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908150734681.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
## 5. 在TERMINAL窗口中,输入命令hpm install,如下图:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908150811827.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
## 6. hpm install命令行执行完毕,源码工程就准备就绪了。
## 7. 代码片段
Camera虚拟化接口适配,此类接口用于定义DV Engine对智能设备Camera硬件的调用接口,智能设备厂商需实现对应的libdmsdpcamerahandler.so。如果智能设备厂商不具备Camera硬件或者不需要将Camera硬件虚拟化,不需要关注此接口,默认不实现此so即可。下面为实现功能前的部分接口代码,所属文件为
\v
endor
\h
isi
\c
amera
\d
vkit_product
\s
ample
\o
hos3518ev300
\d
vkit
\d
vkit_camera
\d
msdp_camera_sdk.c:
将OpenCamera接口函数补充完整,就可以实现camera的虚拟化功能,代码如下:
```
go
int32_t
OpenCamera
(
const
DMSDPCameraParam
*
param
)
{
if
(
param
==
NULL
)
{
return
DMSDP_ERR_INVALID_PARAMETER
;
}
if
(
!
IsCameraIdValid
(
param
->
id
,
param
->
idLen
))
{
LOGD
(
"OpenCamera camera id invalid"
);
return
DMSDP_ERR_INVALID_PARAMETER
;
}
/* camera paramter convert */
LOGD
(
"OpenCamera sdk camera=%s,width=%d,height=%d,fps=%d,dataType=%d"
,
param
->
id
,
param
->
width
,
param
->
height
,
param
->
fps
,
param
->
dataFormat
);
int32_t
ret
=
VideoStartPIPE
(
param
->
dataFormat
);
return
ret
;
}
```
代码目录如下:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908150932878.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
上述代码会被编进应用程序sample_dvkit中,该应用程序在板子的/bin/目录下,见下图:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/202009081509484.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
## 8. 安全检查
选择需要安全检查的代码目录,右键:code check
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908151012366.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
点击错误项,跳转到对应文件的对应代码行数
## 9. HarmonyOS Demo源码Linux编译
通过"Terminal""New Terminal"打开终端窗口,其中
方框1表示新建终端窗口按钮;
方框2表示打开终端窗口后的界面;
方框3,通过SSH连接Linux机器,并输入Linux机器的账号和IP地址:ssh –p22 root@10.30.237.175;
方框4,输入Linux机器的密码N6O%sUFoXBD!,,成功连上Linux机器;
由于编译代码需要root权限,如果使用其它非root账号连接Linux机器,这需要在终端中输入sudo su命令切换成root账号或者将源码文件夹设置权限为777;
接下来的操作均是在下方的终端工具中,完全是等同Linux机器下的操作,如编译的话,则进入源码路径,输入编译脚本即可;
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908151034291.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
其中编译脚本命令为python build.py ipcamera -p hi3518ev300_liteos_a -b debug,见下图:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908151150209.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
成功编译完成如下图:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908151207155.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
编译出的结果在out目录下,有三个需要烧录的文件OHOS_Image.bin、rootfs.img、userfs.img,一个可以调试的可执行程序OHOS_Image如下图:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/2020090815122357.png#pic_center
)
如果非首次编译,并且未改动内核代码,文件OHOS_Image.bin和OHOS_Image可能需要去如下目录下:
\v
endor
\h
isi
\h
i35xx
\h
i35xx_init
\h
i3518ev300
u-boot-hi3518ev300.bin的路径为:
./vendor/hisi/camera/hi3518ev300/Hi3516EV200_SDK_V6.0.0.1_B010/osdrv/pub/u-boot-hi3518ev300.bin
## 10. HarmonyOS源码烧录
目前烧录方法主要是USB烧录:
USB烧录具体步骤如下:
打开插件,找到方框1的按钮Configure,左键点击;
弹出的窗口,找到方框2的按钮Burn,左键点击;
右侧窗口找Burning Mode选择usbport;
下方的Dependent Tools的依赖文件,需要选择依赖文件的存放目录HiBurnCmdLine-v5.3.30,依赖文件单独提供,搭建vscode环境时提供;
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908151338241.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
在窗口下方的Burn Files中选择待烧录的三文件路径,分别是u-boot-hi3518ev300.bin(单独提供,不需要编译生成)、OHOS_Image.bin(在编译OHOS源码时生成,在out目录下,上面的编译源码已经提及)、rootfs.img(在编译OHOS源码时生成,在out目录下,上面的编译源码已经提及)、userfs.img(在编译OHOS源码时生成,在out目录下,上面的编译源码已经提及),烧录的起始地址如下图所示,最后点击保存按钮,USB烧录的配置完成,其中下图1对应的u-boot-hi3518ev300.bin,2对应的是OHOS_Image.bin,3对应的是rootfs.img,4对应的是userfs.img:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908151354507.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
如下图,先点击下方的Burn按钮,会弹出选择串口的打印,输入开发板对应的串口号
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908151419101.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
出现下图,需要插拔下电源:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908151436574.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
显示擦除完uboot后如果提醒还需要重新插拔下电源,则需要插拔下电源开关,log为Please power off and restart the board within 15 seconds如下:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908151453236.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
下图显示正在烧录:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908151516284.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
烧录完成:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908151543650.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
烧录完成后,通过下方的串口功能,设置uboot的参数
```
go
setenv
bootargs
'
console
=
ttyAMA0
,
115200
n8
root
=
flash
fstype
=
jffs2
rw
rootaddr
=
7
M
rootsize
=
8
M
'
```
```
go
setenv
bootcmd
'
sf
probe
0
;
sf
read
0x40000000
0x100000
0x600000
;
mw
0x112c0048
1
a04
1
;
mw
0x112c004c
1004
1
;
mw
0x112c0064
1004
1
;
mw
0x112c0060
1004
1
;
mw
0x112c005c
1004
1
;
mw
0x112c0058
1004
1
;
mw
0x120C0020
0430
1
;
go
0x40000000
'
```
```
go
saveenv
```
```
go
reset
```
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908152242134.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
最后出现下面的结果,则表示系统已经正常启动:
## 11. HarmonyOS源码单步调试
目前调试主要支持的是GDB调试,还有LLDB调试;
GDB调试:
通过"Configure""Debug"打开调试配置页,然后将方框4中的调试类型选"openocd-debug-gdb";
方框5表示GDB调试过程中需要依赖的软件名称、安装状态、配置路径;
方框6表示调试过程中经常涉及的一些参数设置,包括:
Executable File:内核文件,选择out目录下编译生成的内核文件,如liteos;
Symbol Files:应用程序符号表文件,请手动配置程序符号表文件所在路径;
OpenOCD Load Commands:OpenOCD加载命令,保持默认值"init"即可;
Set Substitute Path:当源码在Linux环境下进行编译,借助IDE进行烧录、调试时,请设置
映射路径,把Linux路径映射到Windows,格式参考提示
"set substitute-path {Linux路径} {映射的后的Windows路径}";
Default Breakpoint Address:默认的断点位置,启动调试功能后,程序会自动在该位置停止;
Restart Commands:重启调试任务时,工具发给单板的命令,保持默认值即可;
Max Breakpoints:设置断点的最大数量(主要是硬件断点,不同的硬件可能存在差异),当用
户在调试过程中添加的断点数过多,可能导致调试功能崩溃;
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908152332722.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908152349281.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
## 12. HUAWEI DevEco Device Tool终端工具
IDE还集成了一些常用的工具,满足开发者不同的需求:
串口工具
当开发板链接PC时,通过点击Visual Studio Code最下面的状态栏中的"Serial",通过配置端口号、波特率、数据位、停止位串口参数,可以打开一个串口工具。通过串口工具可以执行一些常见的操作,包括:设置u-boot的环境参数、进入开发板中烧录的HarmonyOS系统、调试等。
# 五、恭喜你
到这里你已经完成了本次开发过程。您可以通过以下方式检验开发过程是否正确
-
请使用华为手机A,打开智慧生活APP,通过添加设备,把刚开发完成的智能设备添加到智慧生活APP中。
详细步骤如下:
a) 设备启动后,会默认启动一个AP等待手机连接,此时打开手机上的智慧生活APP,下图为智慧生活APP界面:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908152558571.png#pic_center
)
b)开始添加设备,点击右上角"+","添加设备",进行设备搜索,添加设备界面如下:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908152612708.png#pic_center
)
c)搜索设备,搜索设备界面如下:!
[
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908152626181.png#pic_center
)
d)搜索到的所要连接的设备后点击"连接",此时需要输入当前WiFi信息,输入WIFI SSID和密码后,点击"下一步"。 点击"确定"后开始连接。
e)连接后出现下面的界面,选择房间号,点击"完成",即完成了设备添加:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908152643342.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
-
用另外一台手机的畅联通话APP拨打A手机。接通后,在A手机的屏幕左上角点击更多设备,可以发现开发完的智能设备,点击该设备,选择把摄像头虚拟化成A手机的外设,B手机视频通话能看到的界面切换成了智能设备拍摄到的画面。
具体步骤如下:
a)打开手机通话(EMUI11.0之前的版本)切换至畅联通话页或打开畅联通话APP(EMUI11.0及之后版本)如下图,输入被呼叫手机ID号,拨通畅联通话:
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908152733245.png#pic_center
)
b)点击测试手机左上角虚拟化按键,进行搜索,如图搜索到"XX全景摄像头":
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20200908152755999.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
c)点击搜索到的设备,虚拟化摄像头成功:
![](
https://img-blog.csdnimg.cn/20200908152811461.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center
)
[
【如果您想学习HarmonyOS 应用开发基础教程 请猛戳】
](
https://codechina.csdn.net/huawei/harmonyos/HarmonyOS-Guide
)
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录