提交 6e0a4a65 编写于 作者: 唐门教主's avatar 唐门教主

Add new file

上级 6fa15ade
# 一、介绍
**本篇将实现的内容**
通过本活动,您将能够使用我们的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即可。下面为实现功能前的部分接口代码,所属文件为\vendor\hisi\camera\dvkit_product\sample\ohos3518ev300\dvkit\dvkit_camera\dmsdp_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可能需要去如下目录下:
\vendor\hisi\hi35xx\hi35xx_init\hi3518ev300
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,115200n8 root=flash fstype=jffs2 rw rootaddr=7M rootsize=8M'
```
```go
setenv bootcmd 'sf probe 0;sf read 0x40000000 0x100000 0x600000;mw 0x112c0048 1a04 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.
先完成此消息的编辑!
想要评论请 注册