From fa0f2bd77ee9b2e27b9299308692c4337b985e2e Mon Sep 17 00:00:00 2001 From: duanxichao Date: Thu, 24 Jun 2021 21:14:58 +0800 Subject: [PATCH 1/6] =?UTF-8?q?update=20=E5=AF=BC=E5=85=A5OpenHarmony?= =?UTF-8?q?=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: duanxichao --- en/device-dev/driver/driver-development.md | 2 +- en/device-dev/driver/sdiousage-example.md | 16 +-- en/device-dev/driver/sdiousage-guidelines.md | 72 ++++------ .../preparing-the-ubuntu-build-environment.md | 104 ++------------ .../setting-up-the-environment-2.md | 39 +----- .../setting-up-the-environment-4.md | 60 ++------ .../quick-start/setting-up-the-environment.md | 2 +- .../quick-start/ubuntu-build-environment.md | 48 +------ .../application-dev/application-dev-guide.md | 10 ++ ...77\347\224\250\345\256\236\344\276\213.md" | 16 +-- ...77\347\224\250\346\214\207\345\257\274.md" | 66 ++++----- ...77\347\224\250\346\214\207\345\257\274.md" | 2 +- ...61\345\212\250\345\274\200\345\217\221.md" | 2 +- ...57\345\242\203\345\207\206\345\244\207.md" | 2 +- ...\345\242\203\345\207\206\345\244\207-9.md" | 10 +- ...57\345\242\203\345\207\206\345\244\207.md" | 10 +- .../figures/zh-cn_image_0000001122419072.png | Bin 0 -> 2267 bytes .../figures/zh-cn_image_0000001168817327.png | Bin 0 -> 96467 bytes ...21\346\235\277\347\216\257\345\242\203.md" | 2 +- .../quick-start/\345\257\274\350\257\273.md" | 128 ++++++++++++++---- zh-cn/readme.md | 124 ++++++++--------- 21 files changed, 284 insertions(+), 431 deletions(-) create mode 100644 zh-cn/application-dev/application-dev-guide.md create mode 100644 zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001122419072.png create mode 100644 zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001168817327.png diff --git a/en/device-dev/driver/driver-development.md b/en/device-dev/driver/driver-development.md index 8cbefc7cbb0..f9c14ec11f0 100644 --- a/en/device-dev/driver/driver-development.md +++ b/en/device-dev/driver/driver-development.md @@ -71,7 +71,7 @@ Driver development based on the HDF consists of two parts: driver implementation - Use the **Makefile** template provided by the HDF to compile the driver code. ``` - include $(LITEOSTOPDIR)/../../drivers/adapter/khdf/liteos/lite.mk # (Mandatory) Import the predefined content of the HDF. + include $(LITEOSTOPDIR)/../../drivers/adapter/lite/khdf/lite.mk # (Mandatory) Import the predefined content of the HDF. MODULE_NAME := # Generated result file LOCAL_INCLUDE: = # Header file directory of the driver LOCAL_SRCS : = # Source code file of the driver diff --git a/en/device-dev/driver/sdiousage-example.md b/en/device-dev/driver/sdiousage-example.md index c4d870306bf..558f4cf1912 100644 --- a/en/device-dev/driver/sdiousage-example.md +++ b/en/device-dev/driver/sdiousage-example.md @@ -27,12 +27,12 @@ void SdioTestSample(void) int32_t ret; DevHandle handle = NULL; uint8_t data[TEST_DATA_LEN] = {0}; - int16_t busNum = 1; + struct SdioFunctionConfig config = {1, 0x123, 0x456}; uint8_t val; uint32_t addr; /* Open an SDIO controller whose bus number is 1. */ - handle = SdioOpen(busNum); + handle = SdioOpen(1, &config); if (handle == NULL) { HDF_LOGE("SdioOpen: failed!\n"); return; @@ -59,25 +59,25 @@ void SdioTestSample(void) } /* Read 3-byte data from the incremental address of an SDIO device. */ addr = TEST_FBR_BASE_ADDR * TEST_FUNC_NUM + TEST_ADDR_OFFSET; - ret = SdioReadBytes(handle, data, addr, TEST_DATA_LEN, 0); + ret = SdioReadBytes(handle, data, addr, TEST_DATA_LEN); if (ret != 0) { HDF_LOGE("SdioReadBytes: failed, ret %d\n", ret); goto COMM_ERR; } /* Write 3-byte data into the incremental address of an SDIO device. */ - ret = SdioWriteBytes(handle, data, addr, TEST_DATA_LEN, 0); + ret = SdioWriteBytes(handle, data, addr, TEST_DATA_LEN); if (ret != 0) { HDF_LOGE("SdioWriteBytes: failed, ret %d\n", ret); goto COMM_ERR; } /* Read 1-byte data from the SDIO device. */ - ret = SdioReadBytes(handle, &val, addr, 1, 0); + ret = SdioReadBytes(handle, &val, addr, 1); if (ret != 0) { HDF_LOGE("SdioReadBytes: failed, ret %d\n", ret); goto COMM_ERR; } /* Write 1-byte data into the SDIO device. */ - ret = SdioWriteBytes(handle, &val, addr, 1, 0); + ret = SdioWriteBytes(handle, &val, addr, 1); if (ret != 0) { HDF_LOGE("SdioWriteBytes: failed, ret %d\n", ret); goto COMM_ERR; @@ -96,13 +96,13 @@ void SdioTestSample(void) } /* Read 1-byte data from SDIO function 0. */ addr = 0x02; - ret = SdioReadBytesFromFunc0(handle, &val, addr, 1, 0); + ret = SdioReadBytesFromFunc0(handle, &val, addr, 1); if (ret != 0) { HDF_LOGE("SdioReadBytesFromFunc0: failed, ret %d\n", ret); goto COMM_ERR; } /* Write 1-byte data into SDIO function 0. */ - ret = SdioWriteBytesToFunc0(handle, &val, addr, 1, 0); + ret = SdioWriteBytesToFunc0(handle, &val, addr, 1); if (ret != 0) { HDF_LOGE("SdioWriteBytesToFunc0: failed, ret %d\n", ret); goto COMM_ERR; diff --git a/en/device-dev/driver/sdiousage-guidelines.md b/en/device-dev/driver/sdiousage-guidelines.md index 43f5b134b51..402cf305ebb 100644 --- a/en/device-dev/driver/sdiousage-guidelines.md +++ b/en/device-dev/driver/sdiousage-guidelines.md @@ -24,7 +24,7 @@ Before performing SDIO communication, obtain the device handle of an SDIO controller by calling **SdioOpen**. This function returns the device handle of the SDIO controller with a specified bus number. -DevHandle SdioOpen\(int16\_t busNum\); +DevHandle SdioOpen\(int16\_t mmcBusNum, struct SdioFunctionConfig \*config\); **Table 1** Parameters and return values of SdioOpen @@ -35,9 +35,14 @@ DevHandle SdioOpen\(int16\_t busNum\); -

busNum

+

mmcBusNum

-

SDIO bus number.

+

Bus number.

+ + +

config

+ +

SDIO functionality configurations.

Return Value

