提交 14dadd47 编写于 作者: O openharmony_ci 提交者: Gitee

!798 文档更新

Merge pull request !798 from duangavin123/master
...@@ -97,7 +97,7 @@ OpenHarmony也提供了一系列可选的系统组件,方便设备开发者按 ...@@ -97,7 +97,7 @@ OpenHarmony也提供了一系列可选的系统组件,方便设备开发者按
</td> </td>
<td class="cellrowborder" valign="top" width="35.61356135613561%" headers="mcps1.2.4.1.2 "><p id="p458073721519"><a name="p458073721519"></a><a name="p458073721519"></a>开发参考</p> <td class="cellrowborder" valign="top" width="35.61356135613561%" headers="mcps1.2.4.1.2 "><p id="p458073721519"><a name="p458073721519"></a><a name="p458073721519"></a>开发参考</p>
</td> </td>
<td class="cellrowborder" valign="top" width="35.91359135913591%" headers="mcps1.2.4.1.3 "><a name="ul175808372155"></a><a name="ul175808372155"></a><ul id="ul175808372155"><li><a href="https://device.harmonyos.com/cn/docs/develop/apiref/js-framework-file-0000000000611396" target="_blank" rel="noopener noreferrer">API参考</a></li></ul> <td class="cellrowborder" valign="top" width="35.91359135913591%" headers="mcps1.2.4.1.3 "><a name="ul175808372155"></a><a name="ul175808372155"></a><ul id="ul175808372155"><li><a href="https://device.harmonyos.com/cn/docs/develop/apiref/js-framework-file-0000000000611396" target="_blank" rel="noopener noreferrer">API参考</a></li><li><a href="faqs/Readme-CN.md" target="_blank" rel="noopener noreferrer">常见问题</a></li></ul>
</td> </td>
</tr> </tr>
</tbody> </tbody>
...@@ -167,7 +167,7 @@ OpenHarmony也提供了一系列可选的系统组件,方便设备开发者按 ...@@ -167,7 +167,7 @@ OpenHarmony也提供了一系列可选的系统组件,方便设备开发者按
</td> </td>
<td class="cellrowborder" valign="top" width="36.053605360536054%" headers="mcps1.2.4.1.2 "><p id="p670135335116"><a name="p670135335116"></a><a name="p670135335116"></a>开发参考</p> <td class="cellrowborder" valign="top" width="36.053605360536054%" headers="mcps1.2.4.1.2 "><p id="p670135335116"><a name="p670135335116"></a><a name="p670135335116"></a>开发参考</p>
</td> </td>
<td class="cellrowborder" valign="top" width="36.07360736073608%" headers="mcps1.2.4.1.3 "><a name="ul177016538519"></a><a name="ul177016538519"></a><ul id="ul177016538519"><li><a href="https://device.harmonyos.com/cn/docs/develop/apiref/js-framework-file-0000000000611396" target="_blank" rel="noopener noreferrer">API参考</a></li></ul> <td class="cellrowborder" valign="top" width="36.07360736073608%" headers="mcps1.2.4.1.3 "><a name="ul177016538519"></a><a name="ul177016538519"></a><ul id="ul177016538519"><li><a href="https://device.harmonyos.com/cn/docs/develop/apiref/js-framework-file-0000000000611396" target="_blank" rel="noopener noreferrer">API参考</a></li><li><a href="faqs/Readme-CN.md" target="_blank" rel="noopener noreferrer">常见问题</a></li></ul>
</td> </td>
</tr> </tr>
</tbody> </tbody>
......
# FAQs
- [常见问题概述](faqs-overview.md)
- [环境搭建常见问题](faqs-environment-building.md)
- [编译构建子系统常见问题](faqs-building.md)
- [烧录常见问题](faqs-burning.md)
- [内核常见问题](faqs-kernel.md)
- [移植常见问题](faqs-transplant.md)
- [启动恢复常见问题](faqs-init.md)
- [系统应用常见问题](faqs-system-using.md)
# 编译构建子系统常见问题<a name="ZH-CN_TOPIC_0000001215530845"></a>
- [轻量和小型系统](#section78686441462)
- [编译构建过程中,提示“usr/sbin/ninja: invalid option -- w”](#section67961431372)
- [编译构建过程中,提示“/usr/bin/ld: cannot find -lncurses”](#section199631617371)
- [编译构建过程中,提示“line 77: mcopy: command not found”](#section937435175)
- [编译构建过程中,提示“riscv32-unknown-elf-gcc: error trying to exec 'cc1': execvp: No such file or directory”](#section1115535018713)
- [编译构建过程中,提示“No module named 'Crypto'”](#section17982573813)
- [编译构建过程中,提示“xx.sh : xx unexpected operator”](#section53663205819)
- [编译构建过程中,提示“Could not find a version that satisfies the requirement six\>=1.9.0”](#section1917790845)
- [编译构建过程中,提示找不到“-lgcc”](#section141771701647)
- [编译构建过程中,提示找不到“python”](#section51781202415)
- [编译构建过程中,提示找不到“python3”](#section1917950148)
## 轻量和小型系统<a name="section78686441462"></a>
### 编译构建过程中,提示“usr/sbin/ninja: invalid option -- w”<a name="section67961431372"></a>
- **现象描述:**
编译失败,提示“usr/sbin/ninja: invalid option -- w”。
- **可能原因:**
编译环境中ninja版本太低,不支持--w选项。
- **解决办法:**
卸载环境中ninja和gn,按照[获取工具](../get-code/gettools-ide.md)。
### 编译构建过程中,提示“/usr/bin/ld: cannot find -lncurses”<a name="section199631617371"></a>
- **现象描述:**
编译失败,提示“/usr/bin/ld: cannot find -lncurses”。
- **可能原因:**
编译环境ncurses库缺失。
- **解决办法:**
```
sudo apt-get install lib32ncurses5-dev
```
### 编译构建过程中,提示“line 77: mcopy: command not found”<a name="section937435175"></a>
- **现象描述:**
​编译失败,提示“line 77: mcopy: command not found”。
- **可能原因:**
编译环境未安装mcopy。
- **解决办法:**
```
​sudo apt-get install dosfstools mtools
```
### 编译构建过程中,提示“riscv32-unknown-elf-gcc: error trying to exec 'cc1': execvp: No such file or directory”<a name="section1115535018713"></a>
- **现象描述:**
编译失败,提示“riscv32-unknown-elf-gcc: error trying to exec 'cc1': execvp: No such file or directory”。
-**可能原因:**
当前用户对riscv编译器路径下的文件访问权限不够。
-**解决办法:**
查询gcc\_riscv32所在目录。
```
which riscv32-unknown-elf-gcc
```
使用chmod命令修改目录权限为755。
### 编译构建过程中,提示“No module named 'Crypto'”<a name="section17982573813"></a>
- **现象描述:**
编译失败,提示“No module named 'Crypto'”。
- **可能原因:**
python3未安装Crypto。
- **解决办法:**
1. 查询Python版本号。
```
python3 --version
```
2. 需使用python3.7以上版本,然后安装pycryptodome。
```
sudo pip3 install pycryptodome
```
### 编译构建过程中,提示“xx.sh : xx unexpected operator”<a name="section53663205819"></a>
- **现象描述:**
编译失败:“xx.sh \[: xx unexpected operator”。
- **可能原因:**
编译环境shell不是bash。
- **解决办法:**
```
sudo rm -rf /bin/sh
sudo ln -s /bin/bash /bin/sh
```
### 编译构建过程中,提示“Could not find a version that satisfies the requirement six\>=1.9.0”<a name="section1917790845"></a>
- **现象描述**
编译构建过程中出现以下错误:
```
Could not find a version that satisfies the requirement six>=1.9.0
```
- **可能原因**
环境中未安装合适的“six”。
- **解决办法**
方法1:通过命令“pip3 install six”,在线安装。
方法2:离线安装
通过网页[https://pypi.org/project/six/\#files](https://pypi.org/project/six/#files),下载安装包。
![](figures/download-six.png)
将源码放置在Linux服务器中,并安装“pip3 install six-1.14.0-py2.py3-none-any.whl”。
完成上述安装后,重新构建。
### 编译构建过程中,提示找不到“-lgcc”<a name="section141771701647"></a>
- **现象描述**
编译构建过程中出现以下错误:
```
riscv32-unknown-elf-ld: cannot find -lgcc
```
- **可能原因**
交叉编译器gcc\_riscv32的PATH添加错误,如下,在"bin"后多添加了一个“/”,应该删除。
```
~/gcc_riscv32/bin/:/data/toolchain/
```
- **解决办法**
重新修改gcc\_riscv32的PATH,将多余的“/”删除。
```
~/gcc_riscv32/bin:/data/toolchain/
```
### 编译构建过程中,提示找不到“python”<a name="section51781202415"></a>
- **现象描述**
编译构建过程中出现以下错误:
```
-bash: /usr/bin/python: No such file or directory
```
- **可能原因**1
没有装python。
- **解决办法**
请按照[安装Python环境](../quick-start/quickstart-lite-env-setup-linux.md)
- **可能原因2**
![](figures/reason-no-python-soft-link.png)
- **解决办法**
usr/bin目录下没有python软链接,请运行以下命令添加软链接:
```
# cd /usr/bin/
# which python3
# ln -s /usr/local/bin/python3 python
# python --version
```
例:
![](figures/solution-add-soft-link.png)
### 编译构建过程中,提示找不到“python3”<a name="section1917950148"></a>
- **现象描述**
![](figures/11.png)
- **可能原因**
没有装python3。
- **解决办法**
请按照[安装python](../quick-start/quickstart-lite-env-setup-linux.md)。
# 烧录常见问题<a name="ZH-CN_TOPIC_0000001170009518"></a>
- [轻量和小型系统](#section278314413530)
- [烧写选择串口后,提示“Error: Opening COMxx: Access denied”](#section18988185615914)
- [烧写失败](#section1370982513317)
- [串口无回显](#section183421944953)
- [Windows电脑与单板网络连接失败](#section1215410450215)
## 轻量和小型系统<a name="section278314413530"></a>
### 烧写选择串口后,提示“Error: Opening COMxx: Access denied”<a name="section18988185615914"></a>
- **现象描述**
点击烧写并选择串口后,出现“Error: Opening COMxx: Access denied”。
![](figures/Failed-to-open-the-serial-port.png)
- **可能原因**
串口已经被占用。
- 解决方法
检查主机中可能占用该端口的工具,关闭即可。若是当前工具占用,可按以下步骤排查并关闭:
1. 排查终端窗口列表,检查是否被monitor或其他终端占用。
![](figures/terminal-list.png)
2. 找到占用,点击垃圾桶图标,关闭占用。
### 烧写失败<a name="section1370982513317"></a>
- **现象描述**
点击烧写并选择串口后,出现无法烧写的情况。
- **可能原因**
安装IDE插件DevEco后未重启。
- **解决方法**
重启IDE。
### 串口无回显<a name="section183421944953"></a>
- **现象描述**
串口显示已连接,重启单板后,回车无任何回显。
- **可能原因1**
串口连接错误。
- **解决办法**
修改串口号。
请查看设备管理器,确认连接单板的串口与终端中连接串口是否一致,若不一致,请按镜像运行修改串口号。
- **可能原因2**
单板U-boot被损坏。
- **解决办法**
烧写U-boot。
若上述步骤依旧无法连接串口,可能由于单板U-boot损坏,按下述步骤烧写U-boot。
1. 获取引导文件U-boot。
>![](../public_sys-resources/icon-notice.gif) **须知:**
>单板的U-boot文件请在开源包中获取:
>Hi3516DV300:device\\hisilicon\\hispark\_taurus\\sdk\_liteos\\uboot\\out\\boot\\u-boot-hi3516dv300.bin
>Hi3518EV300:device\\hisilicon\\hispark\_aries\\sdk\_liteos\\uboot\\out\\boot\\u-boot-hi3518ev300.bin
2. 根据USB烧写步骤烧写U-boot文件。
按照[Hi3516系列USB烧写步骤](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_upload-0000001052148681)/[Hi3518系列USB烧写步骤](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3518_upload-0000001057313128)中描述的USB烧写方法,选择对应单板的U-boot文件进行烧写。
3. 烧写完成后,登录串口如下图所示。
**图 1** U-boot烧写完成串口显示图<a name="zh-cn_topic_0000001128470856_zh-cn_topic_0000001053466255_fig155914681910"></a>
![](figures/U-boot烧写完成串口显示图.png "U-boot烧写完成串口显示图")
### Windows电脑与单板网络连接失败<a name="section1215410450215"></a>
- **现象描述**
点击烧写并选择串口后,无法获取文件。
**图 2** 网络不通,Hi3516单板无法获取文件<a name="zh-cn_topic_0000001128470856_fig135261439195819"></a>
![](figures/网络不通-Hi3516单板无法获取文件.png "网络不通-Hi3516单板无法获取文件")
- **可能原因**
单板网络与Windows电脑不联通。
Windows电脑防火墙未允许Visual Studio Code联网。
- **解决方法**
1. 检查网线是否连接。
2. 点击Windows防火墙。
![](figures/hi3516-network-and-firewall-setting.png)
3. 点击“允许应用通过防火墙”。
![](figures/hi3516-firewall-and-network-protection.png)
4. 查找Visual Studio Code应用。
![](figures/hi3516-selecting-the-visual-studio-code-application.png)
5. 勾选Visual Studio Code的专用和公用网络的访问权限。
![](figures/hi3516-allowing-the-visual-studio-code-application-to-access-the-network.png)
# 环境搭建常见问题<a name="ZH-CN_TOPIC_0000001215650793"></a>
- [轻量和小型系统](#section1742119306399)
- [安装hb过程中,出现乱码、段错误](#section36351051193919)
- [安装hb过程中,提示"cannot import 'sysconfig' from 'distutils'"](#section48221013144011)
- [安装hb过程中,提示"module 'platform' has no attribute 'linux\_distribution'"](#section10307193044111)
- [安装hb过程中,提示"Could not find a version that satisfies the requirement ohos-build"](#section8692735427)
- [安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”](#section870082884217)
- [安装python3过程中,提示“-bash: make: command not found”](#section198707170455)
- [安装python3过程中,提示“zlib not available”](#section85401445204518)
- [安装python3过程中,提示“No module named '\_ctypes'”](#section12202694460)
- [安装 kconfiglib时,遇到lsb\_release错误](#section5803174135115)
- [Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt\_pkg”](#section510820516515)
## 轻量和小型系统<a name="section1742119306399"></a>
### 安装hb过程中,出现乱码、段错误<a name="section36351051193919"></a>
- **现象描述**
执行“python3 -m pip install --user ohos-build”出现乱码、段错误(segmentation fault)。
- **可能原因**
pip版本过低。
- **解决办法**
执行如下命令升级pip。
```
python3 -m pip install -U pip
```
### 安装hb过程中,提示"cannot import 'sysconfig' from 'distutils'"<a name="section48221013144011"></a>
- **现象描述**
执行“python3 -m pip install --user ohos-build”提示"cannot import 'sysconfig' from 'distutils'"。
- **可能原因**
缺少distutils模块。
- **解决办法**
执行如下命令安装。
```
sudo apt-get install python3.8-distutils
```
### 安装hb过程中,提示"module 'platform' has no attribute 'linux\_distribution'"<a name="section10307193044111"></a>
- **现象描述**
执行“python3 -m pip install --user ohos-build”提示"module 'platform' has no attribute 'linux\_distribution'"。
- **可能原因**
python3 pip安装兼容性问题。
- **解决办法**
执行如下命令重新安装pip。
```
sudo apt remove python3-pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
```
### 安装hb过程中,提示"Could not find a version that satisfies the requirement ohos-build"<a name="section8692735427"></a>
- **现象描述**
执行“python3 -m pip install --user ohos-build”提示"Could not find a version that satisfies the requirement ohos-build"
- **可能原因**
可能是网络环境较差导致的安装失败。
- **解决办法**
1. 请检查网络连接是否正常。如果网络有问题,请修复网络问题后重新安装。
2. 若网络正常,请尝试指定临时pypi源的方式安装:
```
python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ohos-build
```
### 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”<a name="section870082884217"></a>
- **现象描述**
安装python3过程中出现以下错误:
```
configure: error: no acceptable C compiler found in $PATH. See 'config.log' for more details
```
- **可能原因**
环境中未安装“gcc”。
- **解决办法**
1、通过命令“apt-get install gcc”在线安装。
2、完成后,重新安装python3。
### 安装python3过程中,提示“-bash: make: command not found”<a name="section198707170455"></a>
- **现象描述**
安装python3过程中出现以下错误:
```
-bash: make: command not found
```
- **可能原因**
环境中未安装“make”。
- **解决办法**
1、通过命令“apt-get install make”在线安装。
2、完成后,重新安装python3。
### 安装python3过程中,提示“zlib not available”<a name="section85401445204518"></a>
- **现象描述**
安装python3过程中出现以下错误:
```
zipimport.ZipImportError: can't decompress data; zlib not available
```
- **可能原因**
环境中未安装“zlib”。
- **解决办法**
方法1:通过命令“apt-get install zlib”在线安装。
方法2:如果软件源中没有该软件,请从“www.zlib.net”下载版本代码,并离线安装。
![](figures/download-zlib.png)
完成下载后,通过以下命令安装:
```
# tar xvf zlib-1.2.11.tar.gz
# cd zlib-1.2.11
# ./configure
# make && make install
```
完成后,重新安装python3。
### 安装python3过程中,提示“No module named '\_ctypes'”<a name="section12202694460"></a>
- **现象描述**
安装python3过程中出现以下错误:
```
ModuleNotFoundError:No module named ‘_ctypes’
```
- **可能原因**
环境中未安装“libffi”和“libffi-devel”。
- **解决办法**
1、通过命令“apt-get install libffi\* -y”,在线安装。
2、完成后,重新安装python3。
### 安装 kconfiglib时,遇到lsb\_release错误<a name="section5803174135115"></a>
- **现象描述**
安装kconfiglib过程中遇到如下错误打印:
```
subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1.
```
- **可能原因**
lsb\_release模块基于的python版本与现有python版本不一致
- **解决办法**
执行"find / -name lsb\_release",找到lsb\_release位置并删除,如:"sudo rm -rf /usr/bin/lsb\_release"
### Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt\_pkg”<a name="section510820516515"></a>
- **现象描述**
Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt\_pkg"
- **可能原因**
python3 apt安装兼容性问题。
- **解决办法**
执行如下命令重新安装python3-apt。
```
sudo apt-get remove python3-apt
sudo apt-get install python3-apt
```
# 启动恢复常见问题<a name="ZH-CN_TOPIC_0000001215449321"></a>
- [系统启动过程中打印“parse failed!”错误后停止启动](#section835662214302)
- [系统启动过程未结束就自动重启,如此反复持续](#section3857921143117)
- [参数正确的情况下调用SetParameter/GetParameter返回失败](#section548818116328)
## 系统启动过程中打印“parse failed!”错误后停止启动<a name="section835662214302"></a>
**现象描述**
系统启动过程中,打印“\[Init\] InitReadCfg, parse failed! please check file /etc/init.cfg format.”错误,启动过程停止,如下图所示:
**图 1** 运行报错图<a name="zh-cn_topic_0000001063231870_fig15217111545118"></a>
![](figures/运行报错图.png "运行报错图")
**可能原因**
修改init.cfg文件时,漏掉或多加了逗号或括号等,导致init.cfg文件的json格式被破坏。
**解决办法**
仔细检查init.cfg文件,确保其格式符合json格式要求。
## 系统启动过程未结束就自动重启,如此反复持续<a name="section3857921143117"></a>
**现象描述**
镜像烧写完成后系统启动,启动过程未完成即自动重新启动,如此反复持续。
**可能原因**
被init启动的服务都有一个叫做“importance”的属性(详见[第2章表3](../subsystems/subsys-boot-init.md)描述)。
- 当该属性为0时,表示若当前服务进程退出,init不需要重启单板。
- 当该属性为1时,表示若当前服务进程退出,init需要重启单板。
因此出现上述现象的可能原因:有“importance”属性为1的服务在每次启动的过程中都会退出(可能是进程崩溃或出错自动退出),导致init进程自动重启单板。
**解决办法**
1. 需要通过日志确认崩溃或报错退出的服务,并解决其崩溃/报错的问题,然后重新烧写镜像即可。
2. 也可以将崩溃/报错退出的服务的“importance”属性改为0,然后重新烧写镜像,这样即使其退出,init也不会重启单板。
## 参数正确的情况下调用SetParameter/GetParameter返回失败<a name="section548818116328"></a>
**现象描述**
在各参数正确的情况下调用SetParameter/GetParameter返回失败。
**可能原因**
程序对SetParameter/GetParameter这两个接口做了权限校验,在各参数正确的情况下调用SetParameter/GetParameter返回操作失败,很有可能是调用者的uid大于1000,没有调用权限。
**解决办法**
无需处理
# 内核常见问题<a name="ZH-CN_TOPIC_0000001169850498"></a>
- [基础内核](#section263912372168)
- [LiteOS-A和LiteOS-M内核对外API的差异](#section447571122918)
- [如何分析线程栈溢出](#section8623141711293)
- [文件系统](#section098519592162)
- [Hi3516开源板以写的模式打开同一个文件失败(LiteOS-A)](#section517972255311)
- [LiteOS内核已支持哪些硬件平台](#section868413518533)
- [LiteOS内核已支持哪几款芯片架构](#section1131661465417)
- [三方组件](#section971818231178)
- [OpenHarmony已支持哪些三方组件](#section74138185411)
- [在OpenHarmony上使用OpenSSL,出现秘钥长度校验不正确](#section10564614135516)
- [setsockopt是否支持SO\_RCVBUF和SO\_SNDBUF选项](#section2093373215556)
- [编译链接](#section10955302179)
- [Arm Linux开发的应用程序,OpenHarmony如何在LiteOS-A上运行](#section1164175713557)
- [OpenHarmony在什么系统下编译,使用什么编译器](#section132287223567)
- [LiteOS-M上使用单独编译成静态库的三方组件,出现三方组件中的全局变量值不正确,或调用三方组件的函数后系统卡死](#section15189154225619)
- [LiteOS-A生成目标可执行文件时,提示 use VFP register arguments,xxx.o does not](#section193571012578)
- [clock\_gettime接口获取的时间打印不对](#section8973152015717)
## 基础内核<a name="section263912372168"></a>
### LiteOS-A和LiteOS-M内核对外API的差异<a name="section447571122918"></a>
基础内核API存在差异,但是LiteOS-A提供标准POSIX接口,LiteOS-M提供标准POSIX和CMSIS接口。如果要支持跨平台,三方适配建议使用POSIX等标准接口。
### 如何分析线程栈溢出<a name="section8623141711293"></a>
**问题现象**
系统异常,提示CURRENT task xxx stack overflow!
**解决措施**
1. 创建xxx线程的时候成倍加大栈空间,多次尝试如果问题不复现,则说明任务栈不够,需要调整;
2. 如果成倍加大线程栈,问题依旧复现,则排查xxx线程中是否定义超大数组,或者流程是否存在递归调用;
3. 确认无前述问题,则需要排查是否存在踩内存的情况。
## 文件系统<a name="section098519592162"></a>
### Hi3516开源板以写的模式打开同一个文件失败(LiteOS-A)<a name="section517972255311"></a>
Hi3516开源板使用FAT文件系统,不允许该操作。
### LiteOS内核已支持哪些硬件平台<a name="section868413518533"></a>
开源版本LiteOS-A已支持Hi3516/Hi3518开发板;LiteOS-M已支持Hi3861开发板、STM32F103、野火挑战者STM32F429IGTb、Nucleo\_f767zi等,详细查看kernel/liteos\_m目录下的README\_zh.md文件。
### LiteOS内核已支持哪几款芯片架构<a name="section1131661465417"></a>
LiteOS-M已支持risc-v、Cortex-m3\\m4\\m7\\m33、arm9,待支持c-sky、xtensa;LiteOS-A已支持armv7-a,待支持armv8-a,请关注开源社区更新。
## 三方组件<a name="section971818231178"></a>
### OpenHarmony已支持哪些三方组件<a name="section74138185411"></a>
已提供mbedtls、lwip等开源组件和三方库,可以直接使用;另外提供标准的POSIX接口,可以自行适配。
### 在OpenHarmony上使用OpenSSL,出现秘钥长度校验不正确<a name="section10564614135516"></a>
OpenSSL编译选项中要注意架构类型(ARM,X86等)和系统位数(32、64位)是否选择正确。
### setsockopt是否支持SO\_RCVBUF和SO\_SNDBUF选项<a name="section2093373215556"></a>
不支持。
## 编译链接<a name="section10955302179"></a>
### Arm Linux开发的应用程序,OpenHarmony如何在LiteOS-A上运行<a name="section1164175713557"></a>
需要用开源版本提供的交叉编译器重新编译应用程序,才可以运行。
### OpenHarmony在什么系统下编译,使用什么编译器<a name="section132287223567"></a>
LiteOS-A在linux环境进行编译,使用LLVM编译器;LiteOS-M在Linux或Windows环境进行编译,使用IAR、Keil、GCC等编译工具。
### LiteOS-M上使用单独编译成静态库的三方组件,出现三方组件中的全局变量值不正确,或调用三方组件的函数后系统卡死<a name="section15189154225619"></a>
检查三方组件编译选项中是否有-fPIE -fpie -fPIC -fpic等地址无关编译选项,如果有,则去掉,重新编译成库使用。
### LiteOS-A生成目标可执行文件时,提示 use VFP register arguments,xxx.o does not<a name="section193571012578"></a>
请确认xxx.o编译时是否添加-mfloat-abi=xxx -mcpu=xxx -mfpu=xxx编译选项,若没有,则需要添加。
### clock\_gettime接口获取的时间打印不对<a name="section8973152015717"></a>
struct timespec结构中tv\_sec为time\_t,而time\_t为long long类型,打印控制符为%lld,请确认实际打印控制符是否正确。
# 常见问题概述<a name="ZH-CN_TOPIC_0000001169691604"></a>
- [环境搭建](#section93289248249)
- [轻量和小型系统](#section197234983111)
- [编译构建子系统](#section18826114693810)
- [轻量和小型系统](#section693410399)
- [烧录](#section6556741113712)
- [轻量和小型系统](#section1029933713812)
- [内核](#section13741125564211)
- [基础内核](#section1723365191114)
- [文件系统](#section14523145918136)
- [芯片适配](#section141541939159)
- [三方组件](#section4988163321816)
- [编译链接](#section080219574225)
- [移植](#section129331824154313)
- [启动恢复](#section83501764443)
- [系统服务](#section19567132114455)
- [公共基础库](#section3214181711465)
- [视觉应用常见问题](#section295651815466)
- [hdc](#section178081876506)
常见问题主要用于帮助开发者解决在开发过程中经常出现的一类问题问题。当前提供了如下常见问题供开发者进行查询。
## 环境搭建<a name="section93289248249"></a>
### 轻量和小型系统<a name="section197234983111"></a>
- [安装hb过程中出现乱码、段错误](faqs-environment-building.md#section36351051193919)
- [安装hb过程中,提示"cannot import 'sysconfig' from 'distutils'"](faqs-environment-building.md#section48221013144011)
- [安装hb过程中,提示"module 'platform' has no attribute 'linux\_distribution'"](faqs-environment-building.md#section8692735427)
- [安装hb过程中,提示"Could not find a version that satisfies the requirement ohos-build"](faqs-environment-building.md#section8692735427)
- [安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”](faqs-environment-building.md#section870082884217)
- [安装python3过程中,提示“-bash: make: command not found”](faqs-environment-building.md#section198707170455)
- [安装python3过程中,提示“zlib not available”](faqs-environment-building.md#section85401445204518)
- [安装python3过程中,提示“No module named '\_ctypes'”](faqs-environment-building.md#section12202694460)
- [安装 kconfiglib时,遇到lsb\_release错误](faqs-environment-building.md#section5803174135115)
- [Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt\_pkg”](faqs-environment-building.md#section510820516515)
## 编译构建子系统<a name="section18826114693810"></a>
### 轻量和小型系统<a name="section693410399"></a>
- [编译构建过程中,提示“usr/sbin/ninja: invalid option -- w”](faqs-building.md#section67961431372)
- [编译构建过程中,提示“/usr/bin/ld: cannot find -lncurses”](faqs-building.md#section199631617371)
- [编译构建过程中,提示“line 77: mcopy: command not found”](faqs-building.md#section937435175)
- [编译构建过程中,提示“riscv32-unknown-elf-gcc: error trying to exec 'cc1': execvp: No such file or directory”](faqs-building.md#section1115535018713)
- [编译构建过程中,提示“No module named 'Crypto'”](faqs-building.md#section17982573813)
- [编译构建过程中,提示“Could not find a version that satisfies the requirement six\>=1.9.0”](faqs-building.md#section1917790845)
- [编译构建过程中,提示“Could not find a version that satisfies the requirement six\>=1.9.0”](faqs-building.md#section1917790845)
- [编译构建过程中,提示找不到“-lgcc”](faqs-building.md#section141771701647)
- [编译构建过程中,提示找不到“python”](faqs-building.md#section51781202415)
- [编译构建过程中,提示找不到“python3”](faqs-building.md#section1917950148)
## 烧录<a name="section6556741113712"></a>
### 轻量和小型系统<a name="section1029933713812"></a>
- [烧写选择串口后,提示“Error: Opening COMxx: Access denied”](faqs-burning.md#section18988185615914)
- [烧写失败](faqs-burning.md#section1370982513317)
- [串口无回显](faqs-burning.md#section183421944953)
- [Windows电脑与单板网络连接失败](faqs-burning.md#section1215410450215)
## 内核<a name="section13741125564211"></a>
### 基础内核<a name="section1723365191114"></a>
- [LiteOS-A和LiteOS-M内核对外API的差异](faqs-kernel.md#section447571122918)
- [如何分析线程栈溢出](faqs-kernel.md#section8623141711293)
### 文件系统<a name="section14523145918136"></a>
- [Hi3516开源板以写的模式打开同一个文件失败(LiteOS-A)](faqs-kernel.md#section517972255311)
### 芯片适配<a name="section141541939159"></a>
- [LiteOS内核已支持哪些硬件平台](faqs-kernel.md#section868413518533)
- [LiteOS内核已支持哪几款芯片架构](faqs-kernel.md#section1131661465417)
### 三方组件<a name="section4988163321816"></a>
- [OpenHarmony已支持哪些三方组件](faqs-kernel.md#section74138185411)
- [在OpenHarmony上使用OpenSSL,出现秘钥长度校验不正确](faqs-kernel.md#section10564614135516)
- [setsockopt是否支持SO\_RCVBUF和SO\_SNDBUF选项](faqs-kernel.md#section2093373215556)
### 编译链接<a name="section080219574225"></a>
- [Arm Linux开发的应用程序,如何在LiteOS-A上运行](faqs-kernel.md#section1164175713557)
- [OpenHarmony在什么系统下编译,使用什么编译器](faqs-kernel.md#section132287223567)
- [LiteOS-M上使用单独编译成静态库的三方组件,出现三方组件中的全局变量值不正确,或调用三方组件的函数后系统卡死](faqs-kernel.md#section15189154225619)
- [LiteOS-A生成目标可执行文件,提示 use VFP register arguments,xxx.o does not](faqs-kernel.md#section193571012578)
- [clock\_gettime接口获取的时间打印不对](faqs-kernel.md#section8973152015717)
## 移植<a name="section129331824154313"></a>
- [如何将用户的堆内存挂载进内核](faqs-transplant.md#section21471536184914)
## 启动恢复<a name="section83501764443"></a>
- [系统启动过程中打印“parse failed!”错误后停止启动](faqs-init.md#section835662214302)
- [系统启动过程未结束就自动重启,如此反复持续](faqs-init.md#section3857921143117)
- [参数正确的情况下调用SetParameter/GetParameter返回失败](faqs-init.md#section548818116328)
## 系统服务<a name="section19567132114455"></a>
### 公共基础库<a name="section3214181711465"></a>
- [LiteOS-A内核\(Hi3516、Hi3518平台\)KV存储路径设置错误,导致KV存储运行失败](faqs-system-using.md#section16520347131511)
### 视觉应用常见问题<a name="section295651815466"></a>
- [是否存在一个全局变量,所有的页面都可以访问?](faqs-system-using.md#section187297991718)
- [如何获取dom中的元素](faqs-system-using.md#section1833493719175)
- [如何在页面间传值?](faqs-system-using.md#section184283812183)
- [list如何滚动到某个item?](faqs-system-using.md#section11897734131811)
- [text支持多行吗?](faqs-system-using.md#section5872656121814)
- [为什么控件不显示?](faqs-system-using.md#section7397125317107)
- [如何实现页面滑动?](faqs-system-using.md#section338794422010)
- [Left、Top为什么不生效?](faqs-system-using.md#section2597193611217)
- [动态绑定为什么不生效?](faqs-system-using.md#section6939050172115)
- [如何实现相对定位和绝对定位?](faqs-system-using.md#section5547311192215)
- [如何控制控件的显示与隐藏?](faqs-system-using.md#section16107113352213)
- [使用Margin时,有什么注意事项?](faqs-system-using.md#section1524910142314)
- [使用事件订阅时,有什么注意事项?](faqs-system-using.md#section1537132012231)
- [使用动态绑定时,有什么注意事项?](faqs-system-using.md#section96561452236)
- [swiper loop属性如何生效?](faqs-system-using.md#section690166112414)
- [使用数组时,有什么注意事项?](faqs-system-using.md#section1554552822414)
### hdc<a name="section178081876506"></a>
- [hdc\_std连接不到设备](faqs-system-using.md#section1965012223257)
- [hdc\_std运行不了](faqs-system-using.md#section1157575212515)
# 系统应用常见问题<a name="ZH-CN_TOPIC_0000001169690992"></a>
- [公共基础库常见问题](#section639433461512)
- [1.LiteOS-A内核\(Hi3516、Hi3518平台\)KV存储路径设置错误,导致KV存储运行失败](#section16520347131511)
- [视觉应用常见问题](#section787718474161)
- [是否存在一个全局变量,所有的页面都可以访问?](#section187297991718)
- [如何获取dom中的元素](#section1833493719175)
- [如何在页面间传值?](#section184283812183)
- [list如何滚动到某个item?](#section11897734131811)
- [text支持多行吗?](#section5872656121814)
- [为什么控件不显示?](#section7397125317107)
- [如何实现页面滑动?](#section338794422010)
- [Left、Top为什么不生效?](#section2597193611217)
- [动态绑定为什么不生效?](#section6939050172115)
- [如何实现相对定位和绝对定位?](#section5547311192215)
- [如何控制控件的显示与隐藏?](#section16107113352213)
- [使用Margin时,有什么注意事项?](#section1524910142314)
- [使用事件订阅时,有什么注意事项?](#section1537132012231)
- [使用动态绑定时,有什么注意事项?](#section96561452236)
- [swiper loop属性如何生效?](#section690166112414)
- [使用数组时,有什么注意事项?](#section1554552822414)
- [hdc类问题](#section412357182518)
- [hdc\_std连接不到设备](#section1965012223257)
- [hdc\_std运行不了](#section1157575212515)
## 公共基础库常见问题<a name="section639433461512"></a>
### 1.LiteOS-A内核\(Hi3516、Hi3518平台\)KV存储路径设置错误,导致KV存储运行失败<a name="section16520347131511"></a>
**现象描述**
LiteOS-A内核\(Hi3516、Hi3518平台\)直接调用KV存储提供的接口,各参数正常的情况下,编译可执行程序运行失败。
**可能原因**
直接运行编译出的可执行文件,没有将程序基于AbilityKit转换成应用,不能由BMS在应用安装时正确设置应用数据存储路径,导致KV存储运行失败。
**解决办法**
显示调用KV存储的UtilsSetEnv接口,设置数据存储路径。
```
UtilsSetEnv("/storage/com.huawei.kv");
```
## 视觉应用常见问题<a name="section787718474161"></a>
### 是否存在一个全局变量,所有的页面都可以访问?<a name="section187297991718"></a>
当前框架中不存在所有Page都可以访问的全局变量。
### 如何获取dom中的元素<a name="section1833493719175"></a>
如何获取dom中的元素?
通过ref属性获取dom中的元素,详细示例如下图所示;获取的元素只能使用它的方法,不能改变属性。
```
<!--index.hml-->
<div class="container">
<!--指定组件的ref属性为animator-->
<image-animator class="image-player" ref="ainmator" images="{{images}}" duration="1s" onclick="handleClick"></image-animator>
</div>
/* index.js */
export default {
data: {
images:[
{src:"common/frame1.png"},
{src:"common/frame2.png"},
{src:"common/frame3.png"}
]
},
handleClick(){
//通过$refs属性获取对应的组件,在hml中,组件的ref属性要设置为animator
const animator = this.$refs.animator;
const state = animator.getState();
if(state == "paused"){
animator.resume();
}else if(state == "stopped"){
animator.start();
}else{
animator.pause();
}
}
}
```
### 如何在页面间传值?<a name="section184283812183"></a>
通过router.replace方法中的params参数来传递,参考代码如下:
第一个页面传递数据:
```
router.replace({
uri:'pages/detail/detail', //要跳转的页面uri
params:{transferData:this.data} //传递的数据,数据个数和名称开发者自己定义,
});
```
第二个界面接受数据:
```
onInit(){
const data = this.transferData; //在onInit函数中接受传递的数据
}
```
### list如何滚动到某个item?<a name="section11897734131811"></a>
通过list的scrollTo方法滚动到指定的item,参数是目标item的index。Index参数可以通过scrollend事件获取或者开发者指定。
### text支持多行吗?<a name="section5872656121814"></a>
text支持多行。通过回车键换行或者是不设置text的高度属性,由控件自动根据内容换行。
### 为什么控件不显示?<a name="section7397125317107"></a>
**现象描述**
开发者在hml文件中添加的控件无法显示
**可能原因**
- 未设置width和height值;
- 样式设置错误。
**处理步骤**
\(1\)检查是否设置width和height值,组件必须显式设置width和height值;
\(2\)检查组件的样式设置是否正确。
### 如何实现页面滑动?<a name="section338794422010"></a>
实现页面滑动目前有三种方式:scroll(根组件大小超过屏幕的大小即自动实现scroll效果)、list、swiper。开发者可以参考开发文档查看三者的区别,并加以使用。
### Left、Top为什么不生效?<a name="section2597193611217"></a>
除根节点外,Left、Top配合Stack组件使用才有效果。
### 动态绑定为什么不生效?<a name="section6939050172115"></a>
在进行绑定时,必须先将要绑定的对象或者对象的属性进行定义,不能先绑定后定义
### 如何实现相对定位和绝对定位?<a name="section5547311192215"></a>
使用div、stack(top left属性)来实现相对和绝对定位。
### 如何控制控件的显示与隐藏?<a name="section16107113352213"></a>
通过display、show和if来控制控件的显示与隐藏。区别在于:if为false时,组件会从VDOM中移除,而show仅是渲染时不可见,组件依然存在于VDOM中。
### 使用Margin时,有什么注意事项?<a name="section1524910142314"></a>
Stack组件不支持其子组件设置margin属性。
### 使用事件订阅时,有什么注意事项?<a name="section1537132012231"></a>
在应用运行期间只存在一个page,所以router.replace跳转是先销毁前一个页面,然后在新创建一个界面。因此,如果涉及到事件订阅的页面,每次页面创建时要进行事件订阅,跳转离开界面前取消事件订阅。
### 使用动态绑定时,有什么注意事项?<a name="section96561452236"></a>
过多的动态绑定会消耗较多的内存,若非业务需要,尽量不要使用太多的动态绑定。
### swiper loop属性如何生效?<a name="section690166112414"></a>
去掉第一个组件或者去掉最后一个组件,剩余的长度大于swiper长度,loop生效。
### 使用数组时,有什么注意事项?<a name="section1554552822414"></a>
数组元素不宜过多,尽量避免对大数组进行频繁操作。
## hdc类问题<a name="section412357182518"></a>
### hdc\_std连接不到设备<a name="section1965012223257"></a>
- **现象描述**
执行 "hdc\_std list targets"命令后结果为:\[Empty\]
- **解决方法**
1. 设备没有被识别:
在设备管理器中查看是否有hdc设备,在通用串行总线设备中会有“HDC Device”信息。如果没有,hdc无法连接。此时需要插拔设备,或者烧写最新的镜像。
2. hdc\_std工作异常:
可以执行"hdc kill"或者"hdc start -r"杀掉hdc服务或者重启hdc服务,然后再执行hdc list targets查看是否已经可以获取设备信息。
3. hdc\_std与设备不匹配:
如果设备烧写的是最新镜像,hdc\_std也需要使用最新版本。由于hdc\_std会持续更新,请从开源仓developtools\_hdc\_standard中获取,具体位置在该开源仓的prebuilt目录。
### hdc\_std运行不了<a name="section1157575212515"></a>
- **现象描述**
点击hdc\_std.exe文件无法运行。
- **解决方法**
hdc\_std.exe不需要安装,直接放到磁盘上就能使用,也可以添加到环境变量中。通过打开cmd执行hdc\_std命令直接使用。
# 移植常见问题<a name="ZH-CN_TOPIC_0000001215769367"></a>
- [如何将用户的堆内存挂载进内核](#section21471536184914)
## 如何将用户的堆内存挂载进内核<a name="section21471536184914"></a>
- 内核堆内存配置的相关宏如下,用户可根据实际情况,在target\_config.h中配置:
**表 1** 内核堆内存配置相关宏
<a name="zh-cn_topic_0000001153683024_table04172020563"></a>
<table><thead align="left"><tr id="zh-cn_topic_0000001153683024_row5462035616"><th class="cellrowborder" valign="top" width="39.12%" id="mcps1.2.3.1.1"><p id="zh-cn_topic_0000001153683024_p1456204569"><a name="zh-cn_topic_0000001153683024_p1456204569"></a><a name="zh-cn_topic_0000001153683024_p1456204569"></a>宏名称</p>
</th>
<th class="cellrowborder" valign="top" width="60.88%" id="mcps1.2.3.1.2"><p id="zh-cn_topic_0000001153683024_p19502005618"><a name="zh-cn_topic_0000001153683024_p19502005618"></a><a name="zh-cn_topic_0000001153683024_p19502005618"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="zh-cn_topic_0000001153683024_row14522018560"><td class="cellrowborder" valign="top" width="39.12%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0000001153683024_p35112025620"><a name="zh-cn_topic_0000001153683024_p35112025620"></a><a name="zh-cn_topic_0000001153683024_p35112025620"></a>LOSCFG_SYS_EXTERNAL_HEAP</p>
</td>
<td class="cellrowborder" valign="top" width="60.88%" headers="mcps1.2.3.1.2 "><p id="zh-cn_topic_0000001153683024_p5127138175710"><a name="zh-cn_topic_0000001153683024_p5127138175710"></a><a name="zh-cn_topic_0000001153683024_p5127138175710"></a>这个宏决定系统是使用内核的内部堆内存还是用户的堆内存,默认为0(即使用内部的堆内存),大小为0x10000;如果用户需要基于外部的堆内存,那么可以将该宏设置为1。</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001153683024_row20514209567"><td class="cellrowborder" valign="top" width="39.12%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0000001153683024_p5532017563"><a name="zh-cn_topic_0000001153683024_p5532017563"></a><a name="zh-cn_topic_0000001153683024_p5532017563"></a>LOSCFG_SYS_HEAP_ADDR</p>
</td>
<td class="cellrowborder" valign="top" width="60.88%" headers="mcps1.2.3.1.2 "><p id="zh-cn_topic_0000001153683024_p65520125619"><a name="zh-cn_topic_0000001153683024_p65520125619"></a><a name="zh-cn_topic_0000001153683024_p65520125619"></a>内核堆内存的起始地址。</p>
</td>
</tr>
<tr id="zh-cn_topic_0000001153683024_row15302929115615"><td class="cellrowborder" valign="top" width="39.12%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0000001153683024_p113021529145612"><a name="zh-cn_topic_0000001153683024_p113021529145612"></a><a name="zh-cn_topic_0000001153683024_p113021529145612"></a>LOSCFG_SYS_HEAP_SIZE</p>
</td>
<td class="cellrowborder" valign="top" width="60.88%" headers="mcps1.2.3.1.2 "><p id="zh-cn_topic_0000001153683024_p1030252965619"><a name="zh-cn_topic_0000001153683024_p1030252965619"></a><a name="zh-cn_topic_0000001153683024_p1030252965619"></a>内核堆内存的大小,即LOSCFG_SYS_HEAP_ADDR指定的内存块大小。</p>
</td>
</tr>
</tbody>
</table>
- 注意事项:
指定的堆内存范围务必保证没有其他模块使用,避免踩内存,破坏堆内存功能。
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP\(Image Signal Processor\)、H.265视频压缩编码器,同时集成高性能NNIE引擎,使得Hi3516DV300在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。 Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP\(Image Signal Processor\)、H.265视频压缩编码器,同时集成高性能NNIE引擎,使得Hi3516DV300在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。
**图 1** Hi3516单板正面外观图<a name="fig6340825506"></a> **图 1** Hi3516单板正面外观图<a name="fig6340825506"></a>
![](figure/Hi3516单板正面外观图.png "Hi3516单板正面外观图") ![](figures/Hi3516单板正面外观图.png "Hi3516单板正面外观图")
## 开发板规格<a name="section15192203316533"></a> ## 开发板规格<a name="section15192203316533"></a>
......
...@@ -8,10 +8,10 @@ ...@@ -8,10 +8,10 @@
Hi3518EV300作为新一代智慧视觉处理SOC,集成新一代ISP\(Image Signal Processor\)以及H.265视频压缩编码器,同时采用先进低功耗工艺和低功耗架构设计,使其在低码率、高画质、低功耗等方面引领行业水平。 Hi3518EV300作为新一代智慧视觉处理SOC,集成新一代ISP\(Image Signal Processor\)以及H.265视频压缩编码器,同时采用先进低功耗工艺和低功耗架构设计,使其在低码率、高画质、低功耗等方面引领行业水平。
**图 1** Hi3518EV300单板正面外观图<a name="fig73059502010"></a> **图 1** Hi3518EV300单板正面外观图<a name="fig73059502010"></a>
![](figure/Hi3518EV300单板正面外观图.png "Hi3518EV300单板正面外观图") ![](figures/Hi3518EV300单板正面外观图.png "Hi3518EV300单板正面外观图")
**图 2** Hi3518EV300单板背面外观图<a name="fig14828141713116"></a> **图 2** Hi3518EV300单板背面外观图<a name="fig14828141713116"></a>
![](figure/Hi3518EV300单板背面外观图.png "Hi3518EV300单板背面外观图") ![](figures/Hi3518EV300单板背面外观图.png "Hi3518EV300单板背面外观图")
## 开发板规格<a name="section765112478446"></a> ## 开发板规格<a name="section765112478446"></a>
......
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
Hi3861 WLAN模组是一片大约2cm\*5cm大小的开发板,是一款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基带和RF(Radio Frequency)电路。支持OpenHarmony,并配套提供开放、易用的开发和调试运行环境。 Hi3861 WLAN模组是一片大约2cm\*5cm大小的开发板,是一款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基带和RF(Radio Frequency)电路。支持OpenHarmony,并配套提供开放、易用的开发和调试运行环境。
**图 1** Hi3861 WLAN模组外观图<a name="fig5781557185810"></a> **图 1** Hi3861 WLAN模组外观图<a name="fig5781557185810"></a>
![](figure/Hi3861-WLAN模组外观图.png "Hi3861-WLAN模组外观图") ![](figures/Hi3861-WLAN模组外观图.png "Hi3861-WLAN模组外观图")
另外,Hi3861 WLAN模组还可以通过与Hi3861底板连接,扩充自身的外设能力,底板如下图所示。 另外,Hi3861 WLAN模组还可以通过与Hi3861底板连接,扩充自身的外设能力,底板如下图所示。
**图 2** Hi3861底板外观图<a name="fig12182375916"></a> **图 2** Hi3861底板外观图<a name="fig12182375916"></a>
![](figure/Hi3861底板外观图.png "Hi3861底板外观图") ![](figures/Hi3861底板外观图.png "Hi3861底板外观图")
- RF电路包括功率放大器PA(Power Amplifier)、低噪声放大器LNA(Low Noise Amplifier)、RF Balun、天线开关以及电源管理等模块;支持20MHz标准带宽和5MHz/10MHz窄带宽,提供最大72.2Mbit/s物理层速率。 - RF电路包括功率放大器PA(Power Amplifier)、低噪声放大器LNA(Low Noise Amplifier)、RF Balun、天线开关以及电源管理等模块;支持20MHz标准带宽和5MHz/10MHz窄带宽,提供最大72.2Mbit/s物理层速率。
- Hi3861 WLAN基带支持正交频分复用(OFDM)技术,并向下兼容直接序列扩频(DSSS)和补码键控(CCK)技术,支持IEEE 802.11 b/g/n协议的各种数据速率。 - Hi3861 WLAN基带支持正交频分复用(OFDM)技术,并向下兼容直接序列扩频(DSSS)和补码键控(CCK)技术,支持IEEE 802.11 b/g/n协议的各种数据速率。
...@@ -23,7 +23,7 @@ Hi3861 WLAN模组是一片大约2cm\*5cm大小的开发板,是一款高度集 ...@@ -23,7 +23,7 @@ Hi3861 WLAN模组是一片大约2cm\*5cm大小的开发板,是一款高度集
- Hi3861芯片适用于智能家电等物联网智能终端领域。 - Hi3861芯片适用于智能家电等物联网智能终端领域。
**图 3** Hi3861功能框图<a name="fig1367035113590"></a> **图 3** Hi3861功能框图<a name="fig1367035113590"></a>
![](figure/Hi3861功能框图.png "Hi3861功能框图") ![](figures/Hi3861功能框图.png "Hi3861功能框图")
## 资源和约束<a name="section82610215014"></a> ## 资源和约束<a name="section82610215014"></a>
......
# 常见问题<a name="ZH-CN_TOPIC_0000001128470858"></a> # 常见问题<a name="ZH-CN_TOPIC_0000001128470858"></a>
- [hb 安装过程中出现乱码、段错误](#section411894616119) - [安装hb过程中,出现乱码、段错误](#section411894616119)
- [hb 安装过程中提示"cannot import 'sysconfig' from 'distutils'"](#section629417571626) - [安装hb过程中,提示"cannot import 'sysconfig' from 'distutils'"](#section629417571626)
- [hb 安装过程中提示"module 'platform' has no attribute 'linux\_distribution'"](#section10871523332) - [安装hb过程中,提示"module 'platform' has no attribute 'linux\_distribution'"](#section10871523332)
- [hb 安装过程中提示"Could not find a version that satisfies the requirement ohos-build"](#section47351657163213) - [安装hb过程中,提示"Could not find a version that satisfies the requirement ohos-build"](#section47351657163213)
- [Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt\_pkg”](#section159891252236) - [Linux编译服务器终端输入不识别的命令时提示“ImportError: No module named apt\_pkg”](#section159891252236)
## hb 安装过程中出现乱码、段错误<a name="section411894616119"></a> ## 安装hb过程中,出现乱码、段错误<a name="section411894616119"></a>
- **现象描述** - **现象描述**
...@@ -26,11 +26,11 @@ ...@@ -26,11 +26,11 @@
``` ```
## hb 安装过程中提示"cannot import 'sysconfig' from 'distutils'"<a name="section629417571626"></a> ## 安装hb过程中,提示"cannot import 'sysconfig' from 'distutils'"<a name="section629417571626"></a>
- **现象描述** - **现象描述**
执行“python3 -m pip install --user ohos-build”提示"cannot import 'sysconfig' from 'distutils'" 执行“python3 -m pip install --user ohos-build”提示"cannot import 'sysconfig' from 'distutils'"
- **可能原因** - **可能原因**
...@@ -46,11 +46,11 @@ ...@@ -46,11 +46,11 @@
``` ```
## hb 安装过程中提示"module 'platform' has no attribute 'linux\_distribution'"<a name="section10871523332"></a> ## 安装hb过程中,提示"module 'platform' has no attribute 'linux\_distribution'"<a name="section10871523332"></a>
- **现象描述** - **现象描述**
执行“python3 -m pip install --user ohos-build”提示"module 'platform' has no attribute 'linux\_distribution'" 执行“python3 -m pip install --user ohos-build”提示"module 'platform' has no attribute 'linux\_distribution'"
- **可能原因** - **可能原因**
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
``` ```
## hb 安装过程中提示"Could not find a version that satisfies the requirement ohos-build"<a name="section47351657163213"></a> ## 安装hb过程中,提示"Could not find a version that satisfies the requirement ohos-build"<a name="section47351657163213"></a>
- **现象描述** - **现象描述**
......
...@@ -108,11 +108,11 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev e2fsprogs pkg ...@@ -108,11 +108,11 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev e2fsprogs pkg
1. 运行如下命令,查看Ubuntu版本: 1. 运行如下命令,查看Ubuntu版本:
``` ```
cat /etc/issue cat /etc/issue
``` ```
1. 根据Ubuntu不同版本,安装python。 2. 根据Ubuntu不同版本,安装python。
- 如果Ubuntu 版本为18+,运行如下命令。 - 如果Ubuntu 版本为18+,运行如下命令。
``` ```
...@@ -175,7 +175,7 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev e2fsprogs pkg ...@@ -175,7 +175,7 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev e2fsprogs pkg
3. 解压LLVM安装包至\~/llvm路径下。 3. 解压LLVM安装包至\~/llvm路径下。
``` ```
tar -zxvf llvm.tar.gz -C ~/ tar -zxvf llvm.tar -C ~/
``` ```
4. 设置环境变量。 4. 设置环境变量。
......
# Windows开发环境准备<a name="ZH-CN_TOPIC_0000001196067299"></a> # Windows开发环境准备<a name="ZH-CN_TOPIC_0000001216018805"></a>
- [获取软件](#zh-cn_topic_0000001058091994_section1483143015558) - [安装DevEco Device Tool](#zh-cn_topic_0000001058091994_section10761564496)
- [安装Visual Studio Code](#zh-cn_topic_0000001058091994_section71401018163318)
- [安装Python](#zh-cn_topic_0000001058091994_section16266553175320)
- [安装Node.js](#zh-cn_topic_0000001058091994_section5353233124511)
- [安装hpm](#zh-cn_topic_0000001058091994_section173054793610)
- [安装DevEco Device Tool插件](#zh-cn_topic_0000001058091994_section4336315185716)
系统要求: 系统要求:
- Windows 10 64位系统。 - Windows 10 64位系统。
- 系统的用户名不能含有中文字符。 - 系统的用户名不能含有中文字符。
DevEco Device Tool以插件方式提供,基于Visual Studio Code进行扩展,安装分为如下几步: ## 安装DevEco Device Tool<a name="zh-cn_topic_0000001058091994_section10761564496"></a>
1. 安装Visual Studio Code
2. 安装Python
3. 安装Node.js
4. 安装hpm
5. 安装DevEco Device Tool插件
## 获取软件<a name="zh-cn_topic_0000001058091994_section1483143015558"></a>
<a name="zh-cn_topic_0000001058091994_table12730195765616"></a>
<table><thead align="left"><tr id="zh-cn_topic_0000001058091994_row6730125785610"><th class="cellrowborder" valign="top" width="19.49%" id="mcps1.1.5.1.1"><p id="zh-cn_topic_0000001058091994_p1573065716561"><a name="zh-cn_topic_0000001058091994_p1573065716561"></a><a name="zh-cn_topic_0000001058091994_p1573065716561"></a>工具名称</p>
</th>
<th class="cellrowborder" valign="top" width="20.5%" id="mcps1.1.5.1.2"><p id="zh-cn_topic_0000001058091994_p197306572566"><a name="zh-cn_topic_0000001058091994_p197306572566"></a><a name="zh-cn_topic_0000001058091994_p197306572566"></a>用途说明</p>
</th>
<th class="cellrowborder" valign="top" width="20.03%" id="mcps1.1.5.1.3"><p id="zh-cn_topic_0000001058091994_p373085711569"><a name="zh-cn_topic_0000001058091994_p373085711569"></a><a name="zh-cn_topic_0000001058091994_p373085711569"></a>版本要求</p>
</th>
<th class="cellrowborder" valign="top" width="39.98%" id="mcps1.1.5.1.4"><p id="zh-cn_topic_0000001058091994_p197309576566"><a name="zh-cn_topic_0000001058091994_p197309576566"></a><a name="zh-cn_topic_0000001058091994_p197309576566"></a>获取渠道</p>
</th>
</tr>
</thead>
<tbody><tr id="zh-cn_topic_0000001058091994_row12730155765618"><td class="cellrowborder" valign="top" width="19.49%" headers="mcps1.1.5.1.1 "><p id="zh-cn_topic_0000001058091994_p123931728135713"><a name="zh-cn_topic_0000001058091994_p123931728135713"></a><a name="zh-cn_topic_0000001058091994_p123931728135713"></a>Visual Studio Code</p>
</td>
<td class="cellrowborder" valign="top" width="20.5%" headers="mcps1.1.5.1.2 "><p id="zh-cn_topic_0000001058091994_p12332194816317"><a name="zh-cn_topic_0000001058091994_p12332194816317"></a><a name="zh-cn_topic_0000001058091994_p12332194816317"></a>代码编辑工具</p>
</td>
<td class="cellrowborder" valign="top" width="20.03%" headers="mcps1.1.5.1.3 "><p id="zh-cn_topic_0000001058091994_p711918919618"><a name="zh-cn_topic_0000001058091994_p711918919618"></a><a name="zh-cn_topic_0000001058091994_p711918919618"></a>V1.53及以上64位版本。</p>
</td>
<td class="cellrowborder" valign="top" width="39.98%" headers="mcps1.1.5.1.4 "><p id="zh-cn_topic_0000001058091994_p2721438193710"><a name="zh-cn_topic_0000001058091994_p2721438193710"></a><a name="zh-cn_topic_0000001058091994_p2721438193710"></a><a href="https://code.visualstudio.com/Download" target="_blank" rel="noopener noreferrer">https://code.visualstudio.com/Download</a></p>
</td>
</tr>
<tr id="zh-cn_topic_0000001058091994_row187311257185619"><td class="cellrowborder" valign="top" width="19.49%" headers="mcps1.1.5.1.1 "><p id="zh-cn_topic_0000001058091994_p21270444579"><a name="zh-cn_topic_0000001058091994_p21270444579"></a><a name="zh-cn_topic_0000001058091994_p21270444579"></a>Python</p>
</td>
<td class="cellrowborder" valign="top" width="20.5%" headers="mcps1.1.5.1.2 "><p id="zh-cn_topic_0000001058091994_p547205817316"><a name="zh-cn_topic_0000001058091994_p547205817316"></a><a name="zh-cn_topic_0000001058091994_p547205817316"></a>编译构建工具</p>
</td>
<td class="cellrowborder" valign="top" width="20.03%" headers="mcps1.1.5.1.3 "><p id="zh-cn_topic_0000001058091994_p1991315166416"><a name="zh-cn_topic_0000001058091994_p1991315166416"></a><a name="zh-cn_topic_0000001058091994_p1991315166416"></a>V3.8.9及以上64位版本</p>
</td>
<td class="cellrowborder" valign="top" width="39.98%" headers="mcps1.1.5.1.4 "><p id="zh-cn_topic_0000001058091994_p108321457411"><a name="zh-cn_topic_0000001058091994_p108321457411"></a><a name="zh-cn_topic_0000001058091994_p108321457411"></a><a href="https://www.python.org/downloads/" target="_blank" rel="noopener noreferrer">https://www.python.org/downloads/</a></p>
</td>
</tr>
<tr id="zh-cn_topic_0000001058091994_row117316576562"><td class="cellrowborder" valign="top" width="19.49%" headers="mcps1.1.5.1.1 "><p id="zh-cn_topic_0000001058091994_p16405151165717"><a name="zh-cn_topic_0000001058091994_p16405151165717"></a><a name="zh-cn_topic_0000001058091994_p16405151165717"></a>Node.js</p>
</td>
<td class="cellrowborder" valign="top" width="20.5%" headers="mcps1.1.5.1.2 "><p id="zh-cn_topic_0000001058091994_p1773185765616"><a name="zh-cn_topic_0000001058091994_p1773185765616"></a><a name="zh-cn_topic_0000001058091994_p1773185765616"></a>提供npm环境</p>
</td>
<td class="cellrowborder" valign="top" width="20.03%" headers="mcps1.1.5.1.3 "><p id="zh-cn_topic_0000001058091994_p16304104120181"><a name="zh-cn_topic_0000001058091994_p16304104120181"></a><a name="zh-cn_topic_0000001058091994_p16304104120181"></a>以下版本三选一:</p>
<a name="zh-cn_topic_0000001058091994_ul875854471719"></a><a name="zh-cn_topic_0000001058091994_ul875854471719"></a><ul id="zh-cn_topic_0000001058091994_ul875854471719"><li>V12.22.5及以上64位版本</li><li>V14.17.5及以上64版本</li><li>V16.6.0及以上64位版本</li></ul>
</td>
<td class="cellrowborder" valign="top" width="39.98%" headers="mcps1.1.5.1.4 "><p id="zh-cn_topic_0000001058091994_p9200911141112"><a name="zh-cn_topic_0000001058091994_p9200911141112"></a><a name="zh-cn_topic_0000001058091994_p9200911141112"></a><a href="https://nodejs.org/zh-cn/download/" target="_blank" rel="noopener noreferrer">https://nodejs.org/zh-cn/download/</a></p>
</td>
</tr>
<tr id="zh-cn_topic_0000001058091994_row6731105715561"><td class="cellrowborder" valign="top" width="19.49%" headers="mcps1.1.5.1.1 "><p id="zh-cn_topic_0000001058091994_p2081865318571"><a name="zh-cn_topic_0000001058091994_p2081865318571"></a><a name="zh-cn_topic_0000001058091994_p2081865318571"></a>hpm</p>
</td>
<td class="cellrowborder" valign="top" width="20.5%" headers="mcps1.1.5.1.2 "><p id="zh-cn_topic_0000001058091994_p1632215161040"><a name="zh-cn_topic_0000001058091994_p1632215161040"></a><a name="zh-cn_topic_0000001058091994_p1632215161040"></a>包管理工具</p>
</td>
<td class="cellrowborder" valign="top" width="20.03%" headers="mcps1.1.5.1.3 "><p id="zh-cn_topic_0000001058091994_p773185715566"><a name="zh-cn_topic_0000001058091994_p773185715566"></a><a name="zh-cn_topic_0000001058091994_p773185715566"></a>V1.3.0及以上</p>
</td>
<td class="cellrowborder" valign="top" width="39.98%" headers="mcps1.1.5.1.4 "><p id="zh-cn_topic_0000001058091994_p14731125745610"><a name="zh-cn_topic_0000001058091994_p14731125745610"></a><a name="zh-cn_topic_0000001058091994_p14731125745610"></a>请参考<a href="#zh-cn_topic_0000001058091994_section173054793610">安装hpm</a></p>
</td>
</tr>
<tr id="zh-cn_topic_0000001058091994_row13317205645717"><td class="cellrowborder" valign="top" width="19.49%" headers="mcps1.1.5.1.1 "><p id="zh-cn_topic_0000001058091994_p143411112587"><a name="zh-cn_topic_0000001058091994_p143411112587"></a><a name="zh-cn_topic_0000001058091994_p143411112587"></a>DevEco Device Tool</p>
</td>
<td class="cellrowborder" valign="top" width="20.5%" headers="mcps1.1.5.1.2 "><p id="zh-cn_topic_0000001058091994_p1690316506517"><a name="zh-cn_topic_0000001058091994_p1690316506517"></a><a name="zh-cn_topic_0000001058091994_p1690316506517"></a>OpenHarmony源码的编译、烧录、调试插件工具</p>
</td>
<td class="cellrowborder" valign="top" width="20.03%" headers="mcps1.1.5.1.3 "><p id="zh-cn_topic_0000001058091994_p113171956185715"><a name="zh-cn_topic_0000001058091994_p113171956185715"></a><a name="zh-cn_topic_0000001058091994_p113171956185715"></a>V2.2 Beta2</p>
</td>
<td class="cellrowborder" valign="top" width="39.98%" headers="mcps1.1.5.1.4 "><p id="zh-cn_topic_0000001058091994_p3503163074720"><a name="zh-cn_topic_0000001058091994_p3503163074720"></a><a name="zh-cn_topic_0000001058091994_p3503163074720"></a><a href="https://device.harmonyos.com/cn/ide#download_beta" target="_blank" rel="noopener noreferrer">https://device.harmonyos.com/cn/ide#download_beta</a></p>
<p id="zh-cn_topic_0000001058091994_p23171856135717"><a name="zh-cn_topic_0000001058091994_p23171856135717"></a><a name="zh-cn_topic_0000001058091994_p23171856135717"></a>下载前,请使用华为开发者帐号登录,如未注册,请先<a href="https://developer.huawei.com/consumer/cn/doc/start/registration-and-verification-0000001053628148" target="_blank" rel="noopener noreferrer">注册华为开发者帐号</a></p>
</td>
</tr>
</tbody>
</table>
## 安装Visual Studio Code<a name="zh-cn_topic_0000001058091994_section71401018163318"></a> DevEco Device Tool以插件方式运行,基于Visual Studio Code进行扩展,同时DevEco Device Tool运行依赖Python,Node.js和hpm工具。
>![](../public_sys-resources/icon-note.gif) **说明:** DevEco Device Tool支持一体化安装,即DevEco Device Tool安装向导会检测系统是否安装Visual Studio Code、Python、Node.js、hpm的适配版本,当安装向导未检测到这些软件时,会给出相应的提示,根据提示勾选要自动安装的软件,安装向导会自动下载相应的软件进行安装。
>如果已安装Visual Studio Code,打开命令行工具,输入**code --version**命令,检查版本号是否为1.53及以上版本;可以正常返回版本号,说明环境变量设置也正确。
1. 双击Visual Studio Code软件包进行安装。安装过程中,请勾选“添加到PATH(重启后生效)”。 安装DevEco Device Tool,**主机的用户名不能包含中文字符**,否则在运行DevEco Device Tool时,DevEco Home界面会一直处于Loading状态,导致不能正常使用
![](figure/installing-visual-studio-code.png) 1. 获取软件,请使用华为开发者帐号登录[https://device.harmonyos.com/cn/ide\#download\_beta](https://device.harmonyos.com/cn/ide#download_beta),下载DevEco Device Tool V3.0 Beta1及以上版本。如未注册华为开发者账号,请先[注册](https://developer.huawei.com/consumer/cn/doc/start/registration-and-verification-0000001053628148)
2. 解压DevEco Device Tool压缩包,双击安装包程序,点击Next进行安装。
3. 设置DevEco Device Tool的安装路径,点击Next。
4. 根据安装向导提示,勾选要自动安装的软件,点击Next。
2. 安装完成后,打开命令行工具,输入**code --version**命令,可以正常显示版本号说明安装成功。 ![](figures/Snap28.png)
## 安装Python<a name="zh-cn_topic_0000001058091994_section16266553175320"></a> >![](../public_sys-resources/icon-note.gif) **说明:**
>当安装向导检测到系统中已安装可兼容的Python版本,会提示用户可选择已安装的可兼容的Python版本,也可选择下载推荐的Python版本。
1. 双击Python安装包进行安装,勾选“**Add Python 3.8 to PATH**”,然后点击**Install Now**开始安装。
![](figure/installing-python.png)
2. 等待安装完成后,点击**Close**
![](figure/setup-was-successful.png)
3. 打开命令行工具,输入python --version,检查安装结果。
![](figure/checking-the-installation-result.png)
4. 在命令行工具中,分别执行如下命令设置pip源,用于后续安装DevEco Device Tool过程中下载依赖的组件包。
```
pip config set global.trusted-host repo.huaweicloud.com
pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple
pip config set global.timeout 120
```
## 安装Node.js<a name="zh-cn_topic_0000001058091994_section5353233124511"></a>
>![](../public_sys-resources/icon-note.gif) **说明:**
>如果已安装Node.js,打开命令行工具,输入**node -v**命令,检查版本号是否为12.0.0及以上版本。
1. 点击下载后的软件包进行安装,全部按照默认设置点击**Next**,直至**Finish**。安装过程中,Node.js会自动在系统的path环境变量中配置node.exe的目录路径。
2. 重新打开命令行工具,输入“node -v“命令,能正常查询Node.js的版本号,说明Node.js安装成功。
## 安装hpm<a name="zh-cn_topic_0000001058091994_section173054793610"></a>
该方式需先确保**Node.js**安装成功。
在安装hpm前,请检查网络连接状态,如果网络不能直接访问Internet,则需要通过代理服务器才可以访问。这种情况下,需要先[设置npm代理](https://device.harmonyos.com/cn/docs/ide/user-guides/npm_proxy-0000001054491032),才能安装hpm。
>![](../public_sys-resources/icon-note.gif) **说明:**
>如果已安装hpm,可以执行**npm update -g @ohos/hpm-cli**命令升级hpm至最新版本。
1. 建议将npm源配置为国内镜像,例如设置为华为云镜像源。
```
npm config set registry https://repo.huaweicloud.com/repository/npm/
```
2. 打开命令行工具,执行如下命令安装最新版本hpm。
```
npm install -g @ohos/hpm-cli
```
![](figure/hpm-version.png)
3. 安装完成后,执行如下命令(V为大写字母)检查hpm安装结果。
```
hpm -V
```
5. 在以下界面点击Next,进行软件下载和安装。
## 安装DevEco Device Tool插件<a name="zh-cn_topic_0000001058091994_section4336315185716"></a> ![](figures/Snap8.png)
安装DevEco Device Tool插件,**主机的用户名不能包含中文字符**,否则在运行DevEco Device Tool时,DevEco Home界面会一直处于Loading状态,导致不能正常使用 6. 在弹出的Python安装向导中,勾选“**Add Python 3.8 to PATH**”,然后点击**Install Now**开始安装,等待安装完成后,点击**Close**
DevEco Device Tool正常运行需要依赖于C/C++和CodeLLDB插件,在安装完DevEco Device Tool后,会自动从Visual Studio Code的插件市场安装C/C++和CodeLLDB插件。因此,在安装DevEco Device Tool前,请检查Visual Studio Code的网络连接状态,如果网络不能直接访问Internet,则需要通过代理服务器才可以访问,请先[Visual Studio Code代理设置](https://device.harmonyos.com/cn/docs/ide/user-guides/vscode_proxy-0000001074231144) >![](../public_sys-resources/icon-note.gif) **说明:**
>当DevEco Device Tool安装向导检测系统已安装可兼容的Python版本,且用户选择了已安装的可兼容的Python版本,则Python安装向导不会弹出,用户不需要执行此步骤。
>如果安装DevEco Device Tool 2.1 Release版本,Python版本只能为3.8.x版本,不能安装最新的Python3.9.x版本。如果安装DevEco Device Tool V3.0 Beta1及以上版本,Python版本只能为3.8.x或3.9.x版本。
>![](../public_sys-resources/icon-note.gif) **说明:** ![](figures/Snap34.png)
>安装DevEco Device Tool时,请先关闭Visual Studio Code。
1. 解压DevEco Device Tool插件压缩包,双击安装包程序进行安装。 7. 在弹出的Visual Studio Code安装向导中,根据向导提示安装Visual Studio Code,安装过程中,请勾选“添加到PATH(重启后生效)”。
2. DevEco Device Tool会检测安装依赖的工具包是否符合要求。如果不符合要求,请按照本章节前面的内容进行安装。
>![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
>如果已经安装Visual Studio Code,但依然检测不到,可重启电脑解决 >当DevEco Device Tool安装向导检测系统已安装正确的Visual Studio Code版本,则Visual Studio Code安装向导不会弹出,用户不需要执行此步骤
![](figure/installing-the-deveco-device-tool.png) ![](figures/Snap33.png)
3. 点击**Install**进行安装 8. 在弹出的Node.js安装向导中,全部按照默认设置点击**Next**,直至**Finish**。安装过程中,Node.js会自动在系统的path环境变量中配置node.exe的目录路径
![](figure/install.png) >![](../public_sys-resources/icon-note.gif) **说明:**
>当DevEco Device Tool安装向导检测系统已安装正确的Node.js版本,则Node.js安装向导不会弹出,用户不需要执行此步骤。
4. 等待安装完成后,点击Close关闭安装界面 9. 等待DevEco Device Tool安装向导自动安装hpm和DevEco Device Tool插件,直至安装完成,点击**Finish**,关闭DevEco Device Tool安装向导
![](figure/installation-complete.png) >![](../public_sys-resources/icon-note.gif) **说明:**
>当DevEco Device Tool安装向导检测系统已安装正确的hpm版本,则不会进行hpm软件的下载和安装。
5. 启动Visual Studio Code,会自动安装DevEco Device Tool依赖的C/C++、CodeLLDB插件。等待安装完成后,点击Visual Studio Code左侧的![](figure/button.png)按钮,检查INSTALLED中,是否已成功安装C/C++、CodeLLDB和DevEco Device Tool。 10. 启动Visual Studio Code,会自动安装DevEco Device Tool依赖的C/C++、CodeLLDB插件。等待安装完成后,点击Visual Studio Code左侧的![](figures/button.png)按钮,检查INSTALLED中,是否已成功安装C/C++、CodeLLDB和DevEco Device Tool。
>![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
>如果C/C++和CodeLLDB插件安装不成功,则DevEco Device Tool不能正常运行,解决方法,详细请参考:[离线安装C/C++和CodeLLDB插件](https://device.harmonyos.com/cn/docs/ide/user-guides/offline_plugin_install-0000001074376846)。 >如果C/C++和CodeLLDB插件安装不成功,则DevEco Device Tool不能正常运行,解决方法,详细请参考:[离线安装C/C++和CodeLLDB插件](https://device.harmonyos.com/cn/docs/ide/user-guides/offline_plugin_install-0000001074376846)。
![](figure/visual-studio-code.png) ![](figures/deveco-device-tool-install-sucessful.png)
# 常见问题<a name="ZH-CN_TOPIC_0000001128470856"></a> # 常见问题<a name="ZH-CN_TOPIC_0000001128470856"></a>
- [烧写选择串口后提示失败](#section627268185113) - [烧写选择串口后,提示“Error: Opening COMxx: Access denied”](#section627268185113)
- [Windows电脑与单板网络连接失败](#section195391036568) - [Windows电脑与单板网络连接失败](#section195391036568)
- [烧写失败](#section571164016565) - [烧写失败](#section571164016565)
- [编译构建过程中,提示找不到“python”](#section1039835245619) - [编译构建过程中,提示找不到“python”](#section1039835245619)
- [串口无回显](#section14871149155911) - [串口无回显](#section14871149155911)
## 烧写选择串口后提示失败<a name="section627268185113"></a> ## 烧写选择串口后,提示“Error: Opening COMxx: Access denied”<a name="section627268185113"></a>
- **现象描述** - **现象描述**
点击烧写并选择串口后,出现Error: Opening COMxx: Access denied 点击烧写并选择串口后,出现“Error: Opening COMxx: Access denied”
**图 1** 打开串口失败图<a name="fig1756105874814"></a> ![](figures/Failed-to-open-the-serial-port.png)
![](figure/打开串口失败图.png "打开串口失败图")
- **可能原因** - **可能原因**
串口已经被占用。 串口已经被占用。
- **解决办法** - 解决方法
1. 按图依次选择下拉框,查找带有serial-xx的终端
**图 2** 查找是否存在占用串口的终端<a name="fig723433664916"></a>
![](figure/查找是否存在占用串口的终端.png "查找是否存在占用串口的终端")
2. 点击标号中的垃圾桶图标,关闭串口。 检查主机中可能占用该端口的工具,关闭即可。若是当前工具占用,可按以下步骤排查并关闭:
**图 3** 关闭串口终端<a name="fig197211713185012"></a> 1. 排查终端窗口列表,检查是否被monitor或其他终端占用。
![](figure/关闭串口终端.png "关闭串口终端")
3. 重新点击烧写,选择串口并开始烧写程序 ![](figures/terminal-list.png)
**图 4** 重新启动烧写任务<a name="fig2196042514"></a> 2. 找到占用,点击垃圾桶图标,关闭占用。
![](figure/重新启动烧写任务.png "重新启动烧写任务")
## Windows电脑与单板网络连接失败<a name="section195391036568"></a> ## Windows电脑与单板网络连接失败<a name="section195391036568"></a>
...@@ -43,8 +35,8 @@ ...@@ -43,8 +35,8 @@
点击烧写并选择串口后,无法获取文件。 点击烧写并选择串口后,无法获取文件。
**图 5** 网络不通,单板无法获取文件图<a name="fig135261439195819"></a> **图 1** 网络不通,Hi3516单板无法获取文件<a name="fig135261439195819"></a>
![](figure/网络不通-单板无法获取文件图.png "网络不通-单板无法获取文件图") ![](figures/网络不通-Hi3516单板无法获取文件.png "网络不通-Hi3516单板无法获取文件")
- **可能原因** - **可能原因**
...@@ -57,23 +49,19 @@ ...@@ -57,23 +49,19 @@
1. 检查网线是否连接。 1. 检查网线是否连接。
2. 点击Windows防火墙。 2. 点击Windows防火墙。
**图 6** 网络防火墙设置图<a name="fig168416458311"></a> ![](figures/hi3516-network-and-firewall-setting.png)
![](figure/网络防火墙设置图.png "网络防火墙设置图")
3. 点击“允许应用通过防火墙”。 3. 点击“允许应用通过防火墙”。
**图 7** 防火墙和网络保护界面图<a name="fig19866154513414"></a> ![](figures/hi3516-firewall-and-network-protection.png)
![](figure/防火墙和网络保护界面图.png "防火墙和网络保护界面图")
4. 查找Visual Studio Code应用。 4. 查找Visual Studio Code应用。
**图 8** 查找Visual Studio Code应用图<a name="fig9213244657"></a> ![](figures/hi3516-selecting-the-visual-studio-code-application.png)
![](figure/查找Visual-Studio-Code应用图.png "查找Visual-Studio-Code应用图")
5. 勾选Visual Studio Code的专用和公用网络的访问权限。 5. 勾选Visual Studio Code的专用和公用网络的访问权限。
**图 9** 允许Visual Studio Code应用访问网络<a name="fig019395421210"></a> ![](figures/hi3516-allowing-the-visual-studio-code-application-to-access-the-network.png)
![](figure/允许Visual-Studio-Code应用访问网络.png "允许Visual-Studio-Code应用访问网络")
## 烧写失败<a name="section571164016565"></a> ## 烧写失败<a name="section571164016565"></a>
...@@ -95,7 +83,7 @@ ...@@ -95,7 +83,7 @@
- **现象描述** - **现象描述**
![](figure/Symptom.png) ![](figures/symptom-for-not-finding-python.png)
- **可能原因1** - **可能原因1**
...@@ -104,11 +92,11 @@ ...@@ -104,11 +92,11 @@
- **解决办法** - **解决办法**
请按照[安装Python环境](quickstart-lite-env-setup-linux.md#section1238412211211)。 请按照[安装Python环境](../quick-start/quickstart-lite-env-setup-linux.md)。
- **可能原因2** - **可能原因2**
![](figure/reason-for-not-finding-python.png) ![](figures/reason-for-not-finding-python.png)
- **解决办法** - **解决办法**
...@@ -123,7 +111,7 @@ ...@@ -123,7 +111,7 @@
例: 例:
![](figure/solution-6.png) ![](figures/solution.png)
## 串口无回显<a name="section14871149155911"></a> ## 串口无回显<a name="section14871149155911"></a>
...@@ -140,7 +128,7 @@ ...@@ -140,7 +128,7 @@
修改串口号。 修改串口号。
请查看设备管理器,确认连接单板的串口与终端中连接串口是否一致,若不一致,请按镜像运行内[步骤1](#section627268185113)修改串口号。 请查看设备管理器,确认连接单板的串口与终端中连接串口是否一致,若不一致,请按镜像运行修改串口号。
- **可能原因2** - **可能原因2**
...@@ -167,7 +155,7 @@ ...@@ -167,7 +155,7 @@
3. 烧写完成后,登录串口如下图所示。 3. 烧写完成后,登录串口如下图所示。
**图 10** U-boot烧写完成串口显示图<a name="zh-cn_topic_0000001053466255_fig155914681910"></a> **图 2** U-boot烧写完成串口显示图<a name="zh-cn_topic_0000001053466255_fig155914681910"></a>
![](figure/U-boot烧写完成串口显示图.png "U-boot烧写完成串口显示图") ![](figures/U-boot烧写完成串口显示图.png "U-boot烧写完成串口显示图")
...@@ -433,13 +433,13 @@ ...@@ -433,13 +433,13 @@
>若无法连接串口,请参考[常见问题](quickstart-lite-steps-hi3516-faqs.md#section14871149155911)进行排查。 >若无法连接串口,请参考[常见问题](quickstart-lite-steps-hi3516-faqs.md#section14871149155911)进行排查。
**图 1** 连接串口图<a name="fig124315964718"></a> **图 1** 连接串口图<a name="fig124315964718"></a>
![](figure/连接串口图-4.png "连接串口图-4") ![](figures/连接串口图.png "连接串口图")
1. 单击**Monitor**打开串口。 1. 单击**Monitor**打开串口。
2. 连续输入回车直到串口显示"hisilicon"。 2. 连续输入回车直到串口显示"hisilicon"。
3. 单板初次启动或修改启动参数,请进入[步骤2](quickstart-lite-steps-hi3516-running.md#l5b42e79a33ea4d35982b78a22913b0b1),否则进入[步骤3](quickstart-lite-steps-hi3516-running.md#ld26f18828aa44c36bfa36be150e60e49)。 3. 单板初次启动或修改启动参数,请进入[步骤2](#li109940111259),否则进入[步骤3](#li448312542515)。
2. (单板初次启动必选)修改U-boot的bootcmd及bootargs内容:该步骤为固化操作,若不修改参数只需执行一次。每次复位单板均会自动进入系统。 2. <a name="li109940111259"></a>(单板初次启动必选)修改U-boot的bootcmd及bootargs内容:该步骤为固化操作,若不修改参数只需执行一次。每次复位单板均会自动进入系统。
>![](../public_sys-resources/icon-notice.gif) **须知:** >![](../public_sys-resources/icon-notice.gif) **须知:**
>U-boot引导程序默认会有2秒的等待时间,用户可使用回车打断等待并显示"hisilicon",通过**reset**命令可再次启动系统。 >U-boot引导程序默认会有2秒的等待时间,用户可使用回车打断等待并显示"hisilicon",通过**reset**命令可再次启动系统。
...@@ -480,10 +480,10 @@ ...@@ -480,10 +480,10 @@
>![](../public_sys-resources/icon-notice.gif) **须知:** >![](../public_sys-resources/icon-notice.gif) **须知:**
>**“go 0x80000000”**为可选指令,默认配置已将该指令固化在启动参数中,单板复位后可自动启动。若想切换为手动启动,可在U-boot启动倒数阶段使用"回车"打断自动启动。 >**“go 0x80000000”**为可选指令,默认配置已将该指令固化在启动参数中,单板复位后可自动启动。若想切换为手动启动,可在U-boot启动倒数阶段使用"回车"打断自动启动。
3. 输入**“reset”**指令并回车,重启单板,启动成功如下图,输入回车串口显示OHOS字样。 3. <a name="li448312542515"></a>输入**“reset”**指令并回车,重启单板,启动成功如下图,输入回车串口显示OHOS字样。
**图 2** 系统启动图<a name="fig14618415485"></a> **图 2** 系统启动图<a name="fig14618415485"></a>
![](figure/系统启动图-5.png "系统启动图-5") ![](figures/系统启动图.png "系统启动图")
4. 根目录下,在命令行输入指令“**./bin/hello\_uart**”执行写入的demo程序,显示成功结果如下所示。 4. 根目录下,在命令行输入指令“**./bin/hello\_uart**”执行写入的demo程序,显示成功结果如下所示。
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
- [编译](#section1077671315253) - [编译](#section1077671315253)
- [烧录](#section1347011412201) - [烧录](#section1347011412201)
- [使用网口烧录](#section1935410617363) - [使用网口烧录](#section1935410617363)
- [镜像运行](#section24721014162010)
- [镜像运行](#section24721014162010)
- [执行应用程序](#section5276734182615) - [执行应用程序](#section5276734182615)
本节指导开发者在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello OHOS!”。 本节指导开发者在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello OHOS!”。
...@@ -140,8 +140,8 @@ hb set(设置编译路径) ...@@ -140,8 +140,8 @@ hb set(设置编译路径)
hb build -f(执行编译) hb build -f(执行编译)
``` ```
**图 1** 设置图例<a name="fig1458988766"></a> **图 1** Hi3516编译设置图例<a name="fig1458988766"></a>
![](figure/设置图例.png "设置图例") ![](figures/Hi3516编译设置图例.png "Hi3516编译设置图例")
结果文件生成在out/hispark\_taurus/ipcamera\_hispark\_taurus目录下。 结果文件生成在out/hispark\_taurus/ipcamera\_hispark\_taurus目录下。
...@@ -162,11 +162,11 @@ Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。 ...@@ -162,11 +162,11 @@ Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。
>![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
>如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。 >如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。
![](figure/record-the-serial-port-number-1.png) ![](figures/hi3516-record-the-serial-port-number.png)
3. 打开DevEco Device Tool,在Projects中,点击**Settings**打开工程配置界面。 3. 打开DevEco Device Tool,在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。
![](figure/settings.png) ![](figures/hi3516-deveco-device-tool-setting.png)
4. 在“Partition Configuration”页签,设置待烧录文件信息,默认情况下,DevEco Device Tool已针对Hi3516DV300开发板进行适配,无需单独修改。 4. 在“Partition Configuration”页签,设置待烧录文件信息,默认情况下,DevEco Device Tool已针对Hi3516DV300开发板进行适配,无需单独修改。
5. 在“hi3516dv300”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。 5. 在“hi3516dv300”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。
...@@ -175,7 +175,7 @@ Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。 ...@@ -175,7 +175,7 @@ Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。
- upload\_protocol:选择烧录协议,固定选择“hiburn-net”。 - upload\_protocol:选择烧录协议,固定选择“hiburn-net”。
- upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、kernel、rootfs和userfs。 - upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、kernel、rootfs和userfs。
![](figure/hi3516-upload-options.png) ![](figures/hi3516-upload-options.png)
6. 检查和设置连接开发板后的网络适配器的IP地址信息,设置方法请参考[设置Hi3516DV300网口烧录的IP地址信息](https://device.harmonyos.com/cn/docs/ide/user-guides/set_ipaddress-0000001141825075) 6. 检查和设置连接开发板后的网络适配器的IP地址信息,设置方法请参考[设置Hi3516DV300网口烧录的IP地址信息](https://device.harmonyos.com/cn/docs/ide/user-guides/set_ipaddress-0000001141825075)
7. 设置网口烧录的IP地址信息,设置如下选项: 7. 设置网口烧录的IP地址信息,设置如下选项:
...@@ -185,52 +185,51 @@ Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。 ...@@ -185,52 +185,51 @@ Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。
- upload\_net\_client\_gw:设置开发板的网关,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.1 - upload\_net\_client\_gw:设置开发板的网关,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.1
- upload\_net\_client\_ip:设置开发板的IP地址,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.3 - upload\_net\_client\_ip:设置开发板的IP地址,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.3
![](figure/ip-address-information.png) ![](figures/ip-address-information.png)
8. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 8. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
9. 打开工程文件,点击![](figure/deveco-device-tool-logo.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hi3516dv300下的**Upload**按钮,启动烧录。 9. 打开工程文件,点击![](figures/hi3516-deveco-device-tool-logo.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hi3516dv300下的**Upload**按钮,启动烧录。
![](figure/start-burning.png) ![](figures/hi3516-upload-start-burning.png)
10. 启动烧录后,显示如下提示信息时,请重启开发板(下电再上电)。 10. 启动烧录后,显示如下提示信息时,请重启开发板(下电再上电)。
![](figure/restart-the-development-board-2.png) ![](figures/hi3516-restart-the-development-board.png)
11. 重新上电后,启动烧录,界面提示如下信息时,表示烧录成功。 11. 重新上电后,界面提示如下信息时,表示烧录成功。
![](figure/burning-succeeded-3.png) ![](figures/hi3516-burning-succeeded-net.png)
12. 烧录成功后,请根据镜像运行章节进行操作,启动系统。
## 镜像运行<a name="section24721014162010"></a> ### 镜像运行<a name="section24721014162010"></a>
在完成Hi3516DV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。 在完成Hi3516DV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。
1. 在Hi3516DV300任务中,点击**Configure bootloader(Boot OS)**进行配置即可。 1. 在Hi3516DV300任务中,点击**Configure bootloader(Boot OS)**进行配置即可。
> ![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
> DevEco Device Tool针对Hi3516DV300开发板的BootLoader设置进行了适配,无需开发者手动修改。 >DevEco Device Tool针对Hi3516DV300开发板的BootLoader设置进行了适配,无需开发者手动修改。
![](D:/IDP%E5%8F%91%E5%B8%83%E4%BB%B6/220/For%20OpenHarmony2.0/zh/quick-start/figures/bootloader.png)
2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。
![](figure/reset_success.png) ![](figures/bootloader.png)
3. 在任务栏点击**Monitor**按钮,启动串口工具 2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功
![](figure/monitor.png) ![](figures/reset_success.png)
4. 然后根据界面提示进行操作,直到在界面打印**OHOS \#**信息,表示系统启动成功 3. 在任务栏点击**Monitor**按钮,启动串口工具
![](figure/reboot_success.png) ![](figures/monitor.png)
4. 然后根据界面提示进行操作,直到在界面打印**OHOS \#**信息,表示系统启动成功。
![](figures/reboot_success.png)
## 执行应用程序<a name="section5276734182615"></a> ## 执行应用程序<a name="section5276734182615"></a>
根目录下,在命令行输入指令“**./bin/helloworld**”执行写入的demo程序,显示成功结果如下图所示。 根目录下,在命令行输入指令“**./bin/helloworld**”执行写入的demo程序,显示成功结果如下图所示。
**图 4** 启动并成功执行应用程序图<a name="fig149821431194515"></a> **图 2** 启动并成功执行应用程序图<a name="fig149821431194515"></a>
![](figure/启动并成功执行应用程序图.png "启动并成功执行应用程序图") ![](figures/启动并成功执行应用程序图.png "启动并成功执行应用程序图")
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
各硬件连接关系如下图所示。 各硬件连接关系如下图所示。
**图 1** 硬件连线图<a name="fig38451744110"></a> **图 1** Hi3516开发硬件连线图<a name="fig86246141414"></a>
![](figure/硬件连线图-0.png "硬件连线图-0") ![](figures/Hi3516开发硬件连线图.png "Hi3516开发硬件连线图")
### 软件要求<a name="section965634210501"></a> ### 软件要求<a name="section965634210501"></a>
...@@ -61,7 +61,7 @@ Hi3516开发板对Linux服务器通用环境配置需要的工具及其获取途 ...@@ -61,7 +61,7 @@ Hi3516开发板对Linux服务器通用环境配置需要的工具及其获取途
<td class="cellrowborder" valign="top" width="59.75597559755976%" headers="mcps1.2.4.1.3 "><p id="p280018394233"><a name="p280018394233"></a><a name="p280018394233"></a>通过apt-get install安装</p> <td class="cellrowborder" valign="top" width="59.75597559755976%" headers="mcps1.2.4.1.3 "><p id="p280018394233"><a name="p280018394233"></a><a name="p280018394233"></a>通过apt-get install安装</p>
</td> </td>
</tr> </tr>
<tr id="row29204072315"><td class="cellrowborder" valign="top" width="25.112511251125113%" headers="mcps1.2.4.1.1 "><p id="p5921190162318"><a name="p5921190162318"></a><a name="p5921190162318"></a>Java 虚拟机环境</p> <tr id="row29204072315"><td class="cellrowborder" valign="top" width="25.112511251125113%" headers="mcps1.2.4.1.1 "><p id="p5921190162318"><a name="p5921190162318"></a><a name="p5921190162318"></a>Java虚拟机环境</p>
</td> </td>
<td class="cellrowborder" valign="top" width="15.13151315131513%" headers="mcps1.2.4.1.2 "><p id="p17921110152311"><a name="p17921110152311"></a><a name="p17921110152311"></a>编译、调试和运行Java程序</p> <td class="cellrowborder" valign="top" width="15.13151315131513%" headers="mcps1.2.4.1.2 "><p id="p17921110152311"><a name="p17921110152311"></a><a name="p17921110152311"></a>编译、调试和运行Java程序</p>
</td> </td>
...@@ -87,7 +87,7 @@ ls -l /bin/sh ...@@ -87,7 +87,7 @@ ls -l /bin/sh
如果显示为“/bin/sh -\> bash”则为正常,否则请按以下方式修改: 如果显示为“/bin/sh -\> bash”则为正常,否则请按以下方式修改:
**方法一**:在终端运行如下命令,然后选择 no。 **方法一**:在终端运行如下命令,然后选择no。
``` ```
sudo dpkg-reconfigure dash sudo dpkg-reconfigure dash
...@@ -111,7 +111,7 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev ...@@ -111,7 +111,7 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev
### 安装文件打包工具及Java虚拟机环境<a name="section16199102083717"></a> ### 安装文件打包工具及Java虚拟机环境<a name="section16199102083717"></a>
1. 打开Linux编译服务器终端 1. 打开Linux编译服务器终端
2. 运行如下命令,安装dosfstools,mtools,mtd-utils,Java运行时环境(JRE)和Java sdk 开发工具包。 2. 运行如下命令,安装dosfstools、mtools、mtd-utils、Java运行时环境(JRE)和Java sdk 开发工具包。
``` ```
sudo apt-get install dosfstools mtools mtd-utils default-jre default-jdk sudo apt-get install dosfstools mtools mtd-utils default-jre default-jdk
......
# 常见问题<a name="ZH-CN_TOPIC_0000001128311064"></a> # 常见问题<a name="ZH-CN_TOPIC_0000001128311064"></a>
- [烧写选择串口后提示失败](#section1498892119619) - [烧写选择串口后,提示“Error: Opening COMxx: Access denied”](#section1498892119619)
- [Windows电脑与单板网络连接失败](#section8512971816) - [Windows电脑与单板网络连接失败](#section8512971816)
- [烧写失败](#section1767804111198) - [烧写失败](#section1767804111198)
- [编译构建过程中,提示找不到“python”](#zh-cn_topic_0000001053466255_section1039835245619) - [编译构建过程中,提示找不到“python”](#zh-cn_topic_0000001053466255_section1039835245619)
- [串口无回显](#zh-cn_topic_0000001053466255_section14871149155911) - [串口无回显](#zh-cn_topic_0000001053466255_section14871149155911)
## 烧写选择串口后提示失败<a name="section1498892119619"></a> ## 烧写选择串口后,提示“Error: Opening COMxx: Access denied”<a name="section1498892119619"></a>
- **现象描述** - **现象描述**
点击烧写并选择串口后,出现Error: Opening COMxx: Access denied 点击烧写并选择串口后,出现“Error: Opening COMxx: Access denied”
**图 1** 打开串口失败图<a name="zh-cn_topic_0000001053466255_fig066333283916"></a> ![](figures/Failed-to-open-the-serial-port.png)
![](figure/打开串口失败图-15.png "打开串口失败图-15")
- **可能原因** - **可能原因**
串口已经被占用。 串口已经被占用。
- **解决办法** - 解决方法
1. 按图依次选择下拉框,查找带有serial-xx的终端
**图 2** 查找是否存在占用串口的终端<a name="zh-cn_topic_0000001053466255_fig165994164420"></a>
![](figure/查找是否存在占用串口的终端-16.png "查找是否存在占用串口的终端-16")
2. 点击标号中的垃圾桶图标,关闭串口。 检查主机中可能占用该端口的工具,关闭即可。若是当前工具占用,可按以下步骤排查并关闭:
**图 3** 关闭串口终端<a name="zh-cn_topic_0000001053466255_fig7911282453"></a> 1. 排查终端窗口列表,检查是否被monitor或其他终端占用。
![](figure/关闭串口终端-17.png "关闭串口终端-17")
3. 重新点击烧写,选择串口并开始烧写程序 ![](figures/terminal-list.png)
**图 4** 重新启动烧写任务<a name="fig87139519227"></a> 2. 找到占用,点击垃圾桶图标,关闭占用。
![](figure/重新启动烧写任务-18.png "重新启动烧写任务-18")
## Windows电脑与单板网络连接失败<a name="section8512971816"></a> ## Windows电脑与单板网络连接失败<a name="section8512971816"></a>
...@@ -43,8 +35,8 @@ ...@@ -43,8 +35,8 @@
点击烧写并选择串口后,无法获取文件。 点击烧写并选择串口后,无法获取文件。
**图 5** 网络不通,单板无法获取文件图<a name="zh-cn_topic_0000001053466255_fig5218920223"></a> **图 1** 网络不通,Hi3518单板无法获取文件<a name="zh-cn_topic_0000001053466255_fig5218920223"></a>
![](figure/网络不通-单板无法获取文件图-19.png "网络不通-单板无法获取文件图-19") ![](figures/网络不通-Hi3518单板无法获取文件.png "网络不通-Hi3518单板无法获取文件")
- **可能原因** - **可能原因**
...@@ -57,23 +49,19 @@ ...@@ -57,23 +49,19 @@
1. 检查网线是否连接。 1. 检查网线是否连接。
2. 点击Windows防火墙。 2. 点击Windows防火墙。
**图 6** 网络防火墙设置图<a name="fig954464811215"></a> ![](figures/hi3518-network-and-firewall-setting.png)
![](figure/网络防火墙设置图-20.png "网络防火墙设置图-20")
3. 点击“允许应用通过防火墙”。 3. 点击“允许应用通过防火墙”。
**图 7** 防火墙和网络保护界面图<a name="fig158731526101312"></a> ![](figures/hi3518-firewall-and-network-protection.png)
![](figure/防火墙和网络保护界面图-21.png "防火墙和网络保护界面图-21")
4. 查找Visual Studio Code应用。 4. 查找Visual Studio Code应用。
**图 8** 查找Visual Studio Code应用图<a name="fig96572537139"></a> ![](figures/hi3518-selecting-the-visual-studio-code-application.png)
![](figure/查找Visual-Studio-Code应用图-22.png "查找Visual-Studio-Code应用图-22")
5. 勾选Visual Studio Code的专用和公用网络的访问权限。 5. 勾选Visual Studio Code的专用和公用网络的访问权限。
**图 9** 允许Visual Studio Code应用访问网络<a name="fig18201217161411"></a> ![](figures/hi3518-allowing-the-visual-studio-code-application-to-access-the-network.png)
![](figure/允许Visual-Studio-Code应用访问网络-23.png "允许Visual-Studio-Code应用访问网络-23")
## 烧写失败<a name="section1767804111198"></a> ## 烧写失败<a name="section1767804111198"></a>
...@@ -95,7 +83,7 @@ ...@@ -95,7 +83,7 @@
- **现象描述** - **现象描述**
![](figure/error.png) ![](figures/hi3518-error-for-not-finding-python.png)
- **可能原因1** - **可能原因1**
...@@ -104,11 +92,11 @@ ...@@ -104,11 +92,11 @@
- **解决办法** - **解决办法**
请按照[安装Python环境](quickstart-lite-env-setup-linux.md#section1238412211211)。 请按照[安装Python环境](../quick-start/quickstart-lite-env-setup-linux.md)。
- **可能原因2** - **可能原因2**
![](figure/error2.png) ![](figures/hi3518-reason-no-python-soft-link.png)
- **解决办法** - **解决办法**
...@@ -123,7 +111,7 @@ ...@@ -123,7 +111,7 @@
例: 例:
![](figure/solution-24.png) ![](figures/hi3518-solution-set-python-soft-link.png)
## 串口无回显<a name="zh-cn_topic_0000001053466255_section14871149155911"></a> ## 串口无回显<a name="zh-cn_topic_0000001053466255_section14871149155911"></a>
...@@ -167,6 +155,6 @@ ...@@ -167,6 +155,6 @@
3. 烧写完成后,登录串口如下图所示。 3. 烧写完成后,登录串口如下图所示。
![](figure/login-serial-port.png) ![](figures/login-serial-port.png)
...@@ -139,8 +139,8 @@ hb build -f(执行编译) ...@@ -139,8 +139,8 @@ hb build -f(执行编译)
结果文件生成在out/hispark\_aries/ipcamera\_hispark\_aries目录下。 结果文件生成在out/hispark\_aries/ipcamera\_hispark\_aries目录下。
**图 1** 设置图例<a name="fig1766174411418"></a> **图 1** Hi3518编译设置图例<a name="fig12982192583111"></a>
![](figure/设置图例-8.png "设置图例-8") ![](figures/Hi3518编译设置图例.png "Hi3518编译设置图例")
>![](../public_sys-resources/icon-notice.gif) **须知:** >![](../public_sys-resources/icon-notice.gif) **须知:**
>Hi3518EV300单板的U-boot文件获取路径:device/hisilicon/hispark\_aries/sdk\_liteos/uboot/out/boot/u-boot-hi3518ev300.bin >Hi3518EV300单板的U-boot文件获取路径:device/hisilicon/hispark\_aries/sdk\_liteos/uboot/out/boot/u-boot-hi3518ev300.bin
...@@ -164,67 +164,70 @@ Hi3518EV300开发板的代码烧录支持USB烧录和串口烧录两种方式, ...@@ -164,67 +164,70 @@ Hi3518EV300开发板的代码烧录支持USB烧录和串口烧录两种方式,
>![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
>如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。 >如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。
![](figure/record-the-serial-port-number-9.png) ![](figures/hi3518-record-the-serial-port-number.png)
3. 打开DevEco Device Tool,在Projects中,点击**Settings**打开工程配置界面。 3. 打开DevEco Device Tool,在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。
![](figure/setting-10.png) ![](figures/hi3518-deveco-device-tool-setting.png)
4. 在“Partition Configuration”页签,设置待烧录文件信息,默认情况下,DevEco Device Tool已针对Hi3518EV300开发板进行适配,无需单独修改。 4. 在“Partition Configuration”页签,设置待烧录文件信息,默认情况下,DevEco Device Tool已针对Hi3518EV300开发板进行适配,无需单独修改。
>![](../public_sys-resources/icon-note.gif) **说明:**
>如果待烧录文件是直接通过拷贝的方式获取,需要手动修改待烧录文件的路径。打开待烧录文件的页签,在Partition Settings的New Opiton的下拉列表中,选择Partition\_bin,然后在Partition Opiton的Partition\_bin设置待烧录文件的路径。
5. 在“hi3518ev300”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。 5. 在“hi3518ev300”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。
- upload\_port:选择步骤[2](#zh-cn_topic_0000001057313128_li46411811196)中查询的串口号。 - upload\_port:选择步骤[2](#zh-cn_topic_0000001057313128_li46411811196)中查询的串口号。
- upload\_protocol:选择烧录协议,固定选择“hiburn-usb”。 - upload\_protocol:选择烧录协议,固定选择“hiburn-usb”。
- upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、kernel、rootfs和userfs。 - upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、kernel、rootfs和userfs。
![](figure/upload-options.png) ![](figures/upload-options.png)
6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
7. 打开工程文件,点击![](figure/deveco-device-toollogo.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hi3518ev300\_fastboot下的**Erase**按钮,擦除U-Boot。 7. 打开工程文件,点击![](figures/hi3518-deveco-device-tool-logo.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hi3518ev300\_fastboot下的**Erase**按钮,擦除U-Boot。
![](figure/erase-u-Boot.png) ![](figures/erase-u-Boot.png)
8. 执行**Erase**擦除操作后,显示如下提示信息时,请重启开发板(下电再上电)。 8. 执行**Erase**擦除操作后,显示如下提示信息时,请重启开发板(下电再上电)。
![](figure/restart-the-development-board-11.png) ![](figures/hi3518-restart-the-development-board.png)
9. 重新上电后,显示如下信息时,表示擦除U-Boot成功。 9. 重新上电后,显示如下信息时,表示擦除U-Boot成功。
![](figure/u-boot-erased-successfully.png) ![](figures/u-boot-erased-successfully.png)
10. 擦除完成后,点击hi3518ev300下的**Upload**按钮,启动烧录。 10. 擦除完成后,点击hi3518ev300下的**Upload**按钮,启动烧录。
![](figure/upload-12.png) ![](figures/hi3518-upload.png)
11. 启动烧录后,界面提示如下信息时,表示烧录成功。 11. 启动烧录后,界面提示如下信息时,表示烧录成功。
![](figure/burning-succeeded-13.png) ![](figures/hi3518-burning-succeeded.png)
12. 烧录成功后,请根据镜像运行章节进行操作,启动系统。
## 镜像运行<a name="section17612105814480"></a> ## 镜像运行<a name="section17612105814480"></a>
在完成Hi3518EV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。 在完成Hi3518EV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。
1. 在Hi3518EV300任务中,点击**Configure bootloader(Boot OS)**进行配置即可。 1. 在Hi3518EV300任务中,点击**Configure bootloader(Boot OS)**进行配置即可。
> ![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
> DevEco Device Tool针对Hi3518EV300开发板的BootLoader设置进行了适配,无需开发者手动修改。 >DevEco Device Tool针对Hi3518EV300开发板的BootLoader设置进行了适配,无需开发者手动修改。
![](figure/3518_bootloader.png)
2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功。
![](figure/3518_reset_success.png) ![](figures/hi3518-bootloader.png)
3. 在任务栏点击**Monitor**按钮,启动串口工具 2. 提示如下图中的重启开发板的提示信息时,重启开发板,然后在控制台输出“SUCCESS”表示设置成功
![](figure/3518_monitor.png) ![](figures/hi3518-reset-success.png)
4. 然后根据界面提示进行操作,直到在界面打印OHOS \#信息,表示系统启动成功 3. 在任务栏点击**Monitor**按钮,启动串口工具
![](figure/3518_reboot_success.png) ![](figures/hi3518-monitor.png)
4. 然后根据界面提示进行操作,直到在界面打印OHOS \#信息,表示系统启动成功。
![](figures/hi3518-reboot-success.png)
## 下一步学习<a name="section9712145420182"></a> ## 下一步学习<a name="section9712145420182"></a>
......
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
各硬件连接关系如下图所示。 各硬件连接关系如下图所示。
**图 1** 硬件连线图<a name="fig19272182991417"></a> **图 1** Hi3518开发硬件连线图<a name="fig145521530134016"></a>
![](figure/硬件连线图-7.png "硬件连线图-7") ![](figures/Hi3518开发硬件连线图.png "Hi3518开发硬件连线图")
### 软件要求<a name="section17315193935817"></a> ### 软件要求<a name="section17315193935817"></a>
......
...@@ -15,27 +15,27 @@ ...@@ -15,27 +15,27 @@
1. 打开DevEco Device Tool工具,点击“View \> Terminal”,进入终端界面。 1. 打开DevEco Device Tool工具,点击“View \> Terminal”,进入终端界面。
**图 1** IDE终端工具打开方法<a name="fig755583241511"></a> **图 1** IDE终端工具打开方法<a name="fig755583241511"></a>
![](figure/IDE终端工具打开方法.png "IDE终端工具打开方法") ![](figures/IDE终端工具打开方法.png "IDE终端工具打开方法")
在终端界面使用ssh命令连接linux服务器,如“ssh user@ipaddr”。 在终端界面使用ssh命令连接linux服务器,如“ssh user@ipaddr”。
**图 2** 终端界面示意图<a name="fig14407256101510"></a> **图 2** 终端界面示意图<a name="fig14407256101510"></a>
![](figure/终端界面示意图.png "终端界面示意图") ![](figures/终端界面示意图.png "终端界面示意图")
2. 进入代码根路径,并在终端窗口,执行脚本命令“hb set”、“.”,选择需要编译的版本“wifiiot\_hispark\_pegasus”。 2. 进入代码根路径,并在终端窗口,执行脚本命令“hb set”、“.”,选择需要编译的版本“wifiiot\_hispark\_pegasus”。
**图 3** 在终端界面选择目标构建版本示意图<a name="fig191035701814"></a> **图 3** 在终端界面选择目标构建版本示意图<a name="fig191035701814"></a>
![](figure/在终端界面选择目标构建版本示意图.png "在终端界面选择目标构建版本示意图") ![](figures/在终端界面选择目标构建版本示意图.png "在终端界面选择目标构建版本示意图")
3. 执行“hb build”启动版本构建。 3. 执行“hb build”启动版本构建。
**图 4** 在终端界面执行编译命令示意图<a name="fig10635942111916"></a> **图 4** 在终端界面执行编译命令示意图<a name="fig10635942111916"></a>
![](figure/在终端界面执行编译命令示意图.png "在终端界面执行编译命令示意图") ![](figures/在终端界面执行编译命令示意图.png "在终端界面执行编译命令示意图")
4. 编译结束后,如果出现“wifiiot\_hispark\_pegasus build success”字样,则证明构建成功,如下图所示。 4. 编译结束后,如果出现“wifiiot\_hispark\_pegasus build success”字样,则证明构建成功,如下图所示。
**图 5** 编译成功示意图<a name="fig195291328182015"></a> **图 5** 编译成功示意图<a name="fig195291328182015"></a>
![](figure/编译成功示意图.png "编译成功示意图") ![](figures/编译成功示意图.png "编译成功示意图")
5. 构建成功后,会在./out/wifiiot/路径中生成以下文件,使用如下命令可以查看,至此编译构建流程结束。 5. 构建成功后,会在./out/wifiiot/路径中生成以下文件,使用如下命令可以查看,至此编译构建流程结束。
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
``` ```
**图 6** 编译文件存放目录示意图<a name="fig112257131214"></a> **图 6** 编译文件存放目录示意图<a name="fig112257131214"></a>
![](figure/编译文件存放目录示意图.png "编译文件存放目录示意图") ![](figures/编译文件存放目录示意图.png "编译文件存放目录示意图")
## 镜像烧录<a name="section3288165814218"></a> ## 镜像烧录<a name="section3288165814218"></a>
...@@ -59,38 +59,42 @@ ...@@ -59,38 +59,42 @@
Hi3861V100在Windows和Linux环境下的烧录操作完全一致,区别仅在于DevEco Device Tool环境搭建不同。 Hi3861V100在Windows和Linux环境下的烧录操作完全一致,区别仅在于DevEco Device Tool环境搭建不同。
1. 请连接好电脑和待烧录开发板,需要连接USB口,具体可参考[Hi3861V100开发板介绍](https://device.harmonyos.com/cn/docs/start/introduce/oem_minitinier_des_3861-0000001105041324) 1. 请连接好电脑和待烧录开发板,需要连接USB口,具体可参考[Hi3861V100开发板介绍](https://device.harmonyos.com/cn/docs/start/introduce/oem_minitinier_des_3861-0000001105041324)
2. <a name="zh-cn_topic_0000001056563976_li848662117291"></a>打开电脑的设备管理器,查看并记录对应的串口号。 2. 打开电脑的设备管理器,查看并记录对应的串口号。
>![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
>如果对应的串口异常,请根据[Hi3861V100开发板串口驱动安装](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3861-drivers-0000001058153433)安装USB转串口的驱动程序。 >如果对应的串口异常,请根据[Hi3861V100开发板串口驱动安装](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3861-drivers-0000001058153433)安装USB转串口的驱动程序。
![](figure/record-the-serial-port-number.png) ![](figures/hi3861-record-the-serial-port-number.png)
3. 打开DevEco Device Tool,在Projects中,点击**Settings**打开工程配置界面。 3. 打开DevEco Device Tool,在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。
![](figure/setting.png) ![](figures/hi3861-deveco-device-tool-setting.png)
4. 在“Partition Configuration”页签,设置待烧录文件信息,默认情况下,DevEco Device Tool已针对Hi3861V100开发板进行适配,无需单独修改。 4. 在“Partition Configuration”页签,设置待烧录文件信息,默认情况下,DevEco Device Tool已针对Hi3861V100开发板进行适配,无需单独修改。
>![](../public_sys-resources/icon-note.gif) **说明:**
>如果待烧录文件是直接通过拷贝的方式获取,需要手动修改待烧录文件的路径。打开待烧录文件的页签,在Partition Settings的New Opiton的下拉列表中,选择Partition\_bin,然后在Partition Opiton的Partition\_bin设置待烧录文件的路径。
5. 在“hi3861”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。 5. 在“hi3861”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。
- upload\_port:选择步骤[2](#zh-cn_topic_0000001056563976_li848662117291)中查询的串口号。 - upload\_port:选择步骤2中查询的串口号。
- upload\_protocol:选择烧录协议,Windows系统可以选择“burn-serial”或“hiburn-serial”,Linux系统只能选择“hiburn-serial”。 - upload\_protocol:选择烧录协议,Windows系统可以选择“burn-serial”或“hiburn-serial”,Linux系统只能选择“hiburn-serial”。
- upload\_partitions:选择待烧录的文件,默认选择hi3861\_app。 - upload\_partitions:选择待烧录的文件,默认选择hi3861\_app。
![](figure/options.png) ![](figures/options.png)
6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 6. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
7. 打开工程文件,在DevEco Device Tool界面的“PROJECT TASKS”中,点击hi3861下的**Upload**按钮,启动烧录。 7. 打开工程文件,在DevEco Device Tool界面的“PROJECT TASKS”中,点击hi3861下的**Upload**按钮,启动烧录。
![](figure/upload.png) ![](figures/hi3861-upload.png)
8. 启动烧录后,显示如下提示信息时,请按开发板上的RST按钮重启开发板。 8. 启动烧录后,显示如下提示信息时,请按开发板上的RST按钮重启开发板。
![](figure/restart-the-development-board.png) ![](figures/hi3861-restart-the-development-board.png)
9. 重新上电后,启动烧录,界面提示如下信息时,表示烧录成功。 9. 重新上电后,界面提示如下信息时,表示烧录成功。
![](figure/burning-succeeded.png) ![](figures/hi3861-burning-succeeded.png)
## WLAN模组联网<a name="section194671619167"></a> ## WLAN模组联网<a name="section194671619167"></a>
...@@ -100,12 +104,12 @@ Hi3861V100在Windows和Linux环境下的烧录操作完全一致,区别仅在 ...@@ -100,12 +104,12 @@ Hi3861V100在Windows和Linux环境下的烧录操作完全一致,区别仅在
1. 保持Windows工作台和WLAN模组的连接状态,在DevEco工具最下方,点击“DevEco:Serial Monitor”按钮。 1. 保持Windows工作台和WLAN模组的连接状态,在DevEco工具最下方,点击“DevEco:Serial Monitor”按钮。
**图 7** 打开DevEco串口终端示意图<a name="fig464411253297"></a> **图 7** 打开DevEco串口终端示意图<a name="fig464411253297"></a>
![](figure/打开DevEco串口终端示意图.png "打开DevEco串口终端示意图") ![](figures/打开DevEco串口终端示意图.png "打开DevEco串口终端示意图")
2. 复位WLAN模组,终端界面显示“ready to OS start”,则启动成功。 2. 复位WLAN模组,终端界面显示“ready to OS start”,则启动成功。
**图 8** WLAN复位成功示意图<a name="fig3327108143016"></a> **图 8** WLAN复位成功示意图<a name="fig3327108143016"></a>
![](figure/WLAN复位成功示意图.png "WLAN复位成功示意图") ![](figures/WLAN复位成功示意图.png "WLAN复位成功示意图")
3. 在DevEco的串口终端中,依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。 3. 在DevEco的串口终端中,依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。
...@@ -126,6 +130,6 @@ Hi3861V100在Windows和Linux环境下的烧录操作完全一致,区别仅在 ...@@ -126,6 +130,6 @@ Hi3861V100在Windows和Linux环境下的烧录操作完全一致,区别仅在
``` ```
**图 9** WLAN模组联网成功示意图<a name="fig7672858203010"></a> **图 9** WLAN模组联网成功示意图<a name="fig7672858203010"></a>
![](figure/WLAN模组联网成功示意图.png "WLAN模组联网成功示意图") ![](figures/WLAN模组联网成功示意图.png "WLAN模组联网成功示意图")
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
- [编译构建过程中,提示“Could not find a version that satisfies the requirement six\>=1.9.0”](#section4498158162320) - [编译构建过程中,提示“Could not find a version that satisfies the requirement six\>=1.9.0”](#section4498158162320)
- [编译构建过程中,提示找不到“-lgcc”](#section11181036112615) - [编译构建过程中,提示找不到“-lgcc”](#section11181036112615)
- [编译构建过程中,提示找不到“python”](#section1571810194619) - [编译构建过程中,提示找不到“python”](#section1571810194619)
- [编译构建过程中,提示找不到“python3”](#section108385316482)
- [安装 kconfiglib时,遇到lsb\_release错误](#section691681635814) - [安装 kconfiglib时,遇到lsb\_release错误](#section691681635814)
## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”<a name="section1221016541119"></a> ## 安装python3过程中,提示“configure: error: no acceptable C compiler found in $PATH”<a name="section1221016541119"></a>
...@@ -60,7 +61,7 @@ ...@@ -60,7 +61,7 @@
安装python3过程中出现以下错误: 安装python3过程中出现以下错误:
``` ```
zipimport.ZipImportError: can't decompress data; zlib not avaliable zipimport.ZipImportError: can't decompress data; zlib not available
``` ```
- **可能原因** - **可能原因**
...@@ -73,7 +74,7 @@ ...@@ -73,7 +74,7 @@
方法2:如果软件源中没有该软件,请从“www.zlib.net”下载版本代码,并离线安装。 方法2:如果软件源中没有该软件,请从“www.zlib.net”下载版本代码,并离线安装。
![](figure/download-zlib.png) ![](figures/download-zlib.png)
完成下载后,通过以下命令安装: 完成下载后,通过以下命令安装:
...@@ -134,7 +135,7 @@ ...@@ -134,7 +135,7 @@
通过网页[https://pypi.org/project/pycrypto/\#files](https://pypi.org/project/pycrypto/#files),下载源码。 通过网页[https://pypi.org/project/pycrypto/\#files](https://pypi.org/project/pycrypto/#files),下载源码。
![](figure/Download-the-source-code.png) ![](figures/Download-the-source-code.png)
将源码放置在Linux服务器中,解压,并安装“python3 setup.py install”。 将源码放置在Linux服务器中,解压,并安装“python3 setup.py install”。
...@@ -165,7 +166,7 @@ ...@@ -165,7 +166,7 @@
通过网页[https://pypi.org/project/ecdsa/\#files](https://pypi.org/project/ecdsa/#files),下载安装包。 通过网页[https://pypi.org/project/ecdsa/\#files](https://pypi.org/project/ecdsa/#files),下载安装包。
![](figure/download-ecdsa.png) ![](figures/download-ecdsa.png)
将安装包放置Linux服务器中,并安装“pip3 install ecdsa-0.15-py2.py3-none-any.whl”。 将安装包放置Linux服务器中,并安装“pip3 install ecdsa-0.15-py2.py3-none-any.whl”。
...@@ -196,7 +197,7 @@ ...@@ -196,7 +197,7 @@
通过网页[https://pypi.org/project/six/\#files](https://pypi.org/project/six/#files),下载安装包。 通过网页[https://pypi.org/project/six/\#files](https://pypi.org/project/six/#files),下载安装包。
![](figure/download-six.png) ![](figures/download-six.png)
将源码放置在Linux服务器中,并安装“pip3 install six-1.14.0-py2.py3-none-any.whl”。 将源码放置在Linux服务器中,并安装“pip3 install six-1.14.0-py2.py3-none-any.whl”。
...@@ -249,11 +250,11 @@ ...@@ -249,11 +250,11 @@
- **解决办法** - **解决办法**
请按照[安装Python环境](quickstart-lite-env-setup-linux.md#section1238412211211) 请按照[安装Python环境](../quick-start/quickstart-lite-env-setup-linux.md)
- **可能原因2** - **可能原因2**
![](figure/reason-2.png) ![](figures/reason-no-python-soft-link.png)
- **解决办法** - **解决办法**
...@@ -268,7 +269,23 @@ ...@@ -268,7 +269,23 @@
例: 例:
![](figure/solution.png) ![](figures/solution-add-soft-link.png)
## 编译构建过程中,提示找不到“python3”<a name="section108385316482"></a>
- **现象描述**
![](figures/11.png)
- **可能原因**
没有装python3。
- **解决办法**
请按照[安装python](../quick-start/quickstart-lite-env-setup-linux.md)。
## 安装 kconfiglib时,遇到lsb\_release错误<a name="section691681635814"></a> ## 安装 kconfiglib时,遇到lsb\_release错误<a name="section691681635814"></a>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
- [运行结果](#section18115713118) - [运行结果](#section18115713118)
- [下一步学习](#section9712145420182) - [下一步学习](#section9712145420182)
本示例将演示如何编写简单业务,输出“Hello World”,初步了解OpenHarmony 如何运行在开发板上。 本示例将演示如何编写简单业务,输出“Hello World”,初步了解OpenHarmony如何运行在开发板上。
## 修改源码<a name="section79601457101015"></a> ## 修改源码<a name="section79601457101015"></a>
...@@ -138,7 +138,7 @@ Call Stack 6 -- 3f5e24 addr:f78fc ...@@ -138,7 +138,7 @@ Call Stack 6 -- 3f5e24 addr:f78fc
3. 根据以上调用栈信息,可以定位WadRecvCB函数中出现了异常。 3. 根据以上调用栈信息,可以定位WadRecvCB函数中出现了异常。
![](figure/WadRecvCB-function.png) ![](figures/WadRecvCB-function.png)
4. 完成代码排查及修改。 4. 完成代码排查及修改。
......
...@@ -23,8 +23,8 @@ ...@@ -23,8 +23,8 @@
各硬件连接关系如下图所示。 各硬件连接关系如下图所示。
**图 1** 硬件连线图<a name="fig1922334410211"></a> **图 1** Hi3861开发硬件连线图<a name="fig285519359396"></a>
![](figure/硬件连线图.png "硬件连线图") ![](figures/Hi3861开发硬件连线图.png "Hi3861开发硬件连线图")
### 软件要求<a name="section727451210318"></a> ### 软件要求<a name="section727451210318"></a>
...@@ -124,7 +124,7 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev ...@@ -124,7 +124,7 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev
``` ```
**图 2** SCons安装成功界面,版本要求3.0.4以上<a name="fig151441613316"></a> **图 2** SCons安装成功界面,版本要求3.0.4以上<a name="fig151441613316"></a>
![](figure/SCons安装成功界面-版本要求3-0-4以上.png "SCons安装成功界面-版本要求3-0-4以上") ![](figures/SCons安装成功界面-版本要求3-0-4以上.png "SCons安装成功界面-版本要求3-0-4以上")
### 安装python模块<a name="section88701892341"></a> ### 安装python模块<a name="section88701892341"></a>
...@@ -220,13 +220,13 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev ...@@ -220,13 +220,13 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev
>![](../public_sys-resources/icon-notice.gif) **须知:** >![](../public_sys-resources/icon-notice.gif) **须知:**
>- Hi3861平台仅支持使用libgcc运行时库的静态链接,不建议开发者使用libgcc运行时库的动态链接,以免产品需遵从GPLV3许可证。 >- Hi3861平台仅支持使用libgcc运行时库的静态链接,不建议开发者使用libgcc运行时库的动态链接,以免产品需遵从GPLV3许可证。
>- 通过下述步骤2-15,我们编译好了gcc\_riscv32 镜像,提供给开发者[直接下载](https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz)使用。直接下载 gcc\_riscv32 镜像的开发者可省略下述2-15步。 >- 通过下述步骤2-15,我们编译好了gcc\_riscv32镜像,提供给开发者[直接下载](https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz)使用。直接下载gcc\_riscv32镜像的开发者可省略下述2-15步。
1. 打开Linux编译服务器终端。 1. 打开Linux编译服务器终端。
2. 环境准备,请安装"gcc, g++, bison, flex, makeinfo"软件,确保工具链能正确编译。 2. 环境准备,请安装"gcc, g++, bison, flex, makeinfo"软件,确保工具链能正确编译。
``` ```
sudo apt-get install gcc && sudo apt-get install g++ && sudo apt-get install flex bison && sudo apt-get install texinfo sudo apt-get install gcc g++ flex bison texinfo
``` ```
3. 下载riscv-gnu-toolchain交叉编译工具链。 3. 下载riscv-gnu-toolchain交叉编译工具链。
...@@ -353,6 +353,6 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev ...@@ -353,6 +353,6 @@ sudo apt-get install build-essential gcc g++ make zlib* libffi-dev
2. 点击安装包,安装驱动程序。 2. 点击安装包,安装驱动程序。
3. 驱动安装完成后,重新插拔USB接口,串口信息显示如下图所示。 3. 驱动安装完成后,重新插拔USB接口,串口信息显示如下图所示。
![](figure/serial-port-entry.png) ![](figures/serial-port-entry.png)
# 镜像烧录<a name="ZH-CN_TOPIC_0000001153557088"></a> # 镜像烧录<a name="ZH-CN_TOPIC_0000001153557088"></a>
- [前提条件](#section232415263110) - [前提条件](#section18547185418328)
- [使用网口烧录](#section998903784810) - [使用网口烧录](#section1965361953312)
标准系统烧录,在V2.2 Beta1及以上版本支持。 标准系统烧录,在V2.2 Beta1及以上版本支持。
...@@ -16,13 +15,13 @@ Hi3516DV300支持烧录标准系统,其烧录方式包括USB烧录、网口烧 ...@@ -16,13 +15,13 @@ Hi3516DV300支持烧录标准系统,其烧录方式包括USB烧录、网口烧
>![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
>当前Hi3516DV300开发板支持通过网口、USB、串口三种方式烧录OpenHarmony标准系统。本文以网口方式为例讲解烧录操作,其他两种烧录方式请参照[Hi3516DV300烧录指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_upload-0000001052148681)。 >当前Hi3516DV300开发板支持通过网口、USB、串口三种方式烧录OpenHarmony标准系统。本文以网口方式为例讲解烧录操作,其他两种烧录方式请参照[Hi3516DV300烧录指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_upload-0000001052148681)。
## 前提条件<a name="section232415263110"></a> ## 前提条件<a name="section18547185418328"></a>
在DevEco Device Tool中,选择**Import Project**打开待烧录文件所在文件夹,其中MCU选择**HiSilicon\_Arm\_Linux**下的Hi3516DV300,Framework选择“Hb”。 在DevEco Device Tool中,选择**Import Project**打开待烧录文件所在文件夹,其中MCU选择**HiSilicon\_Arm\_Linux**下的Hi3516DV300,Framework选择“Ohos-sources”或“Hpm”。
![](figure/hisilicon-arm-linux.png) ![](figures/hisilicon-arm-linux.png)
### 使用网口烧录<a name="section998903784810"></a> ## 使用网口烧录<a name="section1965361953312"></a>
Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。 Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。
...@@ -32,11 +31,11 @@ Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。 ...@@ -32,11 +31,11 @@ Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。
>![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
>如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。 >如果对应的串口异常,请根据[Hi3516DV300/Hi3518EV300开发板串口驱动安装指导](https://device.harmonyos.com/cn/docs/ide/user-guides/hi3516_hi3518-drivers-0000001050743695)安装USB转串口的驱动程序。
![](figure/record-the-serial-port-number-1.png) ![](figures/hi3516-record-the-serial-port-number.png)
3. 打开DevEco Device Tool,在Projects中,点击**Settings**打开工程配置界面。 3. 打开DevEco Device Tool,在QUICK ACCESS \> DevEco Home \> Projects中,点击**Settings**打开工程配置界面。
![](figure/settings.png) ![](figures/hi3516-deveco-device-tool-setting.png)
4. 在“hi3516dv300”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。 4. 在“hi3516dv300”页签,设置烧录选项,包括upload\_port、upload\_partitions和upload\_protocol。
...@@ -44,25 +43,30 @@ Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。 ...@@ -44,25 +43,30 @@ Hi3516DV300开发板使用网口烧录方式,支持Windows和Linux系统。
- upload\_protocol:选择烧录协议,固定选择“hiburn-net”。 - upload\_protocol:选择烧录协议,固定选择“hiburn-net”。
- upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、boot、updater、misc、system、vendor和userdata。 - upload\_partitions:选择待烧录的文件,默认情况下会同时烧录fastboot、boot、updater、misc、system、vendor和userdata。
![](figure/upload-options-26.png) ![](figures/upload-options-1.png)
5. 检查和设置连接开发板后的网络适配器的IP地址信息,设置方法请参考[设置Hi3516DV300网口烧录的IP地址信息](https://device.harmonyos.com/cn/docs/ide/user-guides/set_ipaddress-0000001141825075) 5. 检查和设置连接开发板后的网络适配器的IP地址信息,设置方法请参考[设置Hi3516DV300网口烧录的IP地址信息](https://device.harmonyos.com/cn/docs/ide/user-guides/set_ipaddress-0000001141825075)
6. 设置网口烧录的IP地址信息,设置如下选项: 6. 设置网口烧录的IP地址信息,设置如下选项:
- upload\_net\_server\_ip:选择步骤6中设置的IP地址信息。例如192.168.1.2 - upload\_net\_server\_ip:选择步骤5中设置的IP地址信息。例如192.168.1.2
- upload\_net\_client\_mask:设置开发板的子网掩码,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如255.255.255.0 - upload\_net\_client\_mask:设置开发板的子网掩码,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如255.255.255.0
- upload\_net\_client\_gw:设置开发板的网关,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.1 - upload\_net\_client\_gw:设置开发板的网关,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.1
- upload\_net\_client\_ip:设置开发板的IP地址,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.3 - upload\_net\_client\_ip:设置开发板的IP地址,工具会自动根据选择的upload\_net\_server\_ip进行设置。例如192.168.1.3
![](figure/ip-address-information.png) ![](figures/ip-address-information-2.png)
7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。 7. 所有的配置都修改完成后,在工程配置页签的顶部,点击**Save**进行保存。
8. 启动烧录后,显示如下提示信息时,请重启开发板(下电再上电)。 8. 打开工程文件,点击![](figures/2021-01-27_170334.png)图标,打开DevEco Device Tool界面,在“PROJECT TASKS”中,点击hi3516dv300下的**Upload**按钮,启动烧录。
![](figures/zh-cn_image_0000001215342695.png)
9. 启动烧录后,显示如下提示信息时,请重启开发板(下电再上电)。
![](figure/restart-the-development-board-2.png) ![](figures/hi3516-restart-the-development-board.png)
9. 重新上电后,启动烧录,界面提示如下信息时,表示烧录成功。 10. 重新上电后,界面提示如下信息时,表示烧录成功。
![](figure/burning-succeeded-3.png) ![](figures/hi3516-burning-succeeded-net.png)
11. 烧录完成后,请根据[标准系统镜像运行](https://device.harmonyos.com/cn/docs/start/introduce/quickstart-standard-running-0000001142160948)进行下一步操作,完成系统启动。
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
- [前提条件](#section102871547153314) - [前提条件](#section102871547153314)
- [操作步骤](#section429012478331) - [操作步骤](#section429012478331)
- [执行prebuilts](#section0495320152619)
- [获取Docker环境](#section181431248132513) - [获取Docker环境](#section181431248132513)
- [编译](#section92391739152318) - [编译](#section92391739152318)
...@@ -19,7 +20,7 @@ OpenHarmony标准系统为开发者提供的Docker环境已经将对应的编译 ...@@ -19,7 +20,7 @@ OpenHarmony标准系统为开发者提供的Docker环境已经将对应的编译
1. 注册码云gitee账号。 1. 注册码云gitee账号。
2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191) 2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)
3. 安装[git客户端](http://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。 3. 安装[git客户端](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。
``` ```
git config --global user.name "yourname" git config --global user.name "yourname"
...@@ -38,13 +39,14 @@ OpenHarmony标准系统为开发者提供的Docker环境已经将对应的编译 ...@@ -38,13 +39,14 @@ OpenHarmony标准系统为开发者提供的Docker环境已经将对应的编译
### 操作步骤<a name="section429012478331"></a> ### 操作步骤<a name="section429012478331"></a>
可通过下方两种方式获取OpenHarmony主干代码,两种方式二选一即可。建议新建个文件夹,在此文件夹下执行以下命令,下载源码,此文件夹即为源码根目录。
方式一(推荐):通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 方式一(推荐):通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
``` ```
repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify
repo sync -c repo sync -c
repo forall -c 'git lfs pull' repo forall -c 'git lfs pull'
bash build/prebuilts_download.sh
``` ```
方式二:通过repo + https 下载。 方式二:通过repo + https 下载。
...@@ -53,9 +55,18 @@ bash build/prebuilts_download.sh ...@@ -53,9 +55,18 @@ bash build/prebuilts_download.sh
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c repo sync -c
repo forall -c 'git lfs pull' repo forall -c 'git lfs pull'
```
## 执行prebuilts<a name="section0495320152619"></a>
在源码根目录下执行脚本,安装编译器及二进制工具。
```
bash build/prebuilts_download.sh bash build/prebuilts_download.sh
``` ```
下载的prebuilts二进制默认存放在与OpenHarmony同目录下的OpenHarmony\_2.0\_canary\_prebuilts下。
## 获取Docker环境<a name="section181431248132513"></a> ## 获取Docker环境<a name="section181431248132513"></a>
**方式一:从HuaweiCloud SWR上直接获取Docker镜像进行构建:** **方式一:从HuaweiCloud SWR上直接获取Docker镜像进行构建:**
...@@ -66,14 +77,14 @@ bash build/prebuilts_download.sh ...@@ -66,14 +77,14 @@ bash build/prebuilts_download.sh
docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.5 docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.5
``` ```
2. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。 2. 进入码根目录执行如下命令,从而进入Docker构建环境。
``` ```
docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.5 docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker-standard:0.0.5
``` ```
**方式二:通过Dockerfile 构建本地Docker镜像进行构建** **方式二:通过Dockerfile 构建本地Docker镜像进行构建**
1. 获取Dockerfile脚本文件,用来构建本地Docker镜像。 1. 获取Dockerfile脚本文件,用来构建本地Docker镜像。
...@@ -88,7 +99,7 @@ bash build/prebuilts_download.sh ...@@ -88,7 +99,7 @@ bash build/prebuilts_download.sh
./build.sh ./build.sh
``` ```
3. 进入OpenHarmony代码根目录执行如下命令,从而进入Docker构建环境。 3. 进入码根目录执行如下命令,从而进入Docker构建环境。
``` ```
docker run -it -v $(pwd):/home/openharmony openharmony-docker-standard:0.0.5 docker run -it -v $(pwd):/home/openharmony openharmony-docker-standard:0.0.5
...@@ -97,17 +108,17 @@ bash build/prebuilts_download.sh ...@@ -97,17 +108,17 @@ bash build/prebuilts_download.sh
## 编译<a name="section92391739152318"></a> ## 编译<a name="section92391739152318"></a>
1. 通过如下编译脚本启动标准系统类设备(参考内存≥128MB)的编译。 1. 通过如下编译脚本启动标准系统类设备(参考内存≥128MB)的编译。
``` ```
./build.sh --product-name {product_name} ./build.sh --product-name {product_name}
``` ```
\{product\_name\}为当前版本支持的平台,比如:Hi3516DV300 \{product\_name\}为当前版本支持的平台。比如:Hi3516DV300等。
编译所生成的文件都归档在out/ohos-arm-release/目录下,结果镜像输出在 out/ohos-arm-release/packages/phone/images/ 目录下。 编译所生成的文件都归档在out/ohos-arm-release/目录下,结果镜像输出在 out/ohos-arm-release/packages/phone/images/ 目录下。
2. 编译源码完成,请进行镜像烧录,具体请参见[镜像烧录](quickstart-standard-burn.md) 2. 编译源码完成,请进行镜像烧录,具体请参见[镜像烧录](quickstart-standard-burn.md)
>![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
>退出Docker执行exit命令即可。 >退出Docker执行exit命令即可。
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt\_pkg" Linux编译服务器终端输入不识别的命令时,提示"ImportError: No module named apt\_pkg"
- **可能原因** - **可能原因**
python3 apt安装兼容性问题。 python3 apt安装兼容性问题。
......
...@@ -13,14 +13,14 @@ ...@@ -13,14 +13,14 @@
标准系统快速入门流程如下图所示,其中“搭建Ubuntu环境及编译”环节可根据实际情况选择docker方式或工具包方式其中一种即可。 标准系统快速入门流程如下图所示,其中“搭建Ubuntu环境及编译”环节可根据实际情况选择docker方式或工具包方式其中一种即可。
**图 1** 标准环境快速入门流程<a name="fig19162195553211"></a> **图 1** 标准环境快速入门流程<a name="fig19162195553211"></a>
![](figure/标准环境快速入门流程.png "标准环境快速入门流程") ![](figures/标准环境快速入门流程.png "标准环境快速入门流程")
## 开发板简介<a name="zh-cn_topic_0000001053666242_section047719215429"></a> ## 开发板简介<a name="zh-cn_topic_0000001053666242_section047719215429"></a>
Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP\(Image Signal Processor\)、H.265视频压缩编码器,同时集成高性能NNIE引擎,使得Hi3516DV300在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。 Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代ISP\(Image Signal Processor\)、H.265视频压缩编码器,同时集成高性能NNIE引擎,使得Hi3516DV300在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。
**图 2** Hi3516单板正面外观图<a name="fig202901538183412"></a> **图 2** Hi3516单板正面外观图<a name="fig202901538183412"></a>
![](figure/Hi3516单板正面外观图-25.png "Hi3516单板正面外观图-25") ![](figures/Hi3516单板正面外观图-0.png "Hi3516单板正面外观图-0")
## 开发板规格<a name="zh-cn_topic_0000001053666242_section15192203316533"></a> ## 开发板规格<a name="zh-cn_topic_0000001053666242_section15192203316533"></a>
...@@ -40,10 +40,10 @@ Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代I ...@@ -40,10 +40,10 @@ Hi3516DV300作为新一代行业专用Smart HD IP摄像机SOC,集成新一代I
</tr> </tr>
<tr id="zh-cn_topic_0000001053666242_row21721687435"><td class="cellrowborder" valign="top" width="14.77%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0000001053666242_p817216810435"><a name="zh-cn_topic_0000001053666242_p817216810435"></a><a name="zh-cn_topic_0000001053666242_p817216810435"></a><strong id="zh-cn_topic_0000001053666242_b1172016266246"><a name="zh-cn_topic_0000001053666242_b1172016266246"></a><a name="zh-cn_topic_0000001053666242_b1172016266246"></a>外部器件</strong></p> <tr id="zh-cn_topic_0000001053666242_row21721687435"><td class="cellrowborder" valign="top" width="14.77%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0000001053666242_p817216810435"><a name="zh-cn_topic_0000001053666242_p817216810435"></a><a name="zh-cn_topic_0000001053666242_p817216810435"></a><strong id="zh-cn_topic_0000001053666242_b1172016266246"><a name="zh-cn_topic_0000001053666242_b1172016266246"></a><a name="zh-cn_topic_0000001053666242_b1172016266246"></a>外部器件</strong></p>
</td> </td>
<td class="cellrowborder" valign="top" width="85.22999999999999%" headers="mcps1.2.3.1.2 "><a name="zh-cn_topic_0000001053666242_ul179543016208"></a><a name="zh-cn_topic_0000001053666242_ul179543016208"></a><ul id="zh-cn_topic_0000001053666242_ul179543016208"><li>以太网口</li><li>音频视频<a name="zh-cn_topic_0000001053666242_ul5941311869"></a><a name="zh-cn_topic_0000001053666242_ul5941311869"></a><ul id="zh-cn_topic_0000001053666242_ul5941311869"><li>1路语音输入</li><li>1路单声道(AC_L)输出,接3W功(LM4871)</li><li>MicroHDMI(1路HDMI 1.4)</li></ul> <td class="cellrowborder" valign="top" width="85.22999999999999%" headers="mcps1.2.3.1.2 "><a name="zh-cn_topic_0000001053666242_ul179543016208"></a><a name="zh-cn_topic_0000001053666242_ul179543016208"></a><ul id="zh-cn_topic_0000001053666242_ul179543016208"><li>以太网口</li><li>音频视频<a name="zh-cn_topic_0000001053666242_ul5941311869"></a><a name="zh-cn_topic_0000001053666242_ul5941311869"></a><ul id="zh-cn_topic_0000001053666242_ul5941311869"><li>1路语音输入</li><li>1路单声道(AC_L)输出,接3W功率放大器(LM4871)</li><li>MicroHDMI(1路HDMI 1.4)</li></ul>
</li><li>摄像头<a name="zh-cn_topic_0000001053666242_ul924263620"></a><a name="zh-cn_topic_0000001053666242_ul924263620"></a><ul id="zh-cn_topic_0000001053666242_ul924263620"><li>传感器IMX335</li><li>镜头M12,焦距4mm,光圈1.8</li></ul> </li><li>摄像头<a name="zh-cn_topic_0000001053666242_ul924263620"></a><a name="zh-cn_topic_0000001053666242_ul924263620"></a><ul id="zh-cn_topic_0000001053666242_ul924263620"><li>传感器IMX335</li><li>镜头M12,焦距4mm,光圈1.8</li></ul>
</li><li>显示屏<a name="zh-cn_topic_0000001053666242_ul101471711667"></a><a name="zh-cn_topic_0000001053666242_ul101471711667"></a><ul id="zh-cn_topic_0000001053666242_ul101471711667"><li>LCD连接器(2.35寸)</li><li>LCD连接器(5.5寸)</li></ul> </li><li>显示屏<a name="zh-cn_topic_0000001053666242_ul101471711667"></a><a name="zh-cn_topic_0000001053666242_ul101471711667"></a><ul id="zh-cn_topic_0000001053666242_ul101471711667"><li>LCD连接器(2.35寸)</li><li>LCD连接器(5.5寸)</li></ul>
</li><li>外部器件及接口<a name="zh-cn_topic_0000001053666242_ul089255556"></a><a name="zh-cn_topic_0000001053666242_ul089255556"></a><ul id="zh-cn_topic_0000001053666242_ul089255556"><li>SD卡接口</li><li>JTAG/I2S 接口</li><li>ADC接口</li><li>舵机接口</li><li>Grove连接器</li><li>USB2.0(Type C)</li><li>功能按键3个,2个用户自定义按键,1个升级按键</li><li>LED指示灯,绿灯,红灯</li></ul> </li><li>外部器件及接口<a name="zh-cn_topic_0000001053666242_ul089255556"></a><a name="zh-cn_topic_0000001053666242_ul089255556"></a><ul id="zh-cn_topic_0000001053666242_ul089255556"><li>SD卡接口</li><li>JTAG/I2S接口</li><li>ADC接口</li><li>舵机接口</li><li>Grove连接器</li><li>USB2.0(Type C)</li><li>功能按键3个,2个用户自定义按键,1个升级按键</li><li>LED指示灯,绿灯,红灯</li></ul>
</li></ul> </li></ul>
</td> </td>
</tr> </tr>
......
...@@ -25,7 +25,7 @@ sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex biso ...@@ -25,7 +25,7 @@ sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex biso
1. 注册码云gitee账号。 1. 注册码云gitee账号。
2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191) 2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)
3. 安装[git客户端](http://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。 3. 安装[git客户端](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。
``` ```
git config --global user.name "yourname" git config --global user.name "yourname"
...@@ -44,6 +44,8 @@ sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex biso ...@@ -44,6 +44,8 @@ sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex biso
### 操作步骤<a name="section429012478331"></a> ### 操作步骤<a name="section429012478331"></a>
可通过下方两种方式获取OpenHarmony主干代码,两种方式二选一即可。建议新建个文件夹,在此文件夹下执行以下命令,下载源码,此文件夹即为源码根目录。
方式一(推荐):通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 方式一(推荐):通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
``` ```
...@@ -89,7 +91,7 @@ bash build/prebuilts_download.sh ...@@ -89,7 +91,7 @@ bash build/prebuilts_download.sh
=====build Hi3516DV300 successful. =====build Hi3516DV300 successful.
``` ```
编译所生成的文件都归档在out/ohos-arm-release/目录下,结果镜像输出在 out/ohos-arm-release/packages/phone/images/ 目录下。 编译所生成的文件都归档在out/ohos-arm-release/目录下,结果镜像输出在out/ohos-arm-release/packages/phone/images/ 目录下。
>![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
>其他模块化编译操作,可参见[编译构建指导](../subsystems/subsys-build-standard-large.md)。 >其他模块化编译操作,可参见[编译构建指导](../subsystems/subsys-build-standard-large.md)。
......
# 镜像运行<a name="ZH-CN_TOPIC_0000001142160948"></a> # 镜像运行<a name="ZH-CN_TOPIC_0000001142160948"></a>
- [镜像运行](#section153991115191314) - [镜像运行](#section153991115191314)
- [下一步](#section5600113114323) - [下一步](#section5600113114323)
## 镜像运行<a name="section153991115191314"></a> ## 镜像运行<a name="section153991115191314"></a>
...@@ -12,23 +12,23 @@ ...@@ -12,23 +12,23 @@
1. 在DevEco Device Tool中,点击Monitor,打开串口工具。 1. 在DevEco Device Tool中,点击Monitor,打开串口工具。
![](figure/open-the-serial-port-tool.png) ![](figures/open-the-serial-port-tool.png)
2. 重启开发板,在倒计时结束前,按任意键进入系统。 2. 重启开发板,在倒计时结束前,按任意键进入系统。
![](figure/press-any-key-to-enter-the-system.gif) ![](figures/press-any-key-to-enter-the-system.gif)
3. 通过以下两条命令设置启动参数。 3. 通过以下两条命令设置启动参数。
``` ```
setenv bootargs 'mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M clk_ignore_unused androidboot.selinux=permissive rootdelay=10 hardware=Hi3516DV300 init=/init root=/dev/ram0 rw blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater),2M(misc),3307M(system),256M(vendor),-(userdata)' setenv bootargs 'mem=640M console=ttyAMA0,115200 mmz=anonymous,0,0xA8000000,384M clk_ignore_unused rootdelay=10 hardware=Hi3516DV300 init=/init root=/dev/ram0 rw blkdevparts=mmcblk0:1M(boot),15M(kernel),20M(updater),2M(misc),3307M(system),256M(vendor),-(userdata)';
``` ```
``` ```
setenv bootcmd 'mmc read 0x0 0x82000000 0x800 0x4800; bootm 0x82000000' setenv bootcmd 'mmc read 0x0 0x82000000 0x800 0x4800; bootm 0x82000000'
``` ```
![](figure/start.png) ![](figures/zh-cn_image_0000001172030062.png)
4. 保存参数设置。 4. 保存参数设置。
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
save save
``` ```
![](figure/Save-the-parameter-settings.png) ![](figures/Save-the-parameter-settings.png)
5. 重启开发板,完成系统启动。 5. 重启开发板,完成系统启动。
...@@ -44,8 +44,10 @@ ...@@ -44,8 +44,10 @@
reset reset
``` ```
![](figure/start-the-system.png) ![](figures/start-the-system.png)
## 下一步<a name="section5600113114323"></a> ## 下一步<a name="section5600113114323"></a>
恭喜!您已经完成了OpenHarmony标准系统的快速入门,接下来可[开发一个小示例](../guide/device-clock-guide.md),进一步熟悉OpenHarmony的开发。 恭喜!您已经完成了OpenHarmony标准系统的快速入门,接下来可[开发一个小示例](../guide/device-clock-guide.md),进一步熟悉OpenHarmony的开发。
# 搭建Windows开发环境<a name="ZH-CN_TOPIC_0000001124187462"></a> # Windows开发环境准备<a name="ZH-CN_TOPIC_0000001216019037"></a>
- [获取软件](#zh-cn_topic_0000001058091994_section1483143015558) - [安装DevEco Device Tool](#zh-cn_topic_0000001058091994_section10761564496)
- [安装Visual Studio Code](#zh-cn_topic_0000001058091994_section71401018163318)
- [安装Python](#zh-cn_topic_0000001058091994_section16266553175320)
- [安装Node.js](#zh-cn_topic_0000001058091994_section5353233124511)
- [安装hpm](#zh-cn_topic_0000001058091994_section173054793610)
- [安装DevEco Device Tool插件](#zh-cn_topic_0000001058091994_section4336315185716)
系统要求: 系统要求:
- Windows 10 64位系统。 - Windows 10 64位系统。
- 系统的用户名不能含有中文字符。 - 系统的用户名不能含有中文字符。
DevEco Device Tool以插件方式提供,基于Visual Studio Code进行扩展,安装分为如下几步: ## 安装DevEco Device Tool<a name="zh-cn_topic_0000001058091994_section10761564496"></a>
1. 安装Visual Studio Code
2. 安装Python
3. 安装Node.js
4. 安装hpm
5. 安装DevEco Device Tool插件
## 获取软件<a name="zh-cn_topic_0000001058091994_section1483143015558"></a>
<a name="zh-cn_topic_0000001058091994_table12730195765616"></a>
<table><thead align="left"><tr id="zh-cn_topic_0000001058091994_row6730125785610"><th class="cellrowborder" valign="top" width="19.49%" id="mcps1.1.5.1.1"><p id="zh-cn_topic_0000001058091994_p1573065716561"><a name="zh-cn_topic_0000001058091994_p1573065716561"></a><a name="zh-cn_topic_0000001058091994_p1573065716561"></a>工具名称</p>
</th>
<th class="cellrowborder" valign="top" width="20.5%" id="mcps1.1.5.1.2"><p id="zh-cn_topic_0000001058091994_p197306572566"><a name="zh-cn_topic_0000001058091994_p197306572566"></a><a name="zh-cn_topic_0000001058091994_p197306572566"></a>用途说明</p>
</th>
<th class="cellrowborder" valign="top" width="20.03%" id="mcps1.1.5.1.3"><p id="zh-cn_topic_0000001058091994_p373085711569"><a name="zh-cn_topic_0000001058091994_p373085711569"></a><a name="zh-cn_topic_0000001058091994_p373085711569"></a>版本要求</p>
</th>
<th class="cellrowborder" valign="top" width="39.98%" id="mcps1.1.5.1.4"><p id="zh-cn_topic_0000001058091994_p197309576566"><a name="zh-cn_topic_0000001058091994_p197309576566"></a><a name="zh-cn_topic_0000001058091994_p197309576566"></a>获取渠道</p>
</th>
</tr>
</thead>
<tbody><tr id="zh-cn_topic_0000001058091994_row12730155765618"><td class="cellrowborder" valign="top" width="19.49%" headers="mcps1.1.5.1.1 "><p id="zh-cn_topic_0000001058091994_p123931728135713"><a name="zh-cn_topic_0000001058091994_p123931728135713"></a><a name="zh-cn_topic_0000001058091994_p123931728135713"></a>Visual Studio Code</p>
</td>
<td class="cellrowborder" valign="top" width="20.5%" headers="mcps1.1.5.1.2 "><p id="zh-cn_topic_0000001058091994_p12332194816317"><a name="zh-cn_topic_0000001058091994_p12332194816317"></a><a name="zh-cn_topic_0000001058091994_p12332194816317"></a>代码编辑工具</p>
</td>
<td class="cellrowborder" valign="top" width="20.03%" headers="mcps1.1.5.1.3 "><p id="zh-cn_topic_0000001058091994_p711918919618"><a name="zh-cn_topic_0000001058091994_p711918919618"></a><a name="zh-cn_topic_0000001058091994_p711918919618"></a>V1.53及以上64位版本。</p>
</td>
<td class="cellrowborder" valign="top" width="39.98%" headers="mcps1.1.5.1.4 "><p id="zh-cn_topic_0000001058091994_p2721438193710"><a name="zh-cn_topic_0000001058091994_p2721438193710"></a><a name="zh-cn_topic_0000001058091994_p2721438193710"></a><a href="https://code.visualstudio.com/Download" target="_blank" rel="noopener noreferrer">https://code.visualstudio.com/Download</a></p>
</td>
</tr>
<tr id="zh-cn_topic_0000001058091994_row187311257185619"><td class="cellrowborder" valign="top" width="19.49%" headers="mcps1.1.5.1.1 "><p id="zh-cn_topic_0000001058091994_p21270444579"><a name="zh-cn_topic_0000001058091994_p21270444579"></a><a name="zh-cn_topic_0000001058091994_p21270444579"></a>Python</p>
</td>
<td class="cellrowborder" valign="top" width="20.5%" headers="mcps1.1.5.1.2 "><p id="zh-cn_topic_0000001058091994_p547205817316"><a name="zh-cn_topic_0000001058091994_p547205817316"></a><a name="zh-cn_topic_0000001058091994_p547205817316"></a>编译构建工具</p>
</td>
<td class="cellrowborder" valign="top" width="20.03%" headers="mcps1.1.5.1.3 "><p id="zh-cn_topic_0000001058091994_p1991315166416"><a name="zh-cn_topic_0000001058091994_p1991315166416"></a><a name="zh-cn_topic_0000001058091994_p1991315166416"></a>V3.8.9及以上64位版本</p>
</td>
<td class="cellrowborder" valign="top" width="39.98%" headers="mcps1.1.5.1.4 "><p id="zh-cn_topic_0000001058091994_p108321457411"><a name="zh-cn_topic_0000001058091994_p108321457411"></a><a name="zh-cn_topic_0000001058091994_p108321457411"></a><a href="https://www.python.org/downloads/" target="_blank" rel="noopener noreferrer">https://www.python.org/downloads/</a></p>
</td>
</tr>
<tr id="zh-cn_topic_0000001058091994_row117316576562"><td class="cellrowborder" valign="top" width="19.49%" headers="mcps1.1.5.1.1 "><p id="zh-cn_topic_0000001058091994_p16405151165717"><a name="zh-cn_topic_0000001058091994_p16405151165717"></a><a name="zh-cn_topic_0000001058091994_p16405151165717"></a>Node.js</p>
</td>
<td class="cellrowborder" valign="top" width="20.5%" headers="mcps1.1.5.1.2 "><p id="zh-cn_topic_0000001058091994_p1773185765616"><a name="zh-cn_topic_0000001058091994_p1773185765616"></a><a name="zh-cn_topic_0000001058091994_p1773185765616"></a>提供npm环境</p>
</td>
<td class="cellrowborder" valign="top" width="20.03%" headers="mcps1.1.5.1.3 "><p id="zh-cn_topic_0000001058091994_p16304104120181"><a name="zh-cn_topic_0000001058091994_p16304104120181"></a><a name="zh-cn_topic_0000001058091994_p16304104120181"></a>以下版本三选一:</p>
<a name="zh-cn_topic_0000001058091994_ul875854471719"></a><a name="zh-cn_topic_0000001058091994_ul875854471719"></a><ul id="zh-cn_topic_0000001058091994_ul875854471719"><li>V12.22.5及以上64位版本</li><li>V14.17.5及以上64版本</li><li>V16.6.0及以上64位版本</li></ul>
</td>
<td class="cellrowborder" valign="top" width="39.98%" headers="mcps1.1.5.1.4 "><p id="zh-cn_topic_0000001058091994_p9200911141112"><a name="zh-cn_topic_0000001058091994_p9200911141112"></a><a name="zh-cn_topic_0000001058091994_p9200911141112"></a><a href="https://nodejs.org/zh-cn/download/" target="_blank" rel="noopener noreferrer">https://nodejs.org/zh-cn/download/</a></p>
</td>
</tr>
<tr id="zh-cn_topic_0000001058091994_row6731105715561"><td class="cellrowborder" valign="top" width="19.49%" headers="mcps1.1.5.1.1 "><p id="zh-cn_topic_0000001058091994_p2081865318571"><a name="zh-cn_topic_0000001058091994_p2081865318571"></a><a name="zh-cn_topic_0000001058091994_p2081865318571"></a>hpm</p>
</td>
<td class="cellrowborder" valign="top" width="20.5%" headers="mcps1.1.5.1.2 "><p id="zh-cn_topic_0000001058091994_p1632215161040"><a name="zh-cn_topic_0000001058091994_p1632215161040"></a><a name="zh-cn_topic_0000001058091994_p1632215161040"></a>包管理工具</p>
</td>
<td class="cellrowborder" valign="top" width="20.03%" headers="mcps1.1.5.1.3 "><p id="zh-cn_topic_0000001058091994_p773185715566"><a name="zh-cn_topic_0000001058091994_p773185715566"></a><a name="zh-cn_topic_0000001058091994_p773185715566"></a>V1.3.0及以上</p>
</td>
<td class="cellrowborder" valign="top" width="39.98%" headers="mcps1.1.5.1.4 "><p id="zh-cn_topic_0000001058091994_p14731125745610"><a name="zh-cn_topic_0000001058091994_p14731125745610"></a><a name="zh-cn_topic_0000001058091994_p14731125745610"></a>请参考<a href="#zh-cn_topic_0000001058091994_section173054793610">安装hpm</a></p>
</td>
</tr>
<tr id="zh-cn_topic_0000001058091994_row13317205645717"><td class="cellrowborder" valign="top" width="19.49%" headers="mcps1.1.5.1.1 "><p id="zh-cn_topic_0000001058091994_p143411112587"><a name="zh-cn_topic_0000001058091994_p143411112587"></a><a name="zh-cn_topic_0000001058091994_p143411112587"></a>DevEco Device Tool</p>
</td>
<td class="cellrowborder" valign="top" width="20.5%" headers="mcps1.1.5.1.2 "><p id="zh-cn_topic_0000001058091994_p1690316506517"><a name="zh-cn_topic_0000001058091994_p1690316506517"></a><a name="zh-cn_topic_0000001058091994_p1690316506517"></a>OpenHarmony源码的编译、烧录、调试插件工具</p>
</td>
<td class="cellrowborder" valign="top" width="20.03%" headers="mcps1.1.5.1.3 "><p id="zh-cn_topic_0000001058091994_p113171956185715"><a name="zh-cn_topic_0000001058091994_p113171956185715"></a><a name="zh-cn_topic_0000001058091994_p113171956185715"></a>V2.2 Beta2</p>
</td>
<td class="cellrowborder" valign="top" width="39.98%" headers="mcps1.1.5.1.4 "><p id="zh-cn_topic_0000001058091994_p3503163074720"><a name="zh-cn_topic_0000001058091994_p3503163074720"></a><a name="zh-cn_topic_0000001058091994_p3503163074720"></a><a href="https://device.harmonyos.com/cn/ide#download_beta" target="_blank" rel="noopener noreferrer">https://device.harmonyos.com/cn/ide#download_beta</a></p>
<p id="zh-cn_topic_0000001058091994_p23171856135717"><a name="zh-cn_topic_0000001058091994_p23171856135717"></a><a name="zh-cn_topic_0000001058091994_p23171856135717"></a>下载前,请使用华为开发者帐号登录,如未注册,请先<a href="https://developer.huawei.com/consumer/cn/doc/start/registration-and-verification-0000001053628148" target="_blank" rel="noopener noreferrer">注册华为开发者帐号</a></p>
</td>
</tr>
</tbody>
</table>
## 安装Visual Studio Code<a name="zh-cn_topic_0000001058091994_section71401018163318"></a> DevEco Device Tool以插件方式运行,基于Visual Studio Code进行扩展,同时DevEco Device Tool运行依赖Python,Node.js和hpm工具。
>![](../public_sys-resources/icon-note.gif) **说明:** DevEco Device Tool支持一体化安装,即DevEco Device Tool安装向导会检测系统是否安装Visual Studio Code、Python、Node.js、hpm的适配版本,当安装向导未检测到这些软件时,会给出相应的提示,根据提示勾选要自动安装的软件,安装向导会自动下载相应的软件进行安装。
>如果已安装Visual Studio Code,打开命令行工具,输入**code --version**命令,检查版本号是否为1.53及以上版本;可以正常返回版本号,说明环境变量设置也正确。
1. 双击Visual Studio Code软件包进行安装。安装过程中,请勾选“添加到PATH(重启后生效)”。 安装DevEco Device Tool,**主机的用户名不能包含中文字符**,否则在运行DevEco Device Tool时,DevEco Home界面会一直处于Loading状态,导致不能正常使用
![](figure/installing-visual-studio-code.png) 1. 获取软件,请使用华为开发者帐号登录[https://device.harmonyos.com/cn/ide\#download\_beta](https://device.harmonyos.com/cn/ide#download_beta),下载DevEco Device Tool V3.0 Beta1及以上版本。如未注册华为开发者账号,请先[注册](https://developer.huawei.com/consumer/cn/doc/start/registration-and-verification-0000001053628148)
2. 解压DevEco Device Tool压缩包,双击安装包程序,点击Next进行安装。
3. 设置DevEco Device Tool的安装路径,点击Next。
4. 根据安装向导提示,勾选要自动安装的软件,点击Next。
2. 安装完成后,打开命令行工具,输入**code --version**命令,可以正常显示版本号说明安装成功。 ![](figures/Snap28.png)
## 安装Python<a name="zh-cn_topic_0000001058091994_section16266553175320"></a> >![](../public_sys-resources/icon-note.gif) **说明:**
>当安装向导检测到系统中已安装可兼容的Python版本,会提示用户可选择已安装的可兼容的Python版本,也可选择下载推荐的Python版本。
1. 双击Python安装包进行安装,勾选“**Add Python 3.8 to PATH**”,然后点击**Install Now**开始安装。
![](figure/installing-python.png)
2. 等待安装完成后,点击**Close**
![](figure/setup-was-successful.png)
3. 打开命令行工具,输入python --version,检查安装结果。
![](figure/checking-the-installation-result.png)
4. 在命令行工具中,分别执行如下命令设置pip源,用于后续安装DevEco Device Tool过程中下载依赖的组件包。
```
pip config set global.trusted-host repo.huaweicloud.com
pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple
pip config set global.timeout 120
```
## 安装Node.js<a name="zh-cn_topic_0000001058091994_section5353233124511"></a>
>![](../public_sys-resources/icon-note.gif) **说明:**
>如果已安装Node.js,打开命令行工具,输入**node -v**命令,检查版本号是否为12.0.0及以上版本。
1. 点击下载后的软件包进行安装,全部按照默认设置点击**Next**,直至**Finish**。安装过程中,Node.js会自动在系统的path环境变量中配置node.exe的目录路径。
2. 重新打开命令行工具,输入“node -v“命令,能正常查询Node.js的版本号,说明Node.js安装成功。
## 安装hpm<a name="zh-cn_topic_0000001058091994_section173054793610"></a>
该方式需先确保**Node.js**安装成功。
在安装hpm前,请检查网络连接状态,如果网络不能直接访问Internet,则需要通过代理服务器才可以访问。这种情况下,需要先[设置npm代理](https://device.harmonyos.com/cn/docs/ide/user-guides/npm_proxy-0000001054491032),才能安装hpm。
>![](../public_sys-resources/icon-note.gif) **说明:**
>如果已安装hpm,可以执行**npm update -g @ohos/hpm-cli**命令升级hpm至最新版本。
1. 建议将npm源配置为国内镜像,例如设置为华为云镜像源。
```
npm config set registry https://repo.huaweicloud.com/repository/npm/
```
2. 打开命令行工具,执行如下命令安装最新版本hpm。
```
npm install -g @ohos/hpm-cli
```
![](figure/hpm-version.png)
3. 安装完成后,执行如下命令(V为大写字母)检查hpm安装结果。
```
hpm -V
```
5. 在以下界面点击Next,进行软件下载和安装。
## 安装DevEco Device Tool插件<a name="zh-cn_topic_0000001058091994_section4336315185716"></a> ![](figures/Snap8.png)
安装DevEco Device Tool插件,**主机的用户名不能包含中文字符**,否则在运行DevEco Device Tool时,DevEco Home界面会一直处于Loading状态,导致不能正常使用 6. 在弹出的Python安装向导中,勾选“**Add Python 3.8 to PATH**”,然后点击**Install Now**开始安装,等待安装完成后,点击**Close**
DevEco Device Tool正常运行需要依赖于C/C++和CodeLLDB插件,在安装完DevEco Device Tool后,会自动从Visual Studio Code的插件市场安装C/C++和CodeLLDB插件。因此,在安装DevEco Device Tool前,请检查Visual Studio Code的网络连接状态,如果网络不能直接访问Internet,则需要通过代理服务器才可以访问,请先[Visual Studio Code代理设置](https://device.harmonyos.com/cn/docs/ide/user-guides/vscode_proxy-0000001074231144) >![](../public_sys-resources/icon-note.gif) **说明:**
>当DevEco Device Tool安装向导检测系统已安装可兼容的Python版本,且用户选择了已安装的可兼容的Python版本,则Python安装向导不会弹出,用户不需要执行此步骤。
>如果安装DevEco Device Tool 2.1 Release版本,Python版本只能为3.8.x版本,不能安装最新的Python3.9.x版本。如果安装DevEco Device Tool V3.0 Beta1及以上版本,Python版本只能为3.8.x或3.9.x版本。
>![](../public_sys-resources/icon-note.gif) **说明:** ![](figures/Snap34.png)
>安装DevEco Device Tool时,请先关闭Visual Studio Code。
1. 解压DevEco Device Tool插件压缩包,双击安装包程序进行安装。 7. 在弹出的Visual Studio Code安装向导中,根据向导提示安装Visual Studio Code,安装过程中,请勾选“添加到PATH(重启后生效)”。
2. DevEco Device Tool会检测安装依赖的工具包是否符合要求。如果不符合要求,请按照本章节前面的内容进行安装。
>![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
>如果已经安装Visual Studio Code,但依然检测不到,可重启电脑解决 >当DevEco Device Tool安装向导检测系统已安装正确的Visual Studio Code版本,则Visual Studio Code安装向导不会弹出,用户不需要执行此步骤
![](figure/installing-the-deveco-device-tool.png) ![](figures/Snap33.png)
3. 点击**Install**进行安装 8. 在弹出的Node.js安装向导中,全部按照默认设置点击**Next**,直至**Finish**。安装过程中,Node.js会自动在系统的path环境变量中配置node.exe的目录路径
![](figure/install.png) >![](../public_sys-resources/icon-note.gif) **说明:**
>当DevEco Device Tool安装向导检测系统已安装正确的Node.js版本,则Node.js安装向导不会弹出,用户不需要执行此步骤。
4. 等待安装完成后,点击Close关闭安装界面 9. 等待DevEco Device Tool安装向导自动安装hpm和DevEco Device Tool插件,直至安装完成,点击**Finish**,关闭DevEco Device Tool安装向导
![](figure/installation-complete.png) >![](../public_sys-resources/icon-note.gif) **说明:**
>当DevEco Device Tool安装向导检测系统已安装正确的hpm版本,则不会进行hpm软件的下载和安装。
5. 启动Visual Studio Code,会自动安装DevEco Device Tool依赖的C/C++、CodeLLDB插件。等待安装完成后,点击Visual Studio Code左侧的![](figure/button.png)按钮,检查INSTALLED中,是否已成功安装C/C++、CodeLLDB和DevEco Device Tool。 10. 启动Visual Studio Code,会自动安装DevEco Device Tool依赖的C/C++、CodeLLDB插件。等待安装完成后,点击Visual Studio Code左侧的![](figures/button.png)按钮,检查INSTALLED中,是否已成功安装C/C++、CodeLLDB和DevEco Device Tool。
>![](../public_sys-resources/icon-note.gif) **说明:** >![](../public_sys-resources/icon-note.gif) **说明:**
>如果C/C++和CodeLLDB插件安装不成功,则DevEco Device Tool不能正常运行,解决方法,详细请参考:[离线安装C/C++和CodeLLDB插件](https://device.harmonyos.com/cn/docs/ide/user-guides/offline_plugin_install-0000001074376846)。 >如果C/C++和CodeLLDB插件安装不成功,则DevEco Device Tool不能正常运行,解决方法,详细请参考:[离线安装C/C++和CodeLLDB插件](https://device.harmonyos.com/cn/docs/ide/user-guides/offline_plugin_install-0000001074376846)。
![](figure/visual-studio-code.png) ![](figures/deveco-device-tool-install-sucessful.png)
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
- **[入门介绍](quickstart-standard-overview.md)** - **[入门介绍](quickstart-standard-overview.md)**
- **[搭建Windows开发环境](quickstart-standard-windows-environment.md)** - **[Windows开发环境准备](quickstart-standard-windows-environment.md)**
- **[搭建Ubuntu环境\(获取源码及编译,Docker方式\)](quickstart-standard-docker-environment.md)** - **[搭建Ubuntu环境\(获取源码及编译,Docker方式\)](quickstart-standard-docker-environment.md)**
......
...@@ -49,6 +49,9 @@ ...@@ -49,6 +49,9 @@
- [开发指导](subsys-application-framework-guide.md) - [开发指导](subsys-application-framework-guide.md)
- [开发实例](subsys-application-framework-demo.md) - [开发实例](subsys-application-framework-demo.md)
- [OTA升级](subsys-ota-guide.md) - [OTA升级](subsys-ota-guide.md)
- [电话服务](subsys-tel.md)
- [电话服务概述](subsys-tel-overview.md)
- [电话服务开发指导](subsys-tel-guide.md)
- [安全](subsys-security.md) - [安全](subsys-security.md)
- [概述](subsys-security-overview.md) - [概述](subsys-security-overview.md)
- [应用验签开发指导](subsys-security-sigverify.md) - [应用验签开发指导](subsys-security-sigverify.md)
......
...@@ -18,12 +18,12 @@ ...@@ -18,12 +18,12 @@
- [新增产品解决方案](#section1097623294220) - [新增产品解决方案](#section1097623294220)
- [常见问题](#section19909721104319) - [常见问题](#section19909721104319)
- [ninja版本问题导致编译失败](#section138233464318) - [编译构建过程中,提示“usr/sbin/ninja: invalid option -- w”](#section138233464318)
- [ncurses库缺失导致编译失败](#section151033911442) - [编译构建过程中,提示“/usr/bin/ld: cannot find -lncurses”](#section151033911442)
- [未安装mcopy导致编译失败](#section19811838104418) - [编译构建过程中,提示“line 77: mcopy: command not found”](#section19811838104418)
- [权限问题导致编译失败](#section03111118451) - [编译构建过程中,提示“riscv32-unknown-elf-gcc: error trying to exec 'cc1': execvp: No such file or directory”](#section03111118451)
- [未安装Crypto导致编译失败](#section69981127125013) - [编译构建过程中,提示“No module named 'Crypto'”](#section69981127125013)
- [编译环境为shell导致编译失败](#section967617530505) - [编译构建过程中,提示“xx.sh : xx unexpected operator”](#section967617530505)
## 概述<a name="section10958256161119"></a> ## 概述<a name="section10958256161119"></a>
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
### 基本概念<a name="section1732301411128"></a> ### 基本概念<a name="section1732301411128"></a>
在使用编译构建子系统前,应了解如下基本概念: 在使用编译构建子系统前,应了解如下基本概念:s
- 子系统 - 子系统
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
``` ```
build/lite build/lite
├── components # 组件描述文件 ├── components # 组件描述文件
├── figures # readme中的图片 ├── figure # readme中的图片
├── hb # hb pip安装包源码 ├── hb # hb pip安装包源码
├── make_rootfs # 文件系统镜像制作脚本 ├── make_rootfs # 文件系统镜像制作脚本
├── config # 编译配置项 ├── config # 编译配置项
...@@ -97,7 +97,7 @@ build/lite ...@@ -97,7 +97,7 @@ build/lite
为了实现芯片解决方案、产品解决方案与OpenHarmony是解耦的、可插拔的,组件、芯片解决方案和产品解决方案的路径、目录树和配置需遵循一定的规则,具体如下: 为了实现芯片解决方案、产品解决方案与OpenHarmony是解耦的、可插拔的,组件、芯片解决方案和产品解决方案的路径、目录树和配置需遵循一定的规则,具体如下:
### **组件**<a name="section142532518308"></a> ### 组件<a name="section142532518308"></a>
组件源码路径命名规则为:**\{领域\}/\{子系统\}/\{组件\}**,组件目录树规则如下: 组件源码路径命名规则为:**\{领域\}/\{子系统\}/\{组件\}**,组件目录树规则如下:
...@@ -206,7 +206,7 @@ component ...@@ -206,7 +206,7 @@ component
} }
``` ```
### **芯片解决方案**<a name="section121501451143710"></a> ### 芯片解决方案<a name="section121501451143710"></a>
- 芯片解决方案是指基于某款开发板的完整解决方案,包含驱动、设备侧接口适配、开发板sdk等。 - 芯片解决方案是指基于某款开发板的完整解决方案,包含驱动、设备侧接口适配、开发板sdk等。
- 芯片解决方案是一个特殊的组件,源码路径规则为:**device/\{芯片解决方案厂商\}/\{开发板\}** - 芯片解决方案是一个特殊的组件,源码路径规则为:**device/\{芯片解决方案厂商\}/\{开发板\}**
...@@ -244,7 +244,7 @@ board_cxx_flags: 开发板配置的cpp文件编译选项。 ...@@ -244,7 +244,7 @@ board_cxx_flags: 开发板配置的cpp文件编译选项。
board_ld_flags: 开发板配置的链接选项。 board_ld_flags: 开发板配置的链接选项。
``` ```
### **产品解决方案**<a name="section134549283435"></a> ### 产品解决方案<a name="section134549283435"></a>
产品解决方案为基于开发板的完整产品,主要包含产品对OS的适配、组件拼装配置、启动配置和文件系统配置等。产品解决方案的源码路径规则为:**vendor/\{产品解决方案厂商\}/\{产品名称\}**_。_产品解决方案也是一个特殊的组件。 产品解决方案为基于开发板的完整产品,主要包含产品对OS的适配、组件拼装配置、启动配置和文件系统配置等。产品解决方案的源码路径规则为:**vendor/\{产品解决方案厂商\}/\{产品名称\}**_。_产品解决方案也是一个特殊的组件。
...@@ -880,7 +880,7 @@ optional arguments: ...@@ -880,7 +880,7 @@ optional arguments:
## 常见问题<a name="section19909721104319"></a> ## 常见问题<a name="section19909721104319"></a>
### ninja版本问题导致编译失败<a name="section138233464318"></a> ### 编译构建过程中,提示“usr/sbin/ninja: invalid option -- w”<a name="section138233464318"></a>
- **现象描述:** - **现象描述:**
...@@ -892,10 +892,10 @@ optional arguments: ...@@ -892,10 +892,10 @@ optional arguments:
- **解决办法:** - **解决办法:**
卸载环境中ninja和gn,按照HarmonyOS官网[获取工具](../get-code/gettools-ide.md)。 卸载环境中ninja和gn,按照[获取工具](../get-code/gettools-ide.md)。
### ncurses库缺失导致编译失败<a name="section151033911442"></a> ### 编译构建过程中,提示“/usr/bin/ld: cannot find -lncurses”<a name="section151033911442"></a>
- **现象描述:** - **现象描述:**
...@@ -912,7 +912,7 @@ optional arguments: ...@@ -912,7 +912,7 @@ optional arguments:
``` ```
### 未安装mcopy导致编译失败<a name="section19811838104418"></a> ### 编译构建过程中,提示“line 77: mcopy: command not found”<a name="section19811838104418"></a>
- **现象描述:** - **现象描述:**
...@@ -929,7 +929,7 @@ optional arguments: ...@@ -929,7 +929,7 @@ optional arguments:
``` ```
### 权限问题导致编译失败<a name="section03111118451"></a> ### 编译构建过程中,提示“riscv32-unknown-elf-gcc: error trying to exec 'cc1': execvp: No such file or directory”<a name="section03111118451"></a>
- **现象描述:** - **现象描述:**
...@@ -950,7 +950,7 @@ optional arguments: ...@@ -950,7 +950,7 @@ optional arguments:
使用chmod命令修改目录权限为755。 使用chmod命令修改目录权限为755。
### 未安装Crypto导致编译失败<a name="section69981127125013"></a> ### 编译构建过程中,提示“No module named 'Crypto'”<a name="section69981127125013"></a>
- **现象描述:** - **现象描述:**
...@@ -975,7 +975,7 @@ optional arguments: ...@@ -975,7 +975,7 @@ optional arguments:
### 编译环境为shell导致编译失败<a name="section967617530505"></a> ### 编译构建过程中,提示“xx.sh : xx unexpected operator”<a name="section967617530505"></a>
- **现象描述:** - **现象描述:**
......
# 电话服务开发指导<a name="ZH-CN_TOPIC_0000001167051994"></a>
- [Modem厂商库初始化开发指导](#section211mcpsimp)
- [场景介绍](#section213mcpsimp)
- [接口说明](#section811343241215)
- [开发步骤](#section51031144122)
- [调测验证](#section5351151517132)
- [Modem业务请求及响应开发指导](#section295mcpsimp)
- [场景介绍](#section297mcpsimp)
- [接口说明](#section9503155219134)
- [开发步骤](#section17190412101414)
- [调测验证](#section10207938171413)
- [Modem事件上报开发指导](#section390mcpsimp)
- [场景介绍](#section401mcpsimp)
- [接口说明](#section191193791518)
- [开发步骤](#section16394112401512)
- [调测验证](#section16999174401516)
- [开发实例](#section33444350167)
- [Modem厂商库集成指导](#section590mcpsimp)
- [编译设置](#section592mcpsimp)
- [调测验证](#section620mcpsimp)
## Modem厂商库初始化开发指导<a name="section211mcpsimp"></a>
### 场景介绍<a name="section213mcpsimp"></a>
Modem厂商库初始化是指在厂商库里实现const HRilOps \*RilInitOps\(const struct HRilReport \*reportOps\)函数,在该函数里处理三个重要的功能:
- 接收RIL Adapter事件回调的函数指针,当Modem有业务事件上报时,调用对应的函数指针,把事件上报给RIL Adapter。
- 创建读取Modem设备节点的线程,在该线程里会循环地读取Modem上报的事件,并把接收的Modem信息解析为具体业务相关的事件进行上报。
- 返回业务请求接口的函数指针给RIL Adapter。
### 接口说明<a name="section811343241215"></a>
Modem厂商库初始化接口。
**表 1** Modem厂商库初始化接口功能介绍
<a name="table223mcpsimp"></a>
<table><thead align="left"><tr id="row229mcpsimp"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p231mcpsimp"><a name="p231mcpsimp"></a><a name="p231mcpsimp"></a>接口名</p>
</th>
<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p233mcpsimp"><a name="p233mcpsimp"></a><a name="p233mcpsimp"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="row235mcpsimp"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p237mcpsimp"><a name="p237mcpsimp"></a><a name="p237mcpsimp"></a>const HRilOps *RilInitOps(const struct HRilReport * reportOps)</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p239mcpsimp"><a name="p239mcpsimp"></a><a name="p239mcpsimp"></a>接口功能:Modem厂商库运行的入口。</p>
<p id="p240mcpsimp"><a name="p240mcpsimp"></a><a name="p240mcpsimp"></a>参数reportOps:RIL Adapter传入的事件回调函数指针。</p>
<p id="p241mcpsimp"><a name="p241mcpsimp"></a><a name="p241mcpsimp"></a>返回值:业务请求接口的函数指针。</p>
</td>
</tr>
</tbody>
</table>
### 开发步骤<a name="section51031144122"></a>
1. RilInitOps接口中设置RIL Adapter传入的事件回调函数指针。
```
// 定义Modem厂商库回调函数指针
static struct HRilReport g_reportOps = {
OnCallReport, // 通话相关业务回调函数
OnDataReport, // 蜂窝数据相关业务回调函数
OnModemReport, // Modem相关业务回调函数
OnNetworkReport, // 搜网相关业务回调函数
OnSimReport, // SIM卡相关业务回调函数
OnSmsReport // 短信相关业务回调函数
};
```
1. 创建主线程g\_reader,开启消息循环。
```
pthread_attr_t t;
pthread_attr_init(&t);
pthread_attr_setdetachstate(&t, PTHREAD_CREATE_DETACHED);
ret = pthread_create(&g_reader, &t, ReaderLoop, &t); // 创建线程
```
1. 在g\_eventListeners线程用open\(\)打开Modem设备节点,并创建g\_reader线程循环读取处理Modem上报的消息。
```
g_fd = open(g_devicePath, O_RDWR); // 打开设备节点,入参g_devicePath是Modem设备节点
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
ret = pthread_create(&g_eventListeners, &attr, EventListeners, NULL);
```
1. 返回业务请求接口的函数指针。
```
// call模块业务请求接口结构体
typedef struct {
// 获取呼叫列表
void (*GetCallList)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
// 拨打电话
void (*Dial)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
// 挂断电话
void (*Hangup)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
// 拒接来电
void (*Reject)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
// 接听来电
void (*Answer)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
} HRilCallReq;
// call模块回调函数指针
static const HRilCallReq g_callReqOps = {
.GetCallList = ReqGetCallList, // 获取呼叫列表接口
.Dial = ReqDial, // 拨打电话接口
.Hangup = ReqHangup, // 挂断电话接口
.Reject = ReqReject, // 拒接来电接口
.Answer = ReqAnswer, // 接听来电接口
};
// 业务请求结构体
typedef struct {
const HRilCallReq *callOps; // 通话相关业务请求结构体指针
const HRilSimReq *simOps; // SIM卡相关业务请求结构体指针
const HRilSmsReq *smsOps; // 短彩信相关业务请求结构体指针
const HRilDataReq *dataOps; // 蜂窝数据相关业务请求结构体指针
const HRilNetworkReq *networkOps; // 搜网相关业务请求结构体指针
const HRilModemReq *modemOps; // Modem相关业务请求结构体指针
} HRilOps;
// 业务请求接口定义
HRilOps g_hrilOps = {
.callOps = &g_callReqOps, // 定义通话业务请求接口
.simOps = &g_simReqOps, // 定义SIM卡业务请求接口
.smsOps = &g_smsReqOps, // 定义短彩信业务请求接口
.networkOps = &g_networkReqOps, // 定义蜂窝数据业务请求接口
.dataOps = &g_dataReqOps, // 定义搜网业务请求接口
.modemOps = &g_modemReqOps, // 定义Modem业务请求接口
};
```
### 调测验证<a name="section5351151517132"></a>
1.[hdc\_std工具](subsys-toolchain-hdc-guide.md#section05992022154916)连接调试设备,把编译生成的libril\_vendor.z.so库文件(参见[Modem厂商库集成指导](#section590mcpsimp))通过以下命令推到/system/lib/目录下。
```
hdc_std file send libril_vendor.z.so /system/lib/
```
2. 执行hdc\_std shell sync,hdc\_std shell reboot重启设备。
```
hdc_std shell sync
hdc_std shell reboot
```
3. 执行hdc\_std shell hilog,根据日志查看函数RilInitOps\(\)是否正确执行完成。如下调测验证日志供参考:
```
01-01 05:13:23.071 136 2319 D 00000/RilAdapterInit: [RilAdapterDispatch-(hril_hdf.c:55)] sbuf IPC obtain test success!
01-01 05:13:23.071 136 2319 D 00000/RilAdapterInit: [LoadVendor-(hril_hdf.c:33)] RilInit rilInit start
01-01 05:13:23.071 136 2319 D 00000/RilAdapterInit: [LoadVendor -(hril_hdf.c:45)] RilInit rilInit completed
```
## Modem业务请求及响应开发指导<a name="section295mcpsimp"></a>
### 场景介绍<a name="section297mcpsimp"></a>
Modem业务请求及响应是指RIL Adapter收到电话服务具体业务请求后,调用Modem厂商库初始化获得的函数指针,把具体业务请求发送给厂商库,厂商库根据业务请求ID做相应的业务处理。
### 接口说明<a name="section9503155219134"></a>
Modem业务请求及响应接口。
**表 2** Modem业务请求及响应接口功能介绍(以拨号功能模块为例)
<a name="table303mcpsimp"></a>
<table><thead align="left"><tr id="row309mcpsimp"><th class="cellrowborder" valign="top" width="49.84%" id="mcps1.2.3.1.1"><p id="p311mcpsimp"><a name="p311mcpsimp"></a><a name="p311mcpsimp"></a>接口名</p>
</th>
<th class="cellrowborder" valign="top" width="50.160000000000004%" id="mcps1.2.3.1.2"><p id="p313mcpsimp"><a name="p313mcpsimp"></a><a name="p313mcpsimp"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="row315mcpsimp"><td class="cellrowborder" valign="top" width="49.84%" headers="mcps1.2.3.1.1 "><p id="p317mcpsimp"><a name="p317mcpsimp"></a><a name="p317mcpsimp"></a>void ReqDial(ReqDataInfo *requestInfo, const void *data, size_t dataLen);</p>
</td>
<td class="cellrowborder" valign="top" width="50.160000000000004%" headers="mcps1.2.3.1.2 "><p id="p319mcpsimp"><a name="p319mcpsimp"></a><a name="p319mcpsimp"></a>接口功能:对拨号请求进行处理。</p>
<p id="p320mcpsimp"><a name="p320mcpsimp"></a><a name="p320mcpsimp"></a>参数requestInfo:请求类型信息。</p>
<p id="p321mcpsimp"><a name="p321mcpsimp"></a><a name="p321mcpsimp"></a>参数data:被叫号码信息。</p>
<p id="p322mcpsimp"><a name="p322mcpsimp"></a><a name="p322mcpsimp"></a>参数dataLen:数据长度。</p>
<p id="p323mcpsimp"><a name="p323mcpsimp"></a><a name="p323mcpsimp"></a>返回值:无。</p>
</td>
</tr>
<tr id="row324mcpsimp"><td class="cellrowborder" valign="top" width="49.84%" headers="mcps1.2.3.1.1 "><p id="p326mcpsimp"><a name="p326mcpsimp"></a><a name="p326mcpsimp"></a>void (*OnCallReport)(struct ReportInfo reportInfo, const void *data, size_t dataLen);</p>
</td>
<td class="cellrowborder" valign="top" width="50.160000000000004%" headers="mcps1.2.3.1.2 "><p id="p328mcpsimp"><a name="p328mcpsimp"></a><a name="p328mcpsimp"></a>接口功能:对通话业务执行结果进行响应,即当请求业务执行完成后,Modem将该请求执行的结果上报给RIL Adapter。</p>
<p id="p329mcpsimp"><a name="p329mcpsimp"></a><a name="p329mcpsimp"></a>参数reportInfo:返回类型信息。</p>
<p id="p330mcpsimp"><a name="p330mcpsimp"></a><a name="p330mcpsimp"></a>参数data:返回数据。</p>
<p id="p331mcpsimp"><a name="p331mcpsimp"></a><a name="p331mcpsimp"></a>参数dataLen:数据长度。</p>
<p id="p332mcpsimp"><a name="p332mcpsimp"></a><a name="p332mcpsimp"></a>返回值:无。</p>
</td>
</tr>
</tbody>
</table>
### 开发步骤<a name="section17190412101414"></a>
1. 在ReqDial\(\)接口中对拨号请求进行处理。
```
// 拨号请求接口实现
void ReqDial(ReqDataInfo *requestInfo, const void *data, size_t dataLen)
{
HRilDial *pDial = NULL;
char cmd[MAX_BUFF_SIZE] = {0};
const char *clir = NULL;
int ret;
int err = HRIL_ERR_SUCCESS;
struct ReportInfo reportInfo = {};
ResponseInfo *pResponse = NULL;
if (data == NULL) {
TELEPHONY_LOGE("data is null!!!");
err = HRIL_ERR_INVALID_PARAMETER;
reportInfo = CreateReportInfo(requestInfo, err, HRIL_RESPONSE, 0);
OnCallReport(reportInfo, NULL, 0);
return;
}
pDial = (HRilDial *)data;
switch (pDial->clir) {
case CALL_CLIR_INVOCATION:
clir = "I";
break; /* invocation */
case CALL_CLIR_SUPPRESSION:
clir = "i";
break; /* suppression */
case CALL_CLIR_SUBSCRIPTION_DEFUALT:
default:
clir = "";
break; /* subscription default */
}
(void)sprintf_s(cmd, MAX_BUFF_SIZE, "ATD%s%s;", pDial->address, clir);
ret = SendCommandLock(cmd, NULL, 0, &pResponse); // 发送AT指令
......
}
```
2. 在Modem执行完拨号命令后,调用OnCallReport\(\)回调函数,把该请求执行的结果上报给RIL Adapter。
```
ret = SendCommandLock(cmd, NULL, 0, &pResponse);
if (ret != 0 || (pResponse != NULL && pResponse->success == 0)) {
TELEPHONY_LOGE("ATD send failed");
err = HRIL_ERR_GENERIC_FAILURE;
}
reportInfo = CreateReportInfo(requestInfo, err, HRIL_RESPONSE, 0);
OnCallReport(reportInfo, NULL, 0); // 调用通话相关回调函数
```
### 调测验证<a name="section10207938171413"></a>
1.[hdc\_std工具](subsys-toolchain-hdc-guide.md#section05992022154916)工具连接调试设备,把编译生成的libril\_vendor.z.so库文件通过以下命令推到/system/lib/目录下。
```
hdc_std file send libril_vendor.z.so /system/lib/
```
2. 执行hdc\_std shell sync,hdc\_std shell reboot重启设备。
```
hdc_std shell sync
hdc_std shell reboot
```
3. hdc\_std shell后执行./system/bin/ril\_adapter\_test,输入编号1,根据提示输入电话号码,测试拨打电话功能。
```
hdc_std shell
# ./system/bin/ril_adapter_test
----> Test Enter --------->Call---------------------
1----> RilUnitTest::OnRequestCallDialTest
2----> RilUnitTest:: OnRequestCallHangupTest
3----> RilUnitTest:: OnRequestCallAnswerTest
4----> RilUnitTest::OnRequestCallGetCurrentCallsStatusTest
5----> RilUnitTest::OnRequestRefusedCallTest
1
```
4. 另开一个终端窗口,执行hdc\_std shell hilog,通过日志查看函数ReqDial\(\)是否正确执行完成。如下调测验证日志供参考:
```
01-01 05:27:27.419 136 408 D 02b01/Rilvendor: [SendCommandLock-(at_support.c:210)] SendCommandLock enter, cmd: ATD17620373527
01-01 05:27:27.419 136 408 D 02b01/Rilvendor: [SendCommandLock-(at_support.c:231)] SendCommandLock() command ATD17620373527
01-01 05:27:27.419 136 408 D 02b01/Rilvendor: [WriteATCommand-(channel.c:115)] WriteATCommand enter, cmd:ATD17620373527
01-01 05:27:27.421 136 187 D 02b01/Rilvendor: [ReadResponse-(channel.c:94)] g_bufferCur :
01-01 05:27:27.421 136 187 D 02b01/Rilvendor: OK
01-01 05:27:27.422 136 187 D 02b01/Rilvendor: [ProcessResponse-(at_support.c:144)] processLine line = OK
01-01 05:27:27.422 136 187 D 02b01/Rilvendor: [ReadResponse-(channel.c:81)] ReadResponse enter
01-01 05:27:27.422 136 187 D 02b01/Rilvendor: [ProcessLastResponse-(channel.c:37)] last data more than one line , FindEndOfLine g_bufferCur:
01-01 05:27:27.422 136 187 E 02b01/Rilvendor: [ProcessLastResponse-(channel.c:39)] g_bufferCur endLine is null
01-01 05:27:27.422 136 187 E 02b01/Rilvendor:^ORIG:1,0
01-01 05:27:27.422 136 408 E 02b01/Rilvendor: [SendCommandLock-(at_support.c:234)] processLine line = ^ORIG:1,0
01-01 05:27:27.422 136 408 E 02b01/Rilvendor: [SendCommandLock-(vendor_report.c:234)] enter to [^ORIG:1,0]:(null)
01-01 05:27:27.422 136 408 E 02b01/Rilvendor: [SendCommandLock-(at_support.c:264)] err = 0, cmd:ADT17620373527
```
## Modem事件上报开发指导<a name="section390mcpsimp"></a>
### 场景介绍<a name="section401mcpsimp"></a>
Modem事件上报是指在厂商库的Modem设备节点读取线程,循环读取到Modem主动上报的消息后,对Modem上报事件进行解析,然后上报给RIL Adapter。
### 接口说明<a name="section191193791518"></a>
Modem事件上报接口。
**表 3** Modem事件上报接口功能介绍
<a name="table407mcpsimp"></a>
<table><thead align="left"><tr id="row413mcpsimp"><th class="cellrowborder" valign="top" width="52%" id="mcps1.2.3.1.1"><p id="p415mcpsimp"><a name="p415mcpsimp"></a><a name="p415mcpsimp"></a>接口名</p>
</th>
<th class="cellrowborder" valign="top" width="48%" id="mcps1.2.3.1.2"><p id="p417mcpsimp"><a name="p417mcpsimp"></a><a name="p417mcpsimp"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="row419mcpsimp"><td class="cellrowborder" valign="top" width="52%" headers="mcps1.2.3.1.1 "><p id="p421mcpsimp"><a name="p421mcpsimp"></a><a name="p421mcpsimp"></a>void OnNotifyOps(const char *s, const char *smsPdu)</p>
</td>
<td class="cellrowborder" valign="top" width="48%" headers="mcps1.2.3.1.2 "><p id="p423mcpsimp"><a name="p423mcpsimp"></a><a name="p423mcpsimp"></a>接口功能:对Modem上报的事件进行分发处理。</p>
<p id="p424mcpsimp"><a name="p424mcpsimp"></a><a name="p424mcpsimp"></a>参数s:AT指令前缀。</p>
<p id="p425mcpsimp"><a name="p425mcpsimp"></a><a name="p425mcpsimp"></a>参数smsPdu:短信PDU信息。</p>
<p id="p426mcpsimp"><a name="p426mcpsimp"></a><a name="p426mcpsimp"></a>返回值:无。</p>
</td>
</tr>
</tbody>
</table>
### 开发步骤<a name="section16394112401512"></a>
1. 在Modem设备节点读取线程g\_reader里调用OnNotifyOps\(\)解析具体的Modem上报事件,判断命令类型,并调用OnXxxReport\(\)把解析得到的各模块事件上报给hril业务层。
```
// 将Modem上报数据解析为对应模块的主动上报事件
void OnNotifyOps(const char *s, const char *smsPdu)
{
int ret = 0;
struct ReportInfo reportInfo = {0};
reportInfo.error = HRIL_ERR_SUCCESS;
reportInfo.type = HRIL_NOTIFICATION;
if (GetRadioState() == HRIL_RADIO_POWER_STATE_UNAVAILABLE) {
return;
}
TELEPHONY_LOGD("enter to [%{public}s]:%{public}s", s, smsPdu);
// 通过AT指令判断主动上报命令类型
if (ReportStrWith(s, "+CRING:") || ReportStrWith(s, "RING") || ReportStrWith(s, "IRING") ||
ReportStrWith(s, "NO CARRIER") || ReportStrWith(s, "+CCWA") || ReportStrWith(s, "^CCALLSTATE") ||
ReportStrWith(s, "^CEND") || ReportStrWith(s, "^CCWA")) {
reportInfo.notifyId = HNOTI_CALL_STATE_UPDATED;
OnCallReport(reportInfo, NULL, 0);
} else if (ReportStrWith(s, "+CMT:")) {
reportInfo.notifyId = HNOTI_SMS_NEW_SMS;
OnSmsReport(reportInfo, (void *)smsPdu, strlen(smsPdu));
}
// 将各模块事件上报给hril业务层
......
}
```
1. hril业务层将上报事件分发给Telephony Service。
```
// 呼叫状态主动上报
int32_t HRilCall::CallStateUpdated(
int32_t slotId, int32_t notifyType, const HRilErrno e, const void *response, size_t responseLen)
{
struct HdfSBuf *dataSbuf = HdfSBufTypedObtain(SBUF_IPC);
if (serviceCallbackNotify_ == nullptr) {
TELEPHONY_LOGE("RilAdapter serviceCallbackNotify_ is null");
HdfSBufRecycle(dataSbuf);
return HDF_FAILURE;
}
// 分发处理
int32_t ret = serviceCallbackNotify_->dispatcher->Dispatch(
serviceCallbackNotify_, HNOTI_CALL_STATE_UPDATED, dataSbuf, nullptr);
if (ret != HDF_SUCCESS) {
HdfSBufRecycle(dataSbuf);
return HDF_FAILURE;
}
HdfSBufRecycle(dataSbuf);
return HDF_SUCCESS;
}
```
### 调测验证<a name="section16999174401516"></a>
1.[hdc\_std工具](subsys-toolchain-hdc-guide.md#section05992022154916)工具连接调试设备,把编译生成的libril\_vendor.z.so库文件通过以下命令推到/system/lib/目录下。
```
hdc_std file send libril_vendor.z.so /system/lib/
```
2. 执行hdc\_std shell sync,hdc\_std shell reboot重启设备。
```
hdc_std shell sync
hdc_std shell reboot
```
3. hdc\_std shell后执行./system/bin/ril\_adapter\_test,输入编号1,根据提示输入电话号码,测试拨打电话功能。
```
hdc_std shell
# ./system/bin/ril_adapter_test
----> Test Enter --------->Call---------------------
1----> RilUnitTest::OnRequestCallDialTest
2----> RilUnitTest:: OnRequestCallHangupTest
3----> RilUnitTest:: OnRequestCallAnswerTest
4----> RilUnitTest::OnRequestCallGetCurrentCallsStatusTest
5----> RilUnitTest::OnRequestRefusedCallTest
1
```
4. 另开一个终端窗口,执行hdc\_std shell hilog,通过日志查看函数OnNotifyOps\(\)是否正确执行完成。如下调测验证日志供参考:
```
01-01 00:08:01.334 546 551 D 02b01/TelRilTest: [DialResponse-(tel_ril_call.cpp:280)] DialResponse --> radioResponseInfo->serial:2, radioResponseInfo->error:0
01-01 00:08:01.334 546 557 D 02b01/TelRilTest: [ProcessEvent-(tel_ril_test.cpp:1262)] TelRilTest::DemoHandler::ProcessEvent --> eventId:101
01-01 00:08:01.334 143 512 D 02b01/Rilvendor: [ReadResponse-(channel.c:93)] g_bufferCur :
01-01 00:08:01.334 143 512 D 02b01/Rilvendor: ^ORIG:1,0
01-01 00:08:01.334 143 512 D 02b01/Rilvendor: [ReadResponse-(channel.c:108)] AT< ^ORIG:1,0
01-01 00:08:01.334 143 512 D 02b01/Rilvendor: [ProcessResponse-(at_support.c:137)] processLine line = ^ORIG:1,0
01-01 00:08:01.334 143 512 D 02b01/Rilvendor: [OnNotifyOps-(vendor_report.c:126)] enter to [^ORIG:1,0]:(null)
01-01 00:08:01.335 143 512 W 02b01/Rilvendor: [OnNotifyOps-(vendor_report.c:167)] enter to is unrecognized command: ^ORIG:1,0
01-01 00:08:01.335 143 512 D 02b01/Rilvendor: [ProcessLastResponse-(channel.c:37)] last data more than one line , FindEndOfLine g_bufferCur:
01-01 00:08:01.335 143 512 E 02b01/Rilvendor: [ProcessLastResponse-(channel.c:39)] g_bufferCur endLine is null
01-01 00:08:01.336 143 512 D 02b01/Rilvendor: [ReadResponse-(channel.c:93)] g_bufferCur :
01-01 00:08:01.336 143 512 D 02b01/Rilvendor: ^CCALLSTATE: 1,0,1
01-01 00:08:01.336 143 512 D 02b01/Rilvendor: [ReadResponse-(channel.c:108)] AT< ^CCALLSTATE: 1,0,1
01-01 00:08:01.336 143 512 D 02b01/Rilvendor: [ProcessResponse-(at_support.c:137)] processLine line = ^CCALLSTATE: 1,0,1
01-01 00:08:01.336 143 512 D 02b01/Rilvendor: [OnNotifyOps-(vendor_report.c:126)] enter to [^CCALLSTATE: 1,0,1]:(null)
01-01 00:08:01.336 546 551 D 02b01/CoreService: [OnRemoteRequest-(tel_ril_manager.cpp:80)] RilManager OnRemoteRequest code:1001
01-01 00:08:01.336 546 551 D 02b01/CoreService: [NotifyObserver-(observer_handler.cpp:76)] handler->SendEvent:8
```
### 开发实例<a name="section33444350167"></a>
- **去电开发实例**
去电的调用流程示例如下图所示:
**图 1** 去电调用时序图<a name="fig494mcpsimp"></a>
![](figure/去电调用时序图.png "去电调用时序图")
当应用触发去电动作时,RIL Adapter会接收到拨打电话的请求,hril调用对应的拨打电话的接口ReqDial\(\)。在该接口里会把电话服务传过来的数据封装为对应的AT指令发送到Modem,Modem执行完拨号命令后通过OnCallReport\(\)接口把响应结果上报给RIL Adapter。
```
// call模块回调函数指针
static const HRilCallReq g_callReqOps = {
.GetCallList = ReqGetCallList, // 获取呼叫列表接口
.Dial = ReqDial, // 拨打电话接口
.Hangup = ReqHangup, // 挂断电话接口
.Reject = ReqReject, // 拒接来电接口
.Answer = ReqAnswer, // 接听来电接口
};
// 系统业务请求接口定义
HRilOps g_hrilOps = {
.callOps = &g_callReqOps, // 定义通话业务请求接口
.simOps = &g_simReqOps, // 定义SIM卡业务请求接口
.smsOps = &g_smsReqOps, // 定义短彩信业务请求接口
.networkOps = &g_networkReqOps, // 定义蜂窝数据业务请求接口
.dataOps = &g_dataReqOps, // 定义搜网业务请求接口
.modemOps = &g_modemReqOps, // 定义Modem业务请求接口
};
// 拨号请求接口实现
void ReqDial(ReqDataInfo *requestInfo, const void *data, size_t dataLen)
{
HRilDial *pDial = NULL;
char cmd[MAX_BUFF_SIZE] = {0};
const char *clir = NULL;
int ret;
int err = HRIL_ERR_SUCCESS;
struct ReportInfo reportInfo = {};
ResponseInfo *pResponse = NULL;
if (data == NULL) {
TELEPHONY_LOGE("data is null!!!");
err = HRIL_ERR_INVALID_PARAMETER;
reportInfo = CreateReportInfo(requestInfo, err, HRIL_RESPONSE, 0);
OnCallReport(reportInfo, NULL, 0);
return;
}
pDial = (HRilDial *)data;
switch (pDial->clir) {
case CALL_CLIR_INVOCATION:
clir = "I";
break; /* invocation */
case CALL_CLIR_SUPPRESSION:
clir = "i";
break; /* suppression */
case CALL_CLIR_SUBSCRIPTION_DEFUALT:
default:
clir = "";
break; /* subscription default */
}
(void)sprintf_s(cmd, MAX_BUFF_SIZE, "ATD%s%s;", pDial->address, clir);
ret = SendCommandLock(cmd, NULL, 0, &pResponse); // 发送AT命令
if (ret != 0) {
err = HRIL_ERR_CMD_SEND_FAILURE;
TELEPHONY_LOGE("ATD send failed");
} else {
if (pResponse != NULL && pResponse->success == 0) {
TELEPHONY_LOGE("ReqDial return ERROR");
err = HRIL_ERR_CMD_NO_CARRIER;
}
}
reportInfo = CreateReportInfo(requestInfo, err, HRIL_RESPONSE, 0);
OnCallReport(reportInfo, NULL, 0); // 调用通话相关业务回调函数
FreeResponseInfo(pResponse);
}
```
- **来电开发实例**
来电的调用流程示例如下图所示:
**图 2** 来电调用时序图<a name="fig556mcpsimp"></a>
![](figure/zh-cn_image_0000001214727595.png)
Modem设备节点读取线程g\_reader会循环读取Modem上报的消息,当Modem接收到来电时会主动上报来电相关的信息;
当该线程通过调用OnNotifyOps\(\)解析到Modem上报的数据是以"+CRING"、"RING"等字符开头时,表示有来电事件,然后通过OnCallReport\(reportInfo, NULL, 0\)上报给RIL Adapter完成来电事件上报。
```
// 将Modem上报数据解析为对应模块的主动上报事件
void OnNotifyOps(const char *s, const char *smsPdu)
{
int ret = 0;
struct ReportInfo reportInfo = {0};
reportInfo.error = HRIL_ERR_SUCCESS;
reportInfo.type = HRIL_NOTIFICATION;
if (GetRadioState() == HRIL_RADIO_POWER_STATE_UNAVAILABLE) {
return;
}
TELEPHONY_LOGD("enter to [%{public}s]:%{public}s", s, smsPdu);
// 通过AT指令判断主动上报命令类型
if (ReportStrWith(s, "+CRING:") || ReportStrWith(s, "RING") || ReportStrWith(s, "IRING") ||
ReportStrWith(s, "NO CARRIER") || ReportStrWith(s, "+CCWA") || ReportStrWith(s, "^CCALLSTATE") ||
ReportStrWith(s, "^CEND") || ReportStrWith(s, "^CCWA")) {
reportInfo.notifyId = HNOTI_CALL_STATE_UPDATED;
OnCallReport(reportInfo, NULL, 0); // 调用通话相关业务回调函数
} else if (ReportStrWith(s, "+CMT:")) {
reportInfo.notifyId = HNOTI_SMS_NEW_SMS;
OnSmsReport(reportInfo, (void *)smsPdu, strlen(smsPdu));
}
// add your codes
......
}
```
## Modem厂商库集成指导<a name="section590mcpsimp"></a>
### 编译设置<a name="section592mcpsimp"></a>
Modem厂商库可通过BUILD.gn编译为一个动态库,在RIL Adapter启动时用dlopen方式加载到系统中,然后执行厂商库的初始化操作(参见[Modem厂商库初始化开发指导](#section211mcpsimp)),BUILD.gn编写示例如下:
```
import("//build/ohos.gni")
RIL_ADAPTER = "//base/telephony"
ohos_shared_library("ril_vendor") { // Modem厂商库名称
sources = [ // 编译源文件
"at_call.c",
"at_data.c",
"xxx.c",
]
include_dirs = [ // 包含的头文件目录
"$RIL_ADAPTER/ril_adapter/vendor/include",
"$RIL_ADAPTER/ril_adapter/interfaces/innerkits",
"include",
]
deps = [ // 内部依赖
"//drivers/adapter/uhdf2/osal:libhdf_utils",
"//base/telephony/core_service/utils:libtelephony_common",
]
external_deps = [ "hilog:libhilog" ] // 外部依赖
part_name = "ril_adapter" // 部件名称
subsystem_name = "telephony" // 子系统名称
}
```
### 调测验证<a name="section620mcpsimp"></a>
1. 编译代码。
2. 查看/out/ohos-arm-release/telephony/ril\_adapter目录是否存在libril\_vendor.z.so,存在证明集成成功。否则检查代码,重新编译验证。
# 电话服务概述<a name="ZH-CN_TOPIC_0000001164469232"></a>
- [概述](#section184mcpsimp)
- [基本概念](#section187mcpsimp)
- [运作机制](#section194mcpsimp)
- [约束与限制](#section205mcpsimp)
## 概述<a name="section184mcpsimp"></a>
本指南简要介绍了Modem厂商库的集成、初始化、业务请求响应和事件上报的方法,并通过通话业务的具体开发实例呈现厂商库的适配开发过程,供不同Modem芯片的开发者参考,从而帮助其高效地实现电话相关业务功能的开发。
## 基本概念<a name="section187mcpsimp"></a>
- Telephony Service:电话服务子系统核心服务层。主要功能是初始化RIL管理类、SIM卡和搜网模块;获取RIL Adapter服务,通过注册回调服务,实现与RIL Adapter的通信功能;通过发布订阅,来实现与通话、短信等功能模块之间的通信。
- RIL Adapter:电话服务子系统RIL适配层。该层主要包括厂商库加载,业务接口实现。用于屏蔽不同Modem厂商的硬件差异,为上层提供统一的接口,通过注册HDF服务与上层接口通信。
- HDF:硬件驱动框架(Hardware Driver Foundation)。用于提供统一外设访问能力和驱动开发、管理框架。
- hdc\_std:OpenHarmony设备连接器(OpenHarmony Device Connector)。是OpenHarmony为开发人员提供的用于设备连接调试的命令行工具。
## 运作机制<a name="section194mcpsimp"></a>
**图 1** RIL Adapter模块架构图<a name="fig196mcpsimp"></a>
![](figure/ril-adapter模块架构图.png)
RIL Adapter模块架构如图1所示,内部主要分为hril\_hdf、hril和vendorlib三层。
- hril\_hdf:RIL Adapter的唯一入口,主要负责Modem厂商库的加载。其中,modem\_adapter实现了单一固件对不同Modem的适配。
其实现机制为:在加载Modem厂商库之前,从kernel获取Modem的设备型号,根据此型号加载对应的Modem厂商库。
- hril:OpenHarmony无线接口层(OpenHarmony Radio Interface Layer)。与Telephony Service交互的接口实现部分,实现了Telephony Service和vendorlib通信的功能,包括SIM卡、搜网、蜂窝数据、蜂窝通话和短彩信等。
- vendorlib:Modem厂商库文件。不同的Modem厂商根据RIL Adapter提供的标准化接口或ID,进行Modem厂商库的开发(vendorlib由Modem厂商提供)。
hril\_hdf执行后,将动态加载vendorlib,vendorlib可以从hril\_hdf中获取处理响应和上报的函数指针,该过程结束后,hril\_hdf才可通过vendorlib与Modem通信。
## 约束与限制<a name="section205mcpsimp"></a>
**规格限制:**
需要设备厂商至少支持一个Modem,如果不支持任何Modem,无需实现厂商库接口。
# 电话服务<a name="ZH-CN_TOPIC_0000001111321920"></a>
- **[电话服务概述](subsys-tel-overview.md)**
- **[电话服务开发指导](subsys-tel-guide.md)**
# 子系统<a name="ZH-CN_TOPIC_0000001135844124"></a> # 子系统<a name="ZH-CN_TOPIC_0000001135844124"></a>
- **[编译构建](subsys-build.md)** - **[编译构建](subsys-build.md)**
- **[分布式远程启动](subsys-remote-start.md)** - **[分布式远程启动](subsys-remote-start.md)**
- **[图形图像](subsys-graphics.md)** - **[图形图像](subsys-graphics.md)**
- **[媒体](subsys-multimedia.md)** - **[媒体](subsys-multimedia.md)**
- **[公共基础](subsys-utils.md)** - **[公共基础](subsys-utils.md)**
- **[AI框架](subsys-aiframework.md)** - **[AI框架](subsys-aiframework.md)**
- **[Sensor服务](subsys-sensor.md)** - **[Sensor服务](subsys-sensor.md)**
- **[用户程序框架](subsys-application-framework.md)** - **[用户程序框架](subsys-application-framework.md)**
- **[OTA升级](subsys-ota-guide.md)** - **[OTA升级](subsys-ota-guide.md)**
- **[电话服务](subsys-tel.md)**
- **[安全](subsys-security.md)** - **[安全](subsys-security.md)**
- **[启动恢复](subsys-boot.md)** - **[启动恢复](subsys-boot.md)**
- **[测试用例开发指导](subsys-testguide-test.md)** - **[测试用例开发指导](subsys-testguide-test.md)**
- **[DFX](subsys-dfx.md)** - **[DFX](subsys-dfx.md)**
- **[研发工具链](subsys-toolchain.md)** - **[研发工具链](subsys-toolchain.md)**
- **[XTS认证用例开发指导](subsys-xts-guide.md)** - **[XTS认证用例开发指导](subsys-xts-guide.md)**
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
## **文档目录结构**<a name="section1976124516374"></a> ## **文档目录结构**<a name="section1976124516374"></a>
- [Openharmony概述](OpenHarmony-Overview_zh.md) - [Openharmony概述](OpenHarmony-Overview_zh.md)
- 轻量和小型系统开发指导(参考内存<128MB) - 设备开发
- 设备开发 - 轻量和小型系统开发指导(参考内存<128MB)
- overview:[设备开发导读](device-dev/Readme-CN.md) - overview:[设备开发导读](device-dev/Readme-CN.md)
- quick-start:[快速入门](device-dev/quick-start/Readme-CN.md)(搭建环境、获取源码、编译、烧录等) - quick-start:[快速入门](device-dev/quick-start/Readme-CN.md)(搭建环境、获取源码、编译、烧录等)
- Basic Capability:开发基础能力 - Basic Capability:开发基础能力
...@@ -31,8 +31,7 @@ ...@@ -31,8 +31,7 @@
- [HPM Bundle开发指南](device-dev/bundles/bundles-guide.md) - [HPM Bundle开发指南](device-dev/bundles/bundles-guide.md)
- [HPM Bundle开发示例](device-dev/bundles/bundles-demo.md) - [HPM Bundle开发示例](device-dev/bundles/bundles-demo.md)
- 标准系统开发指导(参考内存≥128MB) - 标准系统开发指导(参考内存≥128MB)
- 设备开发
- overview:[设备开发导读](device-dev/Readme-CN.md) - overview:[设备开发导读](device-dev/Readme-CN.md)
- quick-start:[快速入门](device-dev/quick-start/quickstart-standard.md)(搭建环境、获取源码、编译、烧录等) - quick-start:[快速入门](device-dev/quick-start/quickstart-standard.md)(搭建环境、获取源码、编译、烧录等)
- Basic Capability:开发基础能力 - Basic Capability:开发基础能力
...@@ -54,6 +53,7 @@ ...@@ -54,6 +53,7 @@
- [HPM Bundle开发规范](device-dev/bundles/oem_bundle_standard_des.md) - [HPM Bundle开发规范](device-dev/bundles/oem_bundle_standard_des.md)
- [HPM Bundle开发指南](device-dev/bundles/bundles-guide.md) - [HPM Bundle开发指南](device-dev/bundles/bundles-guide.md)
- [HPM Bundle开发示例](device-dev/bundles/bundles-demo.md) - [HPM Bundle开发示例](device-dev/bundles/bundles-demo.md)
- [常见问题](device-dev/faqs/Readme-CN.md)
- 应用开发 - 应用开发
...@@ -63,7 +63,6 @@ ...@@ -63,7 +63,6 @@
- media:[媒体](application-dev/media/Readme-CN.md) - media:[媒体](application-dev/media/Readme-CN.md)
- connectivity:[网络与连接](application-dev/connectivity/Readme-CN.md) - connectivity:[网络与连接](application-dev/connectivity/Readme-CN.md)
- js-reference:[JS参考规范](application-dev/js-reference/Readme-CN.md) - js-reference:[JS参考规范](application-dev/js-reference/Readme-CN.md)
- 许可证及版权信息检查工具:[开源合规审查工具](https://gitee.com/openharmony-sig/tools_oat) - 许可证及版权信息检查工具:[开源合规审查工具](https://gitee.com/openharmony-sig/tools_oat)
- glossary:[术语](device-dev/glossary/glossary.md) - glossary:[术语](device-dev/glossary/glossary.md)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册