# Setting Up a Development Environment ## Environment Requirements ## Hardware - Linux server - Windows workstation \(host computer\) - Hi3861 WLAN module - USB Type-C cable used to connect to Windows workstation and Hi3861 WLAN module [Figure 1](#fa54d47112b684c65b3dbf1779413545a) shows the hardware connections. **Figure 1** Hardware connections ![](figures/hardware-connections.png "hardware-connections") ## Software **Table 1** Requirements on the development platform

Hardware

Software

Description

Remarks

Linux compile server

Operating system

Ubuntu 16.04 64-bit server or later (Use bash as the shell.)

You can develop programs on the Windows workstation or Linux server via a remote login.

Windows workstation

Operating system

Windows XP/Windows7/Windows10

## Build Tools for Linux The following table describes the tools required for setting up the general environment for a Linux server and how to obtain these tools. **Table 2** Development tools and obtaining methods

Development Tool

Description

How to Obtain

gcc_riscv32

Executes script cross compilation.

https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz

Python3.7+

Executes script compilation.

https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz

SCons3.0.4+

Executes script compilation.

Internet

bash

Executes commands.

Internet

build-essential

Provides basic software package for compilation.

Internet

gn

Generates ninja compilation scripts.

https://repo.huaweicloud.com/harmonyos/compiler/gn/1523/linux/gn.1523.tar

ninja

Executes ninja compilation scripts.

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

## Development Tools for Windows **Table 3** Development tools and obtaining methods

Development Tool

Description

How to Obtain

Visual Studio Code

Edits code.

https://code.visualstudio.com/

HUAWEI DevEco Device Tool

Supports code editing, compilation, burning, and debugging.

NOTE:

HUAWEI DevEco Device Tool is a one-stop integrated development environment (IDE) provided for developers of OpenHarmony-based smart devices. It supports C and C++ languages and is installed in Visual Studio Code as a plug-in.

https://device.harmonyos.com/cn/ide

IPOP, PuTTY, or other HyperTerminal

Remotely connects to a Linux compile server or a serial port.