@@ -62,9 +67,12 @@ The following example shows how to open an SDIO controller. ``` DevHandle handle = NULL; -int16_t busNum = 1; +struct SdioFunctionConfig config; +config.funcNr = 1; +config.vendorId = 0x123; +config.deviceId = 0x456; /* Open an SDIO controller whose bus number is 1. */ -handle = SdioOpen(busNum); +handle = SdioOpen(1, &config); if (handle == NULL) { HDF_LOGE("SdioOpen: failed!\n"); } @@ -87,7 +95,7 @@ void SdioClaimHost\(DevHandle handle\);

handle

-

Device handle of an SDIO controller

+

Device handle of an SDIO controller.

@@ -218,7 +226,7 @@ if (ret != 0) { The corresponding function is as follows: -int32\_t SdioWriteBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); +int32\_t SdioWriteBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); **Table 5** Parameters and return values of SdioWriteBytes @@ -249,11 +257,6 @@ int32\_t SdioWriteBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint

Length of the data to write.

-

timeOut

- -

Timeout duration for writing data, in milliseconds. If the value is 0, the default value is used.

- -

Return Value

Description

@@ -279,7 +282,7 @@ int32_t ret; uint8_t wbuff[] = {1,2,3,4,5}; uint32_t addr = 0x100 + 0x09; /* Incrementally write 5-byte data into the start address 0x109 of the SDIO device. */ -ret = SdioWriteBytes(handle, wbuff, addr, sizeof(wbuff) / sizeof(wbuff[0]), 0); +ret = SdioWriteBytes(handle, wbuff, addr, sizeof(wbuff) / sizeof(wbuff[0])); if (ret != 0) { HDF_LOGE("SdioWriteBytes: failed, ret %d\n", ret); } @@ -289,7 +292,7 @@ if (ret != 0) { The corresponding function is as follows: -int32\_t SdioReadBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); +int32\_t SdioReadBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); **Table 6** Parameters and return values of SdioReadBytes @@ -320,11 +323,6 @@ int32\_t SdioReadBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint3

Length of the data to read.

-

timeOut

- -

Timeout duration for reading data, in milliseconds. If the value is 0, the default value is used.

- -

Return Value

Description

@@ -350,7 +348,7 @@ int32_t ret; uint8_t rbuff[5] = {0}; uint32_t addr = 0x100 + 0x09; /* Incrementally read 5-byte data from the start address 0x109 of the SDIO device. */ -ret = SdioReadBytes(handle, rbuff, addr, 5, 0); +ret = SdioReadBytes(handle, rbuff, addr, 5); if (ret != 0) { HDF_LOGE("SdioReadBytes: failed, ret %d\n", ret); } @@ -360,7 +358,7 @@ if (ret != 0) { The corresponding function is as follows: - int32\_t SdioWriteBytesToFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); + int32\_t SdioWriteBytesToFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t scatterLen\); **Table 7** Parameters and return values of SdioWriteBytesToFixedAddr @@ -391,9 +389,9 @@ if (ret != 0) {

Length of the data to write.

-

timeOut

+

scatterLen

-

Timeout duration for writing data, in milliseconds. If the value is 0, the default value is used.

+

Length of the scatter list. If the value is not 0, the data is of the scatter list type.

Return Value

@@ -431,7 +429,7 @@ if (ret != 0) { The corresponding function is as follows: - int32\_t SdioReadBytesFromFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); + int32\_t SdioReadBytesFromFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t scatterLen\); **Table 8** Parameters and return values of SdioReadBytesFromFixedAddr @@ -462,9 +460,9 @@ if (ret != 0) {

Length of the data to read.

-

timeOut

+

scatterLen

-

Timeout duration for reading data, in milliseconds. If the value is 0, the default value is used.

+

Length of the scatter list. If the value is not 0, the data is of the scatter list type.

Return Value

@@ -503,7 +501,7 @@ if (ret != 0) { Currently, only 1-byte data can be written. The corresponding function is as follows: -int32\_t SdioWriteBytesToFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); +int32\_t SdioWriteBytesToFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); **Table 9** Parameters and return values of SdioWriteBytesToFunc0 @@ -534,11 +532,6 @@ int32\_t SdioWriteBytesToFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t add

Length of the data to write.

-

timeOut

- -

Timeout duration for writing data, in milliseconds. If the value is 0, the default value is used.

- -

Return Value

Description

@@ -563,7 +556,7 @@ The following example shows how to write a given length of data into the address int32_t ret; uint8_t wbuff = 1; /* Write 1-byte data into the address 0x2 of SDIO function 0. */ -ret = SdioWriteBytesToFunc0(handle, &wbuff, 0x2, 1, 0); +ret = SdioWriteBytesToFunc0(handle, &wbuff, 0x2, 1); if (ret != 0) { HDF_LOGE("SdioWriteBytesToFunc0: failed, ret %d\n", ret); } @@ -573,7 +566,7 @@ if (ret != 0) { Currently, only 1-byte data can be read. The corresponding function is as follows: -int32\_t SdioReadBytesFromFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); +int32\_t SdioReadBytesFromFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); **Table 10** Parameters and return values of SdioReadBytesFromFunc0 @@ -604,11 +597,6 @@ int32\_t SdioReadBytesFromFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t ad

Length of the data to read.

-

timeOut

- -

Timeout duration for reading data, in milliseconds. If the value is 0, the default value is used.

- -

Return Value

Description

@@ -633,7 +621,7 @@ The following example shows how to read a given length of data from the address int32_t ret; uint8_t rbuff; /* Read 1-byte data from the address 0x2 of SDIO function 0. */ -ret = SdioReadBytesFromFunc0(handle, &rbuff, 0x2, 1, 0); +ret = SdioReadBytesFromFunc0(handle, &rbuff, 0x2, 1); if (ret != 0) { HDF_LOGE("SdioReadBytesFromFunc0: failed, ret %d\n", ret); } @@ -754,7 +742,7 @@ void SdioReleaseHost\(DevHandle handle\);

handle

-

Device handle of an SDIO controller

+

Device handle of an SDIO controller.

@@ -785,7 +773,7 @@ This function releases the resources requested.

handle

-

Device handle of an SDIO controller

+

Device handle of an SDIO controller.

diff --git a/en/device-dev/quick-start/preparing-the-ubuntu-build-environment.md b/en/device-dev/quick-start/preparing-the-ubuntu-build-environment.md index a3f62435509..e1f0774daad 100644 --- a/en/device-dev/quick-start/preparing-the-ubuntu-build-environment.md +++ b/en/device-dev/quick-start/preparing-the-ubuntu-build-environment.md @@ -1,43 +1,39 @@ # Preparing the Ubuntu Build Environment -- [Setting up an Ubuntu Build Environment Using a Docker Environment](#section1643363843714) - - [Obtaining System Source Code](#section58448331029) +- [Method 1: Setting up an Ubuntu Build Environment Using a Docker Environment](#section1643363843714) + - [Obtaining Standard-System Source Code](#section58448331029) - [Installing and Using the Docker Environment](#section22916211916) -- [Setting up an Ubuntu Build Environment Using an Installation Package](#section25961010189) +- [Method 2: Setting up an Ubuntu Build Environment Using an Installation Package](#section25961010189) - [Installing Dependent Tools](#section109262032104819) - [Obtaining Standard-System Source Code](#section6325556113718) - [Obtaining prebuilts](#section16453104219209) - - [Configuring the Node.js Environment and Obtaining the Node\_modules Dependency Package](#section133741330192119) - - [Installing the hc-gen Tool](#section149281248182116) You can use either the Docker environment or installation package provided by OpenHarmony to set up an Ubuntu build environment. This section describes the two methods. -## Setting up an Ubuntu Build Environment Using a Docker Environment +## Method 1: Setting up an Ubuntu Build Environment Using a Docker Environment The standard OpenHarmony system provides a Docker environment which encapsulates build tools. To use the Docker environment, perform the following steps: -1. Obtain the system source code. +1. Obtain the standard-system source code. 2. Install and use the Docker environment. -### Obtaining System Source Code +### Obtaining Standard-System Source Code -For details, see [Source Code Acquisition](../get-code/source-code-acquisition.md). +Obtain the [standard-system source code](https://repo.huaweicloud.com/harmonyos/os/2.0/code-2.0-canary.tar.gz). The obtained source code is the static code. If you want to obtain the latest source code from Gitee, use [repo](../get-code/source-code-acquisition.md). ### Installing and Using the Docker Environment For details, see [Installing and Using Docker](../get-code/tool-acquisition.md). -## Setting up an Ubuntu Build Environment Using an Installation Package +## Method 2: Setting up an Ubuntu Build Environment Using an Installation Package The procedure is as follows: 1. Install dependent tools. -2. Obtain the system source code. +2. Obtain the standard-system source code. 3. Obtain prebuilts. -4. Configure the Node.js environment and obtain the Node\_modules dependency package. -5. Install the hc-gen tool. ### Installing Dependent Tools @@ -52,7 +48,7 @@ sudo apt-get install binutils git-core git-lfs gnupg flex bison gperf build-esse ### Obtaining Standard-System Source Code -For details, see [Source Code Acquisition](../get-code/source-code-acquisition.md). +Obtain the [standard-system source code](https://repo.huaweicloud.com/harmonyos/os/2.0/code-2.0-canary.tar.gz). The obtained source code is the static code. If you want to obtain the latest source code from Gitee, use [repo](../get-code/source-code-acquisition.md). ### Obtaining prebuilts @@ -62,86 +58,12 @@ For details, see [Source Code Acquisition](../get-code/source-code-acquisition. cd OpenHarmony ``` -2. Download the script. +2. Execute the following script: ``` - curl https://gitee.com/landwind/script-tools/raw/master/Shell/OpenHarmony/OpenHarmony_2.0_canary_prebuilts_download.sh >./prebuilts_download.sh + build/prebuilts_download.sh ``` -3. Download and decompress the prebuilts package in a specified directory. - - ``` - bash ./prebuilts_download.sh - ``` - - By default, binary files are stored in the **OpenHarmony\_2.0\_canary\_prebuilts** directory, which is in the same directory as **OpenHarmony**. To change the storage path, change the value of **bin\_dir** in **prebuilts\_download.sh**. - -4. Return to the previous directory. - - ``` - cd - - ``` - - -### Configuring the Node.js Environment and Obtaining the Node\_modules Dependency Package - -To build the JS framework, you need to download and configure Node.js on a Linux server. The procedure is as follows \(the **OpenHarmony** directory in the following steps is the root directory of the current project and is configurable\): - -1. Download Node.js on a Linux server. - - ``` - mkdir -p OpenHarmony/prebuilts/build-tools/common/nodejs # Create the nodejs directory. - cd OpenHarmony/prebuilts/build-tools/common/nodejs # Go to the nodejs directory. - wget --no-check-certificate https://nodejs.org/download/release/v12.18.4/node-v12.18.4-linux-x64.tar.gz # Download the Node.js package. - tar -zxvf node-v12.18.4-linux-x64.tar.gz # Decompress the Node.js package. - cd - # Return to the previous directory. - ``` - -2. Configure the Node.js variable and download the **node\_modules** package. - - ``` - cd OpenHarmony/third_party/jsframework # Go to the jsframework directory. - export PATH=../../prebuilts/build-tools/common/nodejs/node-v12.18.4-linux-x64/bin:${PATH} # Configure the Node.js variable. - npm install # Download the node_modules package. - cd - # Return to the previous directory. - ``` - -3. Store the **node\_modules** package in the **prebuilts/build-tools/common/js-framework** directory of the OpenHarmony code. - - ``` - mkdir -p OpenHarmony/prebuilts/build-tools/common/js-framework # Create the js-framework directory. - cp -rp OpenHarmony/third_party/jsframework/node_modules OpenHarmony/prebuilts/build-tools/common/js-framework/ - ``` - - -### Installing the hc-gen Tool - -hc-gen is used to compile the driver. To install hc-gen, perform the following steps: - -1. Start a Linux server. -2. Download [hc-gen](https://repo.huaweicloud.com/harmonyos/compiler/hc-gen/0.65/linux/hc-gen-0.65-linux.tar). -3. Decompress the hc-gen installation package to **\~/hc-gen** on the Linux server. - - ``` - tar -xvf hc-gen-0.65-linux.tar -C ~/ - ``` - -4. Set an environment variable. - - ``` - vim ~/.bashrc - ``` - - Copy the following command to the last line of the **.bashrc** file, save the file, and exit. - - ``` - export PATH=~/hc-gen:$PATH - ``` - -5. Validate the environment variable. - - ``` - source ~/.bashrc - ``` + By default, the downloaded prebuilts binary file is stored in **OpenHarmony\_2.0\_canary\_prebuilts** \(which is in the same directory as **OpenHarmony**\). diff --git a/en/device-dev/quick-start/setting-up-the-environment-2.md b/en/device-dev/quick-start/setting-up-the-environment-2.md index 03af20f97ab..1c3604b02e1 100644 --- a/en/device-dev/quick-start/setting-up-the-environment-2.md +++ b/en/device-dev/quick-start/setting-up-the-environment-2.md @@ -7,8 +7,7 @@ - [Installing Linux Build Tools](#section182916865219) - [Changing Linux Shell to Bash](#section1715027152617) - [Installing Basic Software Used for Compilation and Building \(Required Only for Ubuntu 20+\)](#section45512412251) - - [Installing a File Packing Tool](#section1969111820270) - - [Installing the JVM](#section1692618112713) + - [Installing File Packing Tools and JVM](#section16199102083717) ## Environment Requirements @@ -108,44 +107,16 @@ sudo ln -s /bin/bash /bin/sh Install the software. ``` -sudo apt-get install build-essential && sudo apt-get install gcc && sudo apt-get install g++ && sudo apt-get install make && sudo apt-get install zlib* && sudo apt-get install libffi-dev +sudo apt-get install build-essential gcc g++ make zlib* libffi-dev ``` -### Installing a File Packing Tool +### Installing File Packing Tools and JVM 1. Start a Linux server. -2. Install **dosfstools**. +2. Install the dosfstools, mtools, mtd-utils, Java Runtime Environment \(JRE\), and Java SDK. ``` - sudo apt-get install dosfstools - ``` - -3. Install **mtools**. - - ``` - sudo apt-get install mtools - ``` - -4. Install **mtd-utils**. - - ``` - sudo apt-get install mtd-utils - ``` - - -### Installing the JVM - -1. Start a Linux server. -2. Install the Java Runtime Environment \(JRE\). - - ``` - sudo apt-get install default-jre - ``` - -3. Install the Java Development Kit \(JDK\). - - ``` - sudo apt-get install default-jdk + sudo apt-get install dosfstools mtools mtd-utils default-jre default-jdk ``` diff --git a/en/device-dev/quick-start/setting-up-the-environment-4.md b/en/device-dev/quick-start/setting-up-the-environment-4.md index ae739691758..e8938baf915 100644 --- a/en/device-dev/quick-start/setting-up-the-environment-4.md +++ b/en/device-dev/quick-start/setting-up-the-environment-4.md @@ -5,10 +5,9 @@ - [Software Requirements](#section17315193935817) - [Installing Linux Build Tools](#section8831868501) - - [Changing Linux Shell to Bash](#section1715027152617) - - [Installing Basic Software Used for Compilation and Building \(Required Only for Ubuntu 20+\)](#section45512412251) - - [Installing a File Packing Tool](#section1686964015274) - - [Installing hc-gen](#section18706403274) + - [Changing Linux Shell to Bash](#section434110241084) + - [Installing Basic Software Used for Compilation and Building \(Required Only for Ubuntu 20+\)](#section25911132141020) + - [Installing File Packing Tools](#section390214473129) ## Environment Requirements @@ -72,7 +71,7 @@ The following table describes the tools required for setting up the general envi >- If you acquire the source code using an HPM component or HPM CLI tool, you do not need to install **hc-gen**. >- \(Recommended\) If you obtain the source code via the mirror site or code repository, install **hc-gen**. When installing the compilation tool, ensure that its environment variable path is unique. -### Changing Linux Shell to Bash +### Changing Linux Shell to Bash Check whether bash is used as the shell. @@ -95,62 +94,21 @@ sudo rm -rf /bin/sh sudo ln -s /bin/bash /bin/sh ``` -### Installing Basic Software Used for Compilation and Building \(Required Only for Ubuntu 20+\) +### Installing Basic Software Used for Compilation and Building \(Required Only for Ubuntu 20+\) Install the software. ``` -sudo apt-get install build-essential && sudo apt-get install gcc && sudo apt-get install g++ && sudo apt-get install make && sudo apt-get install zlib* && sudo apt-get install libffi-dev +sudo apt-get install build-essential gcc g++ make zlib* libffi-dev ``` -### Installing a File Packing Tool +### Installing File Packing Tools 1. Start a Linux server. -2. Install **dosfstools**. +2. Install dosfstools, mtools, and mtd-utils. ``` - sudo apt-get install dosfstools - ``` - -3. Install **mtools**. - - ``` - sudo apt-get install mtools - ``` - -4. Install **mtd-utils**. - - ``` - sudo apt-get install mtd-utils - ``` - - -### Installing hc-gen - -1. Start a Linux server. -2. Download [hc-gen](https://repo.huaweicloud.com/harmonyos/compiler/hc-gen/0.65/linux/hc-gen-0.65-linux.tar). -3. Decompress the hc-gen installation package to **\~/hc-gen** on the Linux server. - - ``` - tar -xvf hc-gen-0.65-linux.tar -C ~/ - ``` - -4. Set an environment variable. - - ``` - vim ~/.bashrc - ``` - - Copy the following command to the last line of the **.bashrc** file, save the file, and exit. - - ``` - export PATH=~/hc-gen:$PATH - ``` - -5. Validate the environment variable. - - ``` - source ~/.bashrc + sudo apt-get install dosfstools mtools mtd-utils ``` diff --git a/en/device-dev/quick-start/setting-up-the-environment.md b/en/device-dev/quick-start/setting-up-the-environment.md index e97949c8b45..382dc5ac66d 100644 --- a/en/device-dev/quick-start/setting-up-the-environment.md +++ b/en/device-dev/quick-start/setting-up-the-environment.md @@ -105,7 +105,7 @@ The following table lists the tools required for the Hi3861 development board. Install the software. ``` -sudo apt-get install build-essential && sudo apt-get install gcc && sudo apt-get install g++ && sudo apt-get install make && sudo apt-get install zlib* && sudo apt-get install libffi-dev +sudo apt-get install build-essential gcc g++ make zlib* libffi-dev ``` ### Installing Scons diff --git a/en/device-dev/quick-start/ubuntu-build-environment.md b/en/device-dev/quick-start/ubuntu-build-environment.md index 50505a9c04a..9c141637b5a 100644 --- a/en/device-dev/quick-start/ubuntu-build-environment.md +++ b/en/device-dev/quick-start/ubuntu-build-environment.md @@ -1,11 +1,10 @@ # Ubuntu Build Environment - [Obtaining Source Code and Tools](#section1897711811517) -- [Obtaining OpenHarmony Source Code](#section1545225464016) +- [Obtaining Source Code](#section1545225464016) - [Installing and Configuring Python](#section1238412211211) - [Installing gn](#section29216201423) - [Installing ninja](#section8762358731) -- [Installing hc-gen](#section4924165316437) - [Installing LLVM](#section12202192215415) - [Installing hb](#section15794154618411) - [Prerequisites](#section1083283711515) @@ -21,9 +20,8 @@ Perform the following steps to set up the build environment: 2. Install and configure Python. 3. Install GN. 4. Install Ninja. -5. Installing hc-gen -6. Install LLVM. -7. Install hb. +5. Install LLVM. +6. Install hb. >![](public_sys-resources/icon-notice.gif) **NOTICE:** >- Docker is provided for the Ubuntu build environment, which encapsulates related build tools. If you use Docker to prepare the build environment, you do not need to perform the following steps in this section. Instead, refer to [Using Docker to Prepare the Build Environment](../get-code/tool-acquisition.md). @@ -73,13 +71,6 @@ The following table describes the tools and source code required for setting up

