From b7c808904071f41faa976c68d183f82a3defdc59 Mon Sep 17 00:00:00 2001 From: wangboyi Date: Thu, 8 Jun 2023 08:11:47 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9hdf=5Fmd=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangboyi --- en/contribute/OpenHarmony-hdf-coding-guide.md | 2 +- .../contribute/OpenHarmony-hdf-coding-guide.md | 2 +- ...261\345\212\250\346\250\241\345\236\213.png" | Bin 0 -> 21101 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 "zh-cn/contribute/figures/HDF\351\251\261\345\212\250\346\250\241\345\236\213.png" diff --git a/en/contribute/OpenHarmony-hdf-coding-guide.md b/en/contribute/OpenHarmony-hdf-coding-guide.md index 276910b4a2..7d38d9f192 100644 --- a/en/contribute/OpenHarmony-hdf-coding-guide.md +++ b/en/contribute/OpenHarmony-hdf-coding-guide.md @@ -190,7 +190,7 @@ root { [Description] The HDF places the same type of devices in the same host. You can develop and deploy the driver functionalities of the host by layer, so that one driver has multiple nodes. The following figure shows the HDF driver model. -![hdf-driver-model.png](../device-dev/driver/figures/hdf-driver-model.png) +![hdf-driver-model.png](figures/hdf-driver-model.png) Place devices of the same type in the same host. When adding a device, check whether the host of the same type already exists. If such a host already exists, configure the device in the host. Do not configure the same host again. A device belongs to only one driver. Therefore, do not configure the same device in different hosts. diff --git a/zh-cn/contribute/OpenHarmony-hdf-coding-guide.md b/zh-cn/contribute/OpenHarmony-hdf-coding-guide.md index 1e41a3fc45..453bc6052e 100755 --- a/zh-cn/contribute/OpenHarmony-hdf-coding-guide.md +++ b/zh-cn/contribute/OpenHarmony-hdf-coding-guide.md @@ -190,7 +190,7 @@ root { 【说明】HDF框架将一类设备驱动放在同一个Host里面,开发者也可以将Host中的驱动功能分层独立开发和部署,支持一个驱动多个Node,HDF驱动模型如下图所示: -![HDF驱动模型.png](../device-dev/driver/figures/HDF驱动模型.png) +![HDF驱动模型.png](figures/HDF驱动模型.png) 开发者应当将同一类的设备放在同一个Host里面,在新增设备时,检查是否已经存在同类型的Host。如果已存在Host,则将Device配置在此Host中,禁止重复配置Host。一个驱动设备应该只属于一类驱动类型,因此也禁止将同一个Device配置在不同Host当中。 diff --git "a/zh-cn/contribute/figures/HDF\351\251\261\345\212\250\346\250\241\345\236\213.png" "b/zh-cn/contribute/figures/HDF\351\251\261\345\212\250\346\250\241\345\236\213.png" new file mode 100644 index 0000000000000000000000000000000000000000..f2a5855dfeea0eaa8e4db38323b25858ef6a1e09 GIT binary patch literal 21101 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 xMWQ#>(ax4$88