Internet (for example, https://www.putty.org/)

CH341SER.EXE

Identifies serial port device to transmit data.

http://www.wch.cn/search?q=ch340g&t=downloads

## Installing Basic Compilation Environment ## Connecting to a Linux Server Using PuTTY to log in to a Linux server from a PC running Windows 1. Open [PuTTY](https://www.putty.org/), enter the IP address of the Linux server, and click **Open**. **Figure 2** PuTTY configuration ![](figures/putty-configuration.png "putty-configuration") 2. Click **Yes** in the PuTTY **Security Alert** dialog box. 3. Enter the account and password. **Figure 3** Login ![](figures/login.png "login") 4. The login is successful. **Figure 4** Successful login ![](figures/successful-login.png "successful-login") ## Changing Linux Shell to Bash Run the following command to check whether bash is used as the shell: ``` ls -l /bin/sh ``` If **/bin/sh -\> bash** is not displayed, do as follows to change the shell to bash. **Method 1:** Run the following command on the device and then click **No**. ``` sudo dpkg-reconfigure dash ``` **Method 2:** Run the **rm -rf /bin/sh** command to delete sh and then run the sudo **ln -s /bin/bash /bin/sh** command to create a new soft link. ``` rm -rf /bin/sh sudo ln -s /bin/bash /bin/sh ``` ## Installing a Python Environment 1. Start a Linux server. 2. Run the **python3 --version** command to check the Python version. If the Python version is not 3.7 or later, do as follows to install an appropriate Python version, for example, Python 3.8: - If the Ubuntu version is 18, run the **sudo apt-get install python3.8** command. - If the Ubuntu version is 16, download the installation package and install Python. 1. Run the following command to install Python environment dependencies \(gcc, g++, make, zlib, libffi\): "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 " 2. Obtain [Python 3.8.5 installation package](https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz), save it to the Linux server, and run the following command to install it: "tar -xvzf Python-3.8.5.tgz && cd Python-3.8.5 && sudo ./configure && make && sudo make install" 3. After Python-3.8.5 is installed, run **which python3.8** to display a path and link it to **/usr/bin/python**. For example: "cd /usr/bin && rm python && ln -s /usr/local/bin/python3.8 python && python --version" - Run the **sudo apt-get install python3-setuptools python3-pip -y** command to install the Python package management tool. \(The root/sudo permission is required.\) Run the **sudo pip3 install --upgrade pip** command to upgrade **pip3**. Alternatively, install the Python package management tool as instructed by the official website. Specifically, run the **curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py** command to download the script **get-pip.py** and run the **python get-pip.py** command to install this script. 3. Run the **pip3 install setuptools** command to install setuptools module of Python. 4. Run the **sudo pip3 install kconfiglib** command to install **GUI menuconfig**. The Kconfiglib 13.2.0 or later is recommended. \(The root/sudo permission is required.\) Alternatively, you can do as follows to install Kconfiglib 13.2.0 or later: 1. Download the .whl file, for example, **kconfiglib-13.2.0-py2.py3-none-any.whl**, from [https://pypi.org/project/kconfiglib\#files](https://pypi.org/project/kconfiglib#files). 1. Run the **sudo pip3 install kconfiglib-xxx.whl** command to install the .whl file, for example, **sudo pip3 install kconfiglib-13.2.0-py2.py3-none-any.whl**\). \(The root/sudo permission is required.\) 2. If you encounter the error **subprocess.CalledProcessError: Command '\('lsb\_release', '-a'\)' returned non-zero exit status 1.**, run the **find / -name lsb\_release** command, for example, **rm -rf /usr/bin/lsb\_release** to locate and delete it **sb\_release**. 5. Run the **sudo pip3 install pycryptodome** command to install pycryptodome or do as follows: >![](public_sys-resources/icon-note.gif) **NOTE:** >- Install the Python component packages on which the file signature depends, including pycryptodome, six, and ecdsa. >- As the installation of ecdsa depends on that of six, install six first. 1. Download the .whl file, for example, **pycryptodome-3.7.3-cp37-cp37m-manylinux1\_x86\_64.whl** from [https://pypi.org/project/pycryptodome/\#files](https://pypi.org/project/pycryptodome/#files). 1. Run the **sudo pip3 install pycryptodome-xxx.whl** command to install the .whl file, for example, **sudo pip3 install pycryptodome-3.7.3-cp37-cp37m-manylinux1\_x86\_64.whl**. After the installation is complete, the message **Successfully installed pycryptodome-3.7.3** is displayed. 6. Run the **sudo pip3 install six --upgrade --ignore-installed six** command to install **six** or do as follows: 1. Download the .whl file, for example, **six-1.12.0-py2.py3-none-any.whl** from [https://pypi.org/project/six/\#files](https://pypi.org/project/six/#files). 1. Run the **sudo pip3 install six-xxx.whl** command to install the .whl file, for example, **sudo pip3 install six-1.12.0-py2.py3-none-any.whl**. \(The root/sudo permission is required.\) After the installation is complete, the message **Successfully installed six-1.12.0** is displayed. 7. Run the **sudo pip3 install ecdsa** command to install **ecdsa** or do as follows: 1. Download the .whl file, for example, **ecdsa-0.14.1-py2.py3-none-any.whl** from [https://pypi.org/project/ecdsa/\#files](https://pypi.org/project/ecdsa/#files). 1. Run the **sudo pip3 install ecdsa-xxx.whl** command to install the .whl file, for example, **sudo pip3 install ecdsa-0.14.1-py2.py3-none-any.whl**. \(The root/sudo permission is required.\) After the installation is complete, the message **Successfully installed ecdsa-0.14.1** is displayed. ## Installing Scons 1. Start a Linux server. 2. Run the **sudo apt-get install scons -y** command to install the SCons package. \(The root/sudo permission is required.\) Run the **sudo apt-get install scons -y** command. If the installation package cannot be found in the software source, do as follows: 1. Download the source code package from [https://scons.org/pages/download.html](https://scons.org/pages/download.html). The recommended SCons version is 3.0.4 or later. 2. Decompress the source code package to any directory. 3. Enter the source code directory and run the **sudo python3 setup.py install** command to install the source code package. \(The root/sudo permission is required.\) 3. Run the **scons -v** command to check whether the installation is successful. **Figure 5** Successful installation ![](figures/successful-installation.png "successful-installation") ## Installing Compilation Tools >![](public_sys-resources/icon-notice.gif) **NOTICE:** >- If you acquire the source code using an HPM component or HPM CLI tool, compilation tools like **gn**, **ninja**, **gcc\_riscv32** are not required. >- \(Recommended\) If you obtain the source code via the mirror site or code repository, install compilation tools such as **gn**, **ninja**, and **gcc\_riscv32**. > Ensure that only **gn**, **ninja**, and **gcc\_riscv32** are used for the compilation environment of Hi3861 WLAN module. ## Installing gn 1. Start a Linux server. 2. Download [gn](https://repo.huaweicloud.com/harmonyos/compiler/gn/1523/linux/gn.1523.tar). 3. Decompress the **gn** installation package to the **tar -xvf gn.1523.tar -C \~/** in **\~/gn** directory. 4. Open the **\~/.bashrc** file in Vim and add a line of **export PATH=\~/gn:$PATH** to set an environment variable. 5. Run **source \~/.bashrc** to validate the environment variable. ## Installing ninjah 1. Start a Linux server. 2. Download [ninja](https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar). 3. Decompress the **ninja** installation package to **tar -xvf ninja.1.9.0.tar -C \~/** in **\~/ninja** directory. 4. Open the **\~/.bashrc** file in Vim and add a line of **export PATH=\~/ninja:$PATH** to set an environment variable. 5. Run **source \~/.bashrc** to validate the environment variable. ## Installing gcc\_riscv32 \(Compilation Toolchain for WLAN Module\) >![](public_sys-resources/icon-notice.gif) **NOTICE:** >The Hi3861 platform supports only the static link of the libgcc library. **The dynamic link is not recommended because version 3 of the GNU General Public License \(GPLv3\) will be polluted during commercial distribution.** 1. Start a Linux server. 2. Download [gcc\_riscv32](https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz). 3. Decompress the gcc\_riscv32 installation package to **tar -xvf gcc\_riscv32-linux-7.3.0.tar.gz -C \~/** in **/opt/gcc\_riscv32**. 4. Open the **\~/.bashrc** file in Vim and add a line of **export PATH=\~/gcc\_riscv32/bin:$PATH** to set an environment variable. 5. Run **source \~/.bashrc** to validate the environment variable. 6. Enter **$ riscv32-unknown-elf-gcc -v** in the shell command line to check whether the compiler is successfully installed. If the compiler version number is correctly displayed, the installation is successful.