https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar

-

hc-gen

- -

Configures and compiles files.

- -

https://repo.huaweicloud.com/harmonyos/compiler/hc-gen/0.65/linux/hc-gen-0.65-linux.tar

- -

LLVM

@@ -88,7 +79,7 @@ The following table describes the tools and source code required for setting up

Functions as the compiler toolchain.

-

https://repo.huaweicloud.com/harmonyos/compiler/clang/10.0.1-62608/linux/llvm.tar.gz

+

https://repo.huaweicloud.com/harmonyos/compiler/clang/10.0.1-62608/linux/llvm.tar.gz

For the OpenHarmony_1.0.1_release, download LLVM from the following link:

@@ -109,7 +100,7 @@ The following table describes the tools and source code required for setting up >- If you acquire the source code using an HPM component or HPM CLI tool, you do not need to install compilation tools like **gn** and **ninja**. >- \(Recommended\) If you obtain the source code via the mirror site or code repository, install compilation tools such as **gn**, **ninja**, and LLVM. When installing these tools, ensure that their environment variable paths are unique. -## Obtaining OpenHarmony Source Code +## Obtaining Source Code You need to acquire [source code](../get-code/source-code-acquisition.md), download it on a Linux server, and decompress it. @@ -247,35 +238,6 @@ You need to acquire [source code](../get-code/source-code-acquisition.md), down ``` -## Installing hc-gen - -1. Start a Linux server. -2. Download [hc-gen](https://repo.huaweicloud.com/harmonyos/compiler/hc-gen/0.65/linux/hc-gen-0.65-linux.tar). -3. Decompress the hc-gen installation package to **\~/hc-gen** on the Linux server. - - ``` - tar -xvf hc-gen-0.65-linux.tar -C ~/ - ``` - -4. Set an environment variable. - - ``` - vim ~/.bashrc - ``` - - Copy the following command to the last line of the **.bashrc** file, save the file, and exit. - - ``` - export PATH=~/hc-gen:$PATH - ``` - -5. Validate the environment variable. - - ``` - source ~/.bashrc - ``` - - ## Installing LLVM 1. Start a Linux server. diff --git a/zh-cn/application-dev/application-dev-guide.md b/zh-cn/application-dev/application-dev-guide.md new file mode 100644 index 00000000000..1f33f72dc0f --- /dev/null +++ b/zh-cn/application-dev/application-dev-guide.md @@ -0,0 +1,10 @@ +# 应用开发导读 + +应用开发文档用于指导开发者通过OpenHarmony提供的接口完成应用开发。当前应用开发文档提供了在标准系统上开发应用的JS接口。 + +在这部分中,开发者可以通过“[入门](quick-start/Readme-CN.md)”来了解应用开发的基本方法。完整的接口清单和参考使用指导可参见“[JS参考规范](js-reference/Readme-CN.md)”。 + +除此之外,为方便开发者对常用功能进行深入理解,还提供了[UI](ui/Readme-CN.md)、[媒体](media/Readme-CN.md)、[网络与连接](connectivity/Readme-CN.md)三个模块的开发指南。 + +如果需要了解各子系统的原理和基本信息,可以参考“docs/zh-cn/readme”目录中各子系统readme的介绍。 + diff --git "a/zh-cn/device-dev/driver/SDIO\344\275\277\347\224\250\345\256\236\344\276\213.md" "b/zh-cn/device-dev/driver/SDIO\344\275\277\347\224\250\345\256\236\344\276\213.md" index 570e1706957..18ddb74593b 100755 --- "a/zh-cn/device-dev/driver/SDIO\344\275\277\347\224\250\345\256\236\344\276\213.md" +++ "b/zh-cn/device-dev/driver/SDIO\344\275\277\347\224\250\345\256\236\344\276\213.md" @@ -27,12 +27,12 @@ void SdioTestSample(void) int32_t ret; DevHandle handle = NULL; uint8_t data[TEST_DATA_LEN] = {0}; - int16_t busNum = 1; + struct SdioFunctionConfig config = {1, 0x123, 0x456}; uint8_t val; uint32_t addr; /* 打开总线号为1的SDIO设备 */ - handle = SdioOpen(busNum); + handle = SdioOpen(1, &config); if (handle == NULL) { HDF_LOGE("SdioOpen: failed!\n"); return; @@ -59,25 +59,25 @@ void SdioTestSample(void) } /* 从SDIO设备增量地址读取3字节的数据 */ addr = TEST_FBR_BASE_ADDR * TEST_FUNC_NUM + TEST_ADDR_OFFSET; - ret = SdioReadBytes(handle, data, addr, TEST_DATA_LEN, 0); + ret = SdioReadBytes(handle, data, addr, TEST_DATA_LEN); if (ret != 0) { HDF_LOGE("SdioReadBytes: failed, ret %d\n", ret); goto COMM_ERR; } /* 向SDIO设备增量地址写入3字节的数据 */ - ret = SdioWriteBytes(handle, data, addr, TEST_DATA_LEN, 0); + ret = SdioWriteBytes(handle, data, addr, TEST_DATA_LEN); if (ret != 0) { HDF_LOGE("SdioWriteBytes: failed, ret %d\n", ret); goto COMM_ERR; } /* 从SDIO设备读取1字节的数据 */ - ret = SdioReadBytes(handle, &val, addr, 1, 0); + ret = SdioReadBytes(handle, &val, addr, 1); if (ret != 0) { HDF_LOGE("SdioReadBytes: failed, ret %d\n", ret); goto COMM_ERR; } /* 向SDIO设备写入1字节的数据 */ - ret = SdioWriteBytes(handle, &val, addr, 1, 0); + ret = SdioWriteBytes(handle, &val, addr, 1); if (ret != 0) { HDF_LOGE("SdioWriteBytes: failed, ret %d\n", ret); goto COMM_ERR; @@ -96,13 +96,13 @@ void SdioTestSample(void) } /* 从SDIO function 0读取1字节的数据 */ addr = 0x02; - ret = SdioReadBytesFromFunc0(handle, &val, addr, 1, 0); + ret = SdioReadBytesFromFunc0(handle, &val, addr, 1); if (ret != 0) { HDF_LOGE("SdioReadBytesFromFunc0: failed, ret %d\n", ret); goto COMM_ERR; } /* 向SDIO function 0写入1字节的数据 */ - ret = SdioWriteBytesToFunc0(handle, &val, addr, 1, 0); + ret = SdioWriteBytesToFunc0(handle, &val, addr, 1); if (ret != 0) { HDF_LOGE("SdioWriteBytesToFunc0: failed, ret %d\n", ret); goto COMM_ERR; diff --git "a/zh-cn/device-dev/driver/SDIO\344\275\277\347\224\250\346\214\207\345\257\274.md" "b/zh-cn/device-dev/driver/SDIO\344\275\277\347\224\250\346\214\207\345\257\274.md" index 1f4837d8e77..fd65e6de6ad 100755 --- "a/zh-cn/device-dev/driver/SDIO\344\275\277\347\224\250\346\214\207\345\257\274.md" +++ "b/zh-cn/device-dev/driver/SDIO\344\275\277\347\224\250\346\214\207\345\257\274.md" @@ -24,7 +24,7 @@ 在使用SDIO进行通信前,首先要调用SdioOpen获取SDIO控制器的设备句柄,该函数会返回指定总线号的SDIO控制器的设备句柄。 -DevHandle SdioOpen\(int16\_t busNum\); +DevHandle SdioOpen\(int16\_t mmcBusNum, struct SdioFunctionConfig \*config\); **表 1** SdioOpen函数的参数和返回值描述 @@ -35,9 +35,14 @@ DevHandle SdioOpen\(int16\_t busNum\); -

busNum

+

mmcBusNum

-

SDIO的总线号

+

总线号

+ + +

config

+ +

SDIO功能配置信息

返回值

@@ -62,9 +67,12 @@ DevHandle SdioOpen\(int16\_t busNum\); ``` DevHandle handle = NULL; -int16_t busNum = 1; +struct SdioFunctionConfig config; +config.funcNr = 1; +config.vendorId = 0x123; +config.deviceId = 0x456; /* 打开总线号为1的SDIO控制器 */ -handle = SdioOpen(busNum); +handle = SdioOpen(1, &config); if (handle == NULL) { HDF_LOGE("SdioOpen: failed!\n"); } @@ -218,7 +226,7 @@ if (ret != 0) { 对应的接口函数如下所示: -int32\_t SdioWriteBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); +int32\_t SdioWriteBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); **表 5** SdioWriteBytes函数的参数和返回值描述 @@ -249,11 +257,6 @@ int32\_t SdioWriteBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint

待写入数据的长度

-

timeOut

- -

写入数据的最大时间限制,单位毫秒。如果该字段为0,则使用平台对应的默认值。

- -

返回值

返回值描述

@@ -279,7 +282,7 @@ int32_t ret; uint8_t wbuff[] = {1,2,3,4,5}; uint32_t addr = 0x100 + 0x09; /* 向SDIO设备起始地址0x109,增量写入5个字节的数据 */ -ret = SdioWriteBytes(handle, wbuff, addr, sizeof(wbuff) / sizeof(wbuff[0]), 0); +ret = SdioWriteBytes(handle, wbuff, addr, sizeof(wbuff) / sizeof(wbuff[0])); if (ret != 0) { HDF_LOGE("SdioWriteBytes: failed, ret %d\n", ret); } @@ -289,7 +292,7 @@ if (ret != 0) { 对应的接口函数如下所示: -int32\_t SdioReadBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); +int32\_t SdioReadBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); **表 6** SdioReadBytes函数的参数和返回值描述 @@ -320,11 +323,6 @@ int32\_t SdioReadBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint3

待读取数据的长度

-

timeOut

- -

读取数据的最大时间限制,单位毫秒。如果该字段为0,则使用平台对应的默认值。

- -

返回值

返回值描述

@@ -350,7 +348,7 @@ int32_t ret; uint8_t rbuff[5] = {0}; uint32_t addr = 0x100 + 0x09; /* 从SDIO设备起始地址0x109,增量读取5个字节的数据 */ -ret = SdioReadBytes(handle, rbuff, addr, 5, 0); +ret = SdioReadBytes(handle, rbuff, addr, 5); if (ret != 0) { HDF_LOGE("SdioReadBytes: failed, ret %d\n", ret); } @@ -360,7 +358,7 @@ if (ret != 0) { 对应的接口函数如下所示: - int32\_t SdioWriteBytesToFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); + int32\_t SdioWriteBytesToFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t scatterLen\); **表 7** SdioWriteBytesToFixedAddr函数的参数和返回值描述 @@ -391,9 +389,9 @@ if (ret != 0) {

待写入数据的长度

-

timeOut

+

scatterLen

-

写入数据的最大时间限制,单位毫秒。如果该字段为0,则使用平台对应的默认值。

+

集散表的长度。如果该字段不为0,则data为集散表类型。

返回值

@@ -431,7 +429,7 @@ if (ret != 0) { 对应的接口函数如下所示: - int32\_t SdioReadBytesFromFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); + int32\_t SdioReadBytesFromFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t scatterLen\); **表 8** SdioReadBytesFromFixedAddr函数的参数和返回值描述 @@ -462,9 +460,9 @@ if (ret != 0) {

待读取数据的长度

-

timeOut

+

scatterLen

-

读取数据的最大时间限制,单位毫秒。如果该字段为0,则使用平台对应的默认值。

+

集散表的长度。如果该字段不为0,则data为集散表类型。

返回值

@@ -503,7 +501,7 @@ if (ret != 0) { 当前只支持写入一个字节的数据,对应的接口函数如下所示: -int32\_t SdioWriteBytesToFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); +int32\_t SdioWriteBytesToFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); **表 9** SdioWriteBytesToFunc0函数的参数和返回值描述 @@ -534,11 +532,6 @@ int32\_t SdioWriteBytesToFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t add

待写入数据的长度

-

timeOut

- -

写入数据的最大时间限制,单位毫秒。如果该字段为0,则使用平台对应的默认值。

- -

返回值

返回值描述

@@ -563,7 +556,7 @@ int32\_t SdioWriteBytesToFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t add int32_t ret; uint8_t wbuff = 1; /* 向SDIO function 0地址0x2中写入1字节的数据 */ -ret = SdioWriteBytesToFunc0(handle, &wbuff, 0x2, 1, 0); +ret = SdioWriteBytesToFunc0(handle, &wbuff, 0x2, 1); if (ret != 0) { HDF_LOGE("SdioWriteBytesToFunc0: failed, ret %d\n", ret); } @@ -573,7 +566,7 @@ if (ret != 0) { 当前只支持读取一个字节的数据,对应的接口函数如下所示: -int32\_t SdioReadBytesFromFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t timeOut\); +int32\_t SdioReadBytesFromFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); **表 10** SdioReadBytesFromFunc0函数的参数和返回值描述 @@ -604,11 +597,6 @@ int32\_t SdioReadBytesFromFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t ad

待读取数据的长度

-

timeOut

- -

读取数据的最大时间限制,单位毫秒。如果该字段为0,则使用平台对应的默认值。

- -

返回值

返回值描述

@@ -633,7 +621,7 @@ int32\_t SdioReadBytesFromFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t ad int32_t ret; uint8_t rbuff; /* 从SDIO function 0设备地址0x2中读取1字节的数据 */ -ret = SdioReadBytesFromFunc0(handle, &rbuff, 0x2, 1, 0); +ret = SdioReadBytesFromFunc0(handle, &rbuff, 0x2, 1); if (ret != 0) { HDF_LOGE("SdioReadBytesFromFunc0: failed, ret %d\n", ret); } diff --git "a/zh-cn/device-dev/driver/UART\344\275\277\347\224\250\346\214\207\345\257\274.md" "b/zh-cn/device-dev/driver/UART\344\275\277\347\224\250\346\214\207\345\257\274.md" index 16305dfa3da..1d1ee50a8c1 100755 --- "a/zh-cn/device-dev/driver/UART\344\275\277\347\224\250\346\214\207\345\257\274.md" +++ "b/zh-cn/device-dev/driver/UART\344\275\277\347\224\250\346\214\207\345\257\274.md" @@ -13,7 +13,7 @@ ## 使用流程 -使用UART的一般流程如下图所示。 +使用UART的一般流程如[图1](#p58686354483)所示。 **图 1** UART使用流程图 diff --git "a/zh-cn/device-dev/driver/\351\251\261\345\212\250\345\274\200\345\217\221.md" "b/zh-cn/device-dev/driver/\351\251\261\345\212\250\345\274\200\345\217\221.md" index b05a39a8718..e35139db59c 100755 --- "a/zh-cn/device-dev/driver/\351\251\261\345\212\250\345\274\200\345\217\221.md" +++ "b/zh-cn/device-dev/driver/\351\251\261\345\212\250\345\274\200\345\217\221.md" @@ -71,7 +71,7 @@ HDF框架以组件化的驱动模型作为核心设计思路,为开发者提 - 驱动代码的编译必须要使用HDF框架提供的Makefile模板进行编译。 ``` - include $(LITEOSTOPDIR)/../../drivers/adapter/khdf/liteos/lite.mk #导入hdf预定义内容,必需 + include $(LITEOSTOPDIR)/../../drivers/adapter/lite/khdf/lite.mk #导入hdf预定义内容,必需 MODULE_NAME := #生成的结果文件 LOCAL_INCLUDE := #本驱动的头文件目录 LOCAL_SRCS := #本驱动的源代码文件 diff --git "a/zh-cn/device-dev/quick-start/Ubuntu\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" "b/zh-cn/device-dev/quick-start/Ubuntu\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" index 42cb2c61519..073e04bbc4b 100755 --- "a/zh-cn/device-dev/quick-start/Ubuntu\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" +++ "b/zh-cn/device-dev/quick-start/Ubuntu\347\274\226\350\257\221\347\216\257\345\242\203\345\207\206\345\244\207.md" @@ -79,7 +79,7 @@ Linux服务器通用环境配置需要的工具及其获取途径如下表所示

编译工具链

-

https://repo.huaweicloud.com/harmonyos/compiler/clang/10.0.1-62608/linux/llvm.tar.gz

+

https://repo.huaweicloud.com/harmonyos/compiler/clang/10.0.1-62608/linux/llvm.tar.gz

针对OpenHarmony_1.0.1_release分支使用以下链接下载:

diff --git "a/zh-cn/device-dev/quick-start/Windows\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207-9.md" "b/zh-cn/device-dev/quick-start/Windows\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207-9.md" index b2830340c58..1922601478a 100644 --- "a/zh-cn/device-dev/quick-start/Windows\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207-9.md" +++ "b/zh-cn/device-dev/quick-start/Windows\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207-9.md" @@ -43,9 +43,9 @@ DevEco Device Tool以插件方式提供,基于Visual Studio Code进行扩展

编译构建工具

-

3.7.4-3.8.x 64位版本

+

V3.7.4~V3.8.x 64位版本

-

https://www.python.org/downloads/

+

推荐下载:https://www.python.org/downloads/release/python-388/

Node.js

@@ -93,9 +93,9 @@ DevEco Device Tool以插件方式提供,基于Visual Studio Code进行扩展 ## 安装Python -1. 双击Python安装包进行安装,勾选“**Add Python xx to PATH**”,然后点击**Install Now**开始安装。 +1. 双击Python安装包进行安装,勾选“**Add Python 3.8 to PATH**”,然后点击**Install Now**开始安装。 - ![](figures/zh-cn_image_0000001096154076.png) + ![](figures/zh-cn_image_0000001168817327.png) 2. 等待安装完成后,点击**Close**。 @@ -103,7 +103,7 @@ DevEco Device Tool以插件方式提供,基于Visual Studio Code进行扩展 3. 打开命令行工具,输入python --version,检查安装结果。 - ![](figures/zh-cn_image_0000001143154485.png) + ![](figures/zh-cn_image_0000001122419072.png) 4. 在命令行工具中,分别执行如下命令设置pip源,用于后续安装DevEco Device Tool过程中下载依赖的组件包。 diff --git "a/zh-cn/device-dev/quick-start/Windows\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" "b/zh-cn/device-dev/quick-start/Windows\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" index 55970ca67aa..f70d3cce73f 100755 --- "a/zh-cn/device-dev/quick-start/Windows\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" +++ "b/zh-cn/device-dev/quick-start/Windows\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" @@ -43,9 +43,9 @@ DevEco Device Tool以插件方式提供,基于Visual Studio Code进行扩展

编译构建工具

-

3.7.4-3.8.x 64位版本

+

V3.7.4~V3.8.x 64位版本

-

https://www.python.org/downloads/

+

推荐下载:https://www.python.org/downloads/release/python-388/

Node.js

@@ -93,9 +93,9 @@ DevEco Device Tool以插件方式提供,基于Visual Studio Code进行扩展 ## 安装Python -1. 双击Python安装包进行安装,勾选“**Add Python xx to PATH**”,然后点击**Install Now**开始安装。 +1. 双击Python安装包进行安装,勾选“**Add Python 3.8 to PATH**”,然后点击**Install Now**开始安装。 - ![](figures/zh-cn_image_0000001096154076.png) + ![](figures/zh-cn_image_0000001168817327.png) 2. 等待安装完成后,点击**Close**。 @@ -103,7 +103,7 @@ DevEco Device Tool以插件方式提供,基于Visual Studio Code进行扩展 3. 打开命令行工具,输入python --version,检查安装结果。 - ![](figures/zh-cn_image_0000001143154485.png) + ![](figures/zh-cn_image_0000001122419072.png) 4. 在命令行工具中,分别执行如下命令设置pip源,用于后续安装DevEco Device Tool过程中下载依赖的组件包。 diff --git a/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001122419072.png b/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001122419072.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6e93e40bf4abee3c83aebf0c5f3299e51dc630 GIT binary patch literal 2267 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 literal 0 HcmV?d00001 diff --git a/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001168817327.png b/zh-cn/device-dev/quick-start/figures/zh-cn_image_0000001168817327.png new file mode 100644 index 0000000000000000000000000000000000000000..8aa65e82be8db2e7de62fca8980d00ae42215d96 GIT binary patch literal 96467 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�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�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 -**表 1** 文档资源导读 +**表 1** 轻量和小型系统开发指导(参考内存<128MB) - -

学习路径

+ + - - - - - - - - - - - - - - - - - - - - - - - - - - + + +

学习路径

开发者业务

+

开发者业务

相关文档

+

相关文档

了解OpenHarmony

+

了解OpenHarmony

整体认知OpenHarmony

+

整体认知OpenHarmony

+

获取开发资源

+

获取开发资源

准备开发前相关资源

+

准备开发前相关资源

+

快速入门

+

快速入门

快速熟悉OpenHarmony环境搭建、编译、烧录、调测、运行。

+

快速熟悉OpenHarmony环境搭建、编译、烧录、调测、运行。

+

轻量和小型系统快速入门

基础能力使用

+

基础能力使用

使用OpenHarmony提供的基础能力

+

使用OpenHarmony提供的基础能力

+

进阶开发

+

进阶开发

结合系统能力开发智能设备

+

结合系统能力开发智能设备

+

移植适配

+

移植适配

  • 针对特定芯片做移植适配
  • 对三方库进行移植适配
+
  • 针对特定芯片做移植适配
  • 对三方库进行移植适配
+

贡献组件

+

贡献组件

OpenHarmony贡献功能组件

+

OpenHarmony贡献功能组件

+

参考

+

参考

开发参考

+

开发参考

+ +
+ +**表 2** 标准系统开发指导(参考内存≥128MB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/zh-cn/readme.md b/zh-cn/readme.md index ac08ec8d482..79c90f5fa03 100644 --- a/zh-cn/readme.md +++ b/zh-cn/readme.md @@ -3,76 +3,60 @@ 此工程存放OpenHarmony提供的快速入门、开发指南、API参考等开发者文档,欢迎参与OpenHarmony开发者文档开源项目,与我们一起完善开发者文档。 -## 设备开发-文档目录结构 - -- overview:[导读](device-dev/quick-start/导读.md) - -- quick-start:[快速入门](device-dev/quick-start/Readme-CN.md) - -- get-code:[获取源码/获取工具](device-dev/get-code/Readme-CN.md) - -- docker:[标准系统Docker镜像构建](../docker/standard/Readme.md)、[轻量和小型系统Docker镜像构建](../docker/README.md) - -- kernel:[内核](device-dev/kernel/Readme-CN.md) - -- driver:[驱动](device-dev/driver/Readme-CN.md) - -- subsystems:[子系统](device-dev/subsystems/Readme-CN.md) - - - [编译构建](device-dev/subsystems/编译构建.md) - - - [分布式远程启动](device-dev/subsystems/分布式远程启动.md) - - - [图形图像](device-dev/subsystems/图形图像.md) - - - [媒体](device-dev/subsystems/媒体.md) - - - [公共基础](device-dev/subsystems/公共基础.md) - - - [AI框架](device-dev/subsystems/AI框架.md) - - - [Sensor服务](device-dev/subsystems/Sensor服务.md) - - - [用户程序框架](device-dev/subsystems/用户程序框架.md) - - - [OTA升级](device-dev/subsystems/OTA升级.md) - - - [安全](device-dev/subsystems/安全.md) - - - [启动恢复](device-dev/subsystems/启动恢复.md) - - - [测试](device-dev/subsystems/测试.md) - - - [DFX](device-dev/subsystems/DFX.md) - - - [研发工具链](device-dev/subsystems/研发工具链.md) - - - [XTS认证](device-dev/subsystems/XTS认证子系统开发指南.md) - -- bundles:[组件开发](device-dev/bundles/Readme-CN.md) - -- porting:[三方库移植/三方芯片移植](device-dev/porting/Readme-CN.md) - -- guide:[开发示例](device-dev/guide/Readme-CN.md) - - - [WLAN连接类产品](device-dev/guide/WLAN连接类产品.md) - - [无屏摄像头类产品](device-dev/guide/无屏摄像头类产品.md) - - [带屏摄像头类产品](device-dev/guide/带屏摄像头类产品.md) - - [时钟应用开发示例](device-dev/guide/时钟应用开发示例.md) - - [平台驱动开发示例](device-dev/guide/平台驱动开发示例.md) - - [外设驱动开发示例](device-dev/guide/外设驱动开发示例.md) - -- security:[隐私与安全](device-dev/security/Readme-CN.md) - -- glossary:[术语](device-dev/glossary/术语.md) - -## 应用开发-文档目录结构 - -- quick-start:[入门](application-dev/quick-start/Readme-CN.md) -- ui:[UI](application-dev/ui/Readme-CN.md) -- media:[媒体](application-dev/media/Readme-CN.md) -- connectivity:[网络与连接](application-dev/connectivity/Readme-CN.md) -- js-reference:[JS参考规范](application-dev/js-reference/Readme-CN.md) +## 文档目录结构 + +- [Openharmony概述](OpenHarmony-Overview_zh.md) +- 轻量和小型系统开发指导(参考内存<128MB) + + 设备开发 + + release-notes:[版本更新说明](release-notes/OpenHarmony-1-1-0-LTS.md) + + overview:[导读](device-dev/quick-start/导读.md) + + quick-star:[快速入门](device-dev/quick-start/Readme-CN.md)(搭建环境、获取源码、编译、烧录等) + + 开发基础能力 + - Kernel:[轻内核](device-dev/kernel/轻内核.md) + - Drivers:[驱动](device-dev/driver/Readme-CN.md) + - Subsystems:[子系统](device-dev/subsystems/Readme-CN.md)(编译构建、分布式远程、图形图像、DFX、XTS等子系统) + - Security:[隐私与安全](device-dev/security/Readme-CN.md) + + guide:[开发示例](device-dev/guide/Readme-CN.md) + + [WLAN连接类产品开发示例](device-dev/guide/WLAN连接类产品.md)(LED外设控制、集成三方SDK) + + [无屏摄像头类产品开发示例](device-dev/guide/无屏摄像头类产品.md)(像头控制) + + [带屏摄像头类产品开发示例](device-dev/guide/带屏摄像头类产品.md)(屏幕和摄像头控制、视觉应用开发) + + porting:[移植适配](device-dev/porting/Readme-CN.md) + + [三方芯片移植指导](device-dev/porting/三方芯片移植指导.md) + + [三方库移植指导](device-dev/porting/三方库移植指导.md) + + 常见问题 + + bundles:[组件开发](device-dev/bundles/Readme-CN.md) + + [组件开发规范](device-dev/bundles/组件开发规范.md) + + [组件开发指南](device-dev/bundles/组件开发指南.md) + + [组件开发示例](device-dev/bundles/组件开发示例.md) +- 标准系统开发指导(参考内存≥128MB) + - release-notes:[版本更新说明](release-notes/OpenHarmony-2-0-Canary.md) + - 设备开发 + - overview:[导读](device-dev/quick-start/导读.md) + - quick-star:[快速入门](device-dev/quick-start/Readme-CN.md)(搭建环境、获取源码、编译、烧录等) + - 开发基础能力 + - Kernel:[Linux内核](device-dev/kernel/Linux内核.md) + - Drivers:[驱动](device-dev/driver/Readme-CN.md) + - Subsystems:[子系统](device-dev/subsystems/Readme-CN.md)(编译构建、分布式远程、图形图像、DFX、XTS等子系统) + - Security:[隐私与安全](device-dev/security/Readme-CN.md) + - guide:[开发示例](device-dev/guide/Readme-CN.md) + - [时钟应用开发示例](device-dev/guide/时钟应用开发示例.md) + - [平台驱动开发示例](device-dev/guide/平台驱动开发示例.md) + - [外设驱动开发示例](device-dev/guide/外设驱动开发示例.md) + - porting:[移植适配](device-dev/porting/Readme-CN.md) + - [三方芯片移植指导](device-dev/porting/三方芯片移植指导.md) + - [三方库移植指导](device-dev/porting/三方库移植指导.md) + - 常见问题 + - bundles:[组件开发](device-dev/bundles/Readme-CN.md) + - [组件开发规范](device-dev/bundles/组件开发规范.md) + - [组件开发指南](device-dev/bundles/组件开发指南.md) + - [组件开发示例](device-dev/bundles/组件开发示例.md) + - 应用开发 + - quick-start:[入门](application-dev/quick-start/Readme-CN.md) + - ui:[UI](application-dev/ui/Readme-CN.md) + - media:[媒体](application-dev/media/Readme-CN.md) + - connectivity:[网络与连接](application-dev/connectivity/Readme-CN.md) + - js-reference:[JS参考规范](application-dev/js-reference/Readme-CN.md) + - glossary:[术语](device-dev/glossary/术语.md) ## 版本更新 -- Gitee From 16b0316c52fe61cc2d59d8b93cee7996f255c926 Mon Sep 17 00:00:00 2001 From: duanxichao Date: Thu, 24 Jun 2021 21:19:22 +0800 Subject: [PATCH 2/6] =?UTF-8?q?update=20=E5=AF=BC=E5=85=A5OpenHarmony?= =?UTF-8?q?=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: duanxichao --- zh-cn/readme.md | 129 +++++++++++++++++++++++++----------------------- 1 file changed, 67 insertions(+), 62 deletions(-) diff --git a/zh-cn/readme.md b/zh-cn/readme.md index 79c90f5fa03..48ab06e41b4 100644 --- a/zh-cn/readme.md +++ b/zh-cn/readme.md @@ -1,72 +1,77 @@ -# OpenHarmony开发者文档 +# OpenHarmony开发者文档 此工程存放OpenHarmony提供的快速入门、开发指南、API参考等开发者文档,欢迎参与OpenHarmony开发者文档开源项目,与我们一起完善开发者文档。 +## 文档目录结构 -## 文档目录结构 - -- [Openharmony概述](OpenHarmony-Overview_zh.md) -- 轻量和小型系统开发指导(参考内存<128MB) - + 设备开发 - + release-notes:[版本更新说明](release-notes/OpenHarmony-1-1-0-LTS.md) - + overview:[导读](device-dev/quick-start/导读.md) - + quick-star:[快速入门](device-dev/quick-start/Readme-CN.md)(搭建环境、获取源码、编译、烧录等) - + 开发基础能力 - - Kernel:[轻内核](device-dev/kernel/轻内核.md) - - Drivers:[驱动](device-dev/driver/Readme-CN.md) - - Subsystems:[子系统](device-dev/subsystems/Readme-CN.md)(编译构建、分布式远程、图形图像、DFX、XTS等子系统) - - Security:[隐私与安全](device-dev/security/Readme-CN.md) - + guide:[开发示例](device-dev/guide/Readme-CN.md) - + [WLAN连接类产品开发示例](device-dev/guide/WLAN连接类产品.md)(LED外设控制、集成三方SDK) - + [无屏摄像头类产品开发示例](device-dev/guide/无屏摄像头类产品.md)(像头控制) - + [带屏摄像头类产品开发示例](device-dev/guide/带屏摄像头类产品.md)(屏幕和摄像头控制、视觉应用开发) - + porting:[移植适配](device-dev/porting/Readme-CN.md) - + [三方芯片移植指导](device-dev/porting/三方芯片移植指导.md) - + [三方库移植指导](device-dev/porting/三方库移植指导.md) - + 常见问题 - + bundles:[组件开发](device-dev/bundles/Readme-CN.md) - + [组件开发规范](device-dev/bundles/组件开发规范.md) - + [组件开发指南](device-dev/bundles/组件开发指南.md) - + [组件开发示例](device-dev/bundles/组件开发示例.md) -- 标准系统开发指导(参考内存≥128MB) - - release-notes:[版本更新说明](release-notes/OpenHarmony-2-0-Canary.md) - - 设备开发 - - overview:[导读](device-dev/quick-start/导读.md) - - quick-star:[快速入门](device-dev/quick-start/Readme-CN.md)(搭建环境、获取源码、编译、烧录等) - - 开发基础能力 - - Kernel:[Linux内核](device-dev/kernel/Linux内核.md) - - Drivers:[驱动](device-dev/driver/Readme-CN.md) - - Subsystems:[子系统](device-dev/subsystems/Readme-CN.md)(编译构建、分布式远程、图形图像、DFX、XTS等子系统) - - Security:[隐私与安全](device-dev/security/Readme-CN.md) - - guide:[开发示例](device-dev/guide/Readme-CN.md) - - [时钟应用开发示例](device-dev/guide/时钟应用开发示例.md) - - [平台驱动开发示例](device-dev/guide/平台驱动开发示例.md) - - [外设驱动开发示例](device-dev/guide/外设驱动开发示例.md) - - porting:[移植适配](device-dev/porting/Readme-CN.md) - - [三方芯片移植指导](device-dev/porting/三方芯片移植指导.md) - - [三方库移植指导](device-dev/porting/三方库移植指导.md) - - 常见问题 - - bundles:[组件开发](device-dev/bundles/Readme-CN.md) - - [组件开发规范](device-dev/bundles/组件开发规范.md) - - [组件开发指南](device-dev/bundles/组件开发指南.md) - - [组件开发示例](device-dev/bundles/组件开发示例.md) - - 应用开发 - - quick-start:[入门](application-dev/quick-start/Readme-CN.md) - - ui:[UI](application-dev/ui/Readme-CN.md) - - media:[媒体](application-dev/media/Readme-CN.md) - - connectivity:[网络与连接](application-dev/connectivity/Readme-CN.md) - - js-reference:[JS参考规范](application-dev/js-reference/Readme-CN.md) - - glossary:[术语](device-dev/glossary/术语.md) - -## 版本更新 - -参考[Release Notes](release-notes/OpenHarmony-Release-Notes.md) - -## 第三方开源软件及许可说明 +- [Openharmony概述](OpenHarmony-Overview_zh.md) +- 轻量和小型系统开发指导(参考内存<128MB) + - 设备开发 + - overview:[设备开发导读](device-dev/quick-start/导读.md) + - quick-start:[快速入门](device-dev/quick-start/Readme-CN.md)(搭建环境、获取源码、编译、烧录等) + - 开发基础能力 + - Kernel:[轻内核](device-dev/kernel/轻内核.md) + - Drivers:[驱动](device-dev/driver/Readme-CN.md) + - Subsystems:[子系统](device-dev/subsystems/Readme-CN.md)(编译构建、图形图像、DFX、XTS等子系统) + - Security:[隐私与安全](device-dev/security/Readme-CN.md) + + - guide:[开发示例](device-dev/guide/Readme-CN.md) + - [WLAN连接类产品](device-dev/guide/WLAN连接类产品.md)(LED外设控制、集成三方SDK) + - [无屏摄像头类产品](device-dev/guide/无屏摄像头类产品.md)(摄像头控制) + - [带屏摄像头类产品](device-dev/guide/带屏摄像头类产品.md)(屏幕和摄像头控制、视觉应用开发) + + - porting:[移植适配](device-dev/guide/Readme-CN.md) + - [三方芯片移植指导](device-dev/porting/三方芯片移植指导.md) + - [三方库移植指导](device-dev/porting/三方库移植指导.md) + + - bundles:[组件开发](device-dev/bundles/Readme-CN.md) + - [组件开发规范](device-dev/bundles/组件开发规范.md) + - [组件开发指南](device-dev/bundles/组件开发指南.md) + - [组件开发示例](device-dev/bundles/组件开发示例.md) + +- 标准系统开发指导(参考内存≥128MB) + - 设备开发 + - overview:[设备开发导读](device-dev/quick-start/导读.md) + - quick-start:[快速入门](device-dev/quick-start/Readme-CN.md)(搭建环境、获取源码、编译、烧录等) + - 开发基础能力 + - Kernel:[Linux内核](device-dev/kernel/Linux内核.md) + - Drivers:[驱动](device-dev/driver/Readme-CN.md) + - Subsystems:[子系统](device-dev/subsystems/Readme-CN.md)(编译构建、图形图像、DFX、XTS等子系统) + - Security:[隐私与安全](device-dev/security/Readme-CN.md) + + - guide:[开发示例](device-dev/guide/Readme-CN.md) + - [时钟应用](device-dev/guide/时钟应用开发示例.md) + - [平台驱动](device-dev/guide/平台驱动开发示例.md) + - [外设驱动](device-dev/guide/外设驱动开发示例.md) + + - porting:[移植适配](device-dev/guide/Readme-CN.md) + - [三方芯片移植指导](device-dev/porting/三方芯片移植指导.md) + - [三方库移植指导](device-dev/porting/三方库移植指导.md) + + - bundles:[组件开发](device-dev/bundles/Readme-CN.md) + - [组件开发规范](device-dev/bundles/组件开发规范.md) + - [组件开发指南](device-dev/bundles/组件开发指南.md) + - [组件开发示例](device-dev/bundles/组件开发示例.md) + + +- 应用开发 + - overview:[应用开发导读](application-dev/application-dev-guide.md) + - quick-start:[入门](application-dev/quick-start/Readme-CN.md) + - ui:[UI](application-dev/ui/Readme-CN.md) + - media:[媒体](application-dev/media/Readme-CN.md) + - connectivity:[网络与连接](application-dev/connectivity/Readme-CN.md) + - js-reference:[JS参考规范](application-dev/js-reference/Readme-CN.md) +- glossary:[术语](device-dev/glossary/术语.md) + +## 版本更新 + +参考[Release Notes](release-notes/OpenHarmony-Release-Notes.md)。 + +## 第三方开源软件及许可说明 3rd-Party-License:[第三方开源软件及许可证说明](contribute/第三方开源软件及许可证说明.md) -## 贡献 +## 贡献 非常欢迎您参与[贡献](contribute/参与贡献.md),我们鼓励开发者以各种方式参与文档反馈和贡献。 -- Gitee From c3ce32efb1f5bde2ac929c9b370240766037766c Mon Sep 17 00:00:00 2001 From: duangavin123 Date: Thu, 24 Jun 2021 13:23:46 +0000 Subject: [PATCH 3/6] =?UTF-8?q?update=20zh-cn/device-dev/quick-start/?= =?UTF-8?q?=E5=AF=BC=E8=AF=BB.md.=20=E5=8E=BB=E9=99=A4=E6=A0=87=E5=87=86?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=88=97=E8=A1=A8=E4=B8=AD=E7=9A=84=E8=8A=AF?= =?UTF-8?q?=E7=89=87=E7=A7=BB=E6=A4=8D=E6=8C=87=E5=AF=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "zh-cn/device-dev/quick-start/\345\257\274\350\257\273.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/zh-cn/device-dev/quick-start/\345\257\274\350\257\273.md" "b/zh-cn/device-dev/quick-start/\345\257\274\350\257\273.md" index 3829a83964d..0588bb5416c 100755 --- "a/zh-cn/device-dev/quick-start/\345\257\274\350\257\273.md" +++ "b/zh-cn/device-dev/quick-start/\345\257\274\350\257\273.md" @@ -148,7 +148,7 @@ OpenHarmony也提供了一系列可选的系统组件,方便设备开发者按 - -- Gitee From ecffb1fd836273a9a1a99aff3f3994e206b41399 Mon Sep 17 00:00:00 2001 From: duangavin123 Date: Thu, 24 Jun 2021 13:24:41 +0000 Subject: [PATCH 4/6] =?UTF-8?q?update=20zh-cn/device-dev/quick-start/?= =?UTF-8?q?=E5=AF=BC=E8=AF=BB.md.=20=E4=BF=AE=E6=94=B9=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=EF=BC=8C=E4=B8=89=E6=96=B9=E5=BA=93=E7=A7=BB=E6=A4=8D=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E9=A1=B9=E7=9B=AE=E7=AC=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "zh-cn/device-dev/quick-start/\345\257\274\350\257\273.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/zh-cn/device-dev/quick-start/\345\257\274\350\257\273.md" "b/zh-cn/device-dev/quick-start/\345\257\274\350\257\273.md" index 0588bb5416c..0f31f568ca1 100755 --- "a/zh-cn/device-dev/quick-start/\345\257\274\350\257\273.md" +++ "b/zh-cn/device-dev/quick-start/\345\257\274\350\257\273.md" @@ -148,7 +148,7 @@ OpenHarmony也提供了一系列可选的系统组件,方便设备开发者按 - -- Gitee From 8cc876ab262d904764786d595f8a4e63f9f8bf30 Mon Sep 17 00:00:00 2001 From: duangavin123 Date: Thu, 24 Jun 2021 13:36:09 +0000 Subject: [PATCH 5/6] =?UTF-8?q?update=20zh-cn/readme.md.=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E7=A7=BB=E6=A4=8D=E6=8C=87=E5=AF=BC=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zh-cn/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh-cn/readme.md b/zh-cn/readme.md index 48ab06e41b4..a3fabc30a8c 100644 --- a/zh-cn/readme.md +++ b/zh-cn/readme.md @@ -20,7 +20,7 @@ - [无屏摄像头类产品](device-dev/guide/无屏摄像头类产品.md)(摄像头控制) - [带屏摄像头类产品](device-dev/guide/带屏摄像头类产品.md)(屏幕和摄像头控制、视觉应用开发) - - porting:[移植适配](device-dev/guide/Readme-CN.md) + - porting:[移植适配](device-dev/porting/Readme-CN.md) - [三方芯片移植指导](device-dev/porting/三方芯片移植指导.md) - [三方库移植指导](device-dev/porting/三方库移植指导.md) -- Gitee From a69dd991e5b60387f7c2e325abc6809f45a01603 Mon Sep 17 00:00:00 2001 From: duangavin123 Date: Thu, 24 Jun 2021 13:36:58 +0000 Subject: [PATCH 6/6] =?UTF-8?q?update=20zh-cn/readme.md.=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E7=A7=BB=E6=A4=8D=E6=8C=87=E5=8D=97=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zh-cn/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh-cn/readme.md b/zh-cn/readme.md index a3fabc30a8c..7a117bfee0f 100644 --- a/zh-cn/readme.md +++ b/zh-cn/readme.md @@ -44,7 +44,7 @@ - [平台驱动](device-dev/guide/平台驱动开发示例.md) - [外设驱动](device-dev/guide/外设驱动开发示例.md) - - porting:[移植适配](device-dev/guide/Readme-CN.md) + - porting:[移植适配](device-dev/porting/Readme-CN.md) - [三方芯片移植指导](device-dev/porting/三方芯片移植指导.md) - [三方库移植指导](device-dev/porting/三方库移植指导.md) -- Gitee

学习路径

+

开发者业务

+

相关文档

+

了解OpenHarmony

+

整体认知OpenHarmony

+
+

获取开发资源

+

准备开发前相关资源

+
+

快速入门

+

快速熟悉OpenHarmony环境搭建、编译、烧录、调测、运行。

+

标准系统快速入门

+

基础能力使用

+

使用OpenHarmony提供的基础能力

+
+

进阶开发

+

结合系统能力开发智能设备

+
+

移植适配

+
  • 针对特定芯片做移植适配
  • 对三方库进行移植适配
+

三方库移植指导

+

贡献组件

+

OpenHarmony贡献功能组件

+
+

参考

+

开发参考

+

移植适配

  • 针对特定芯片做移植适配
  • 对三方库进行移植适配
+
  • 对三方库进行移植适配

三方库移植指导

移植适配

  • 对三方库进行移植适配
+
    对三方库进行移植适配

三方库移植指导