[文章]

WiFi IoT 智能家居套件开发环境搭建

2021-2-14 16:48:53  408 WiFi IoT 智能家居 鸿蒙
分享
7


1. 准备材料
搭建 WiFi IoT 智能家居套件开发环境前需要准备如下材料:
硬件描述
目标开发板如 Hi3861、Hi3516DV300、Hi3518EV300
Linux 编译服务器Ubuntu16.04 及以上 64 位系统版本,Shell 使用 bash
Windows 工作台Windows XP/Windows7/Windows10
开发人员可以在 Windows 工作台中进行程序开发,或者远程登录到 Linux 服务器进行程序开发。典型的硬件连接关系如下图所示。
硬件环境连接关系.png


1.1 Linux 构建工具要求
Linux 服务器通用环境配置需要的工具及其获取途径如下表所示。
  • 交叉编译器 gcc_riscv32
    • 用途:交叉编译工具
    • 获取途径:https://repo.huaweicloud.com/HarmonyOS/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz

  • Python3.7+
    • 用途:编译构建工具
    • 获取途径:https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz

  • SCons3.0.4+
    • 用途:编译构建工具
    • 获取途径:通过互联网获取

  • bash
    • 用途:命令处理器
    • 获取途径:通过互联网获取

  • build-essential
    • 用途:编译依赖的基础软件包
    • 获取途径:通过互联网获取

  • gn
    • 用途:产生 ninja 编译脚本
    • 获取途径:https://repo.huaweicloud.com/harmonyos/compiler/gn/1523/linux/gn.1523.tar

  • ninja
    • 用途:执行 ninja 编译脚本
    • 获取途径:https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar



1.2 Windows 开发工具要求
  • Visual Studio Code
    • 用途:代码编辑工具
    • 获取途径:https://code.visualstudio.com/

  • HUAWEI DevEco Device Tool
    • 用途:IDE开发工具,支持WLAN模组的代码编写、远程编译、版本烧录、串口调试等功能。
    • 说明:HUAWEI DevEco Device Tool 是 OpenHarmony 面向智能设备开发者提供的一站式集成开发环境,支持 OpenHarmony 的组件按需定制,支持 C/C++ 语言,以插件的形式部署在 Visual Studio Code 上。
    • 获取途径:https://device.harmonyos.com/cn/ide

  • PuTTY 或其他超级终端
    • 用途:远程连接 Linux 编译服务器,连接模组串口工具。
    • 获取途径:通过互联网获取(如:https://www.putty.org/)

  • ch341SER.EXE
    • 用途:USB转串口驱动
    • 获取途径:http://www.wch.cn/search?q=ch340g&t=downloads



2. 安装步骤
2.1 安装 Linux 编译环境(Docker 方式)
Linux 编译环境可以通过 Docker 方式快速安装,具体请参见 Docker方式获取编译环境 的“搭建Docker环境”。
OpenHarmony 为开发者提供了两种 Docker 环境,以帮助开发者快速完成复杂的开发环境准备工作。两种 Docker 环境及适用场景如下:
  • 基于 HPM 的 Docker 环境:适用于使用 HPM 工具进行发行版编译的场景。
  • 独立 Docker 环境:适用于直接基于 Ubuntu、Windows 操作系统平台进行版本编译的场景。

docker_dist 是一个 HPM 系统中的模板组件,能够帮助用户快速初始化 HPM 工程,利用 docker 镜像来快速编译 OpenHarmony 发行版,在很大程度上简化了编译前的环境配置。开发者在配置好 Ubuntu 和 hpm-cli 开发环境后,可以通过以下步骤来使用我们提供的 Docker 环境。

2.1.1 安装 hpm
执行如下命令安装 hpm-cli 工具
npm install -g @ohos/hpm-cli
提示:需要提前安装 Node.js,推荐安装 Node.js 12.x(包含 npm 6.14.4)或更高版本。
执行 hpm -V 或 hpm --version 检查是否安装成功。
2.1.2 搭建 Docker 环境
  • 初始化安装模板。在任意工作目录中执行以下命令。
    hpm init -t @ohos/docker_dist
  • 修改 publishAs。
    因为获取到的是模板类型的包,要把包的类型改为需要的类型。 在当前目录下打开 bundle.json 文件,把"publishAs"字段的值由"template"改为"distribution"。
  • 选择解决方案。设置 wifiiot 发行版的环境变量。
    export solution=@ohos/wifi_iot
  • 执行编译。以下命令可以自动安装docker, 拉取镜像,并且在容器中开始运行对应解决方案的拉取和编译。
    hpm run docker

2.2 安装 Linux 编译环境(安装包方式)
须知:
  • 如果后续通过“HPM组件方式”或“HPM包管理器命令行工具方式”获取源码,不需要安装 gn、ninja、gcc_riscv32 编译工具。
  • (推荐)如果后续通过“镜像站点方式”或“代码仓库方式”获取源码,需要安装 gn、ninja、gcc_riscv32 编译工具。安装 gn、ninja、gcc_riscv32 编译工具时,请确保编译工具的环境变量路径唯一。

2.2.1 连接 Linux 服务器2.2.2 将 Linux shell 改为 bash
查看 shell 是否为 bash,在终端运行如下命令
ls -l /bin/sh
如果显示为“/bin/sh -> bash”则为正常,否则请按以下方式修改:
方法一:在终端运行如下命令,然后选择 no。
sudo dpkg-reconfigure dash
方法二:先删除sh,再创建软链接。
sudo rm -RF /bin/sh
sudo ln -s /bin/bash /bin/sh2.2.3 安装 Python 环境
  • 打开 Linux 编译服务器终端。
  • 输入如下命令,查看 python 版本号,需使用 python3.7 以上版本。
    python3 --version
    如果低于 python3.7 版本,不建议直接升级,而是再安装一份。以 python3.8 为例,对于 Ubuntu 18 以上版本,运行如下命令即可。
    sudo apt-get install python3.8
  • 确定 python 安装好后,将 python 路径链接到"/usr/bin/python"。
    输入如下命令,查看 python 是否正确软链接到 python3.8。
    python --version
    如果回显不是python 3.8.5,则运行如下命令,查看python3.8所在目录:
    which python3.8
    将以下命令中的 "python3.8-path" 替换为 "which python3.8" 命令执行后的回显路径
    cd /usr/bin
    sudo rm python
    sudo rm python3
    sudo ln -s <python3.8-path> python
    sudo ln -s <python3.8-path> python3
    python3 --version
    python --version
  • 安装并升级 Python 包管理工具(pip3),任选如下一种方式。
    sudo apt-get install python3-setuptools python3-pip -y
    sudo pip3 install --upgrade pip
  • 运行如下命令,安装 python 模块 setuptools。
    pip3 install setuptools
  • 安装 GUI menuconfig 工具(Kconfiglib),建议安装 Kconfiglib 13.2.0+ 版本,任选如下一种方式。
    sudo pip3 install kconfiglib
  • 安装 pycryptodome、six、ecdsa。
    安装升级文件签名依赖的 Python 组件包,包括:pycryptodome、six、ecdsa。安装 ecdsa 依赖 six,请先安装 six,再安装 ecdsa。
    sudo pip3 install pycryptodome
    sudo pip3 install six --upgrade --ignore-instalLED six
    sudo pip3 install ecdsa
2.2.4 安装 Scons
  • 打开 Linux 编译服务器终端。
  • 运行如下命令,安装 SCons 安装包。
    sudo apt-get install scons -y
2.2.5 安装 gn
  • 打开 Linux 编译服务器终端。
  • 下载 gn 工具。
    wget https://repo.huaweicloud.com/harmonyos/compiler/gn/1523/linux/gn.1523.tar
  • 解压 gn 安装包至 ~/gn 路径下。
    tar -xvf gn.1523.tar -C ~/
  • 设置环境变量。
    将以下命令拷贝到 ~/.bashrc 文件的最后一行,保存并退出。
    export PATH=~/gn:$PATH
  • 生效环境变量。
    source ~/.bashrc
2.2.6 安装 ninja
  • 打开 Linux 编译服务器终端。
  • 下载 ninja 工具。
    wget https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar
  • 解压 ninja 安装包至 ~/ninja 路径下。
    tar -xvf ninja.1.9.0.tar -C ~/
  • 设置环境变量。
    将以下命令拷贝到 ~/.bashrc 文件的最后一行,保存并退出。
    export PATH=~/ninja:$PATH
  • 生效环境变量。
    source ~/.bashrc
2.2.7 安装 gcc_riscv32(WLAN 模组类编译工具链)
注意: Hi3861平台仅支持使用 libgcc 运行时库的静态链接,不建议开发者使用 libgcc 运行时库的动态链接,会导致商业分发时被 GPL V3 污染。
  • 打开 Linux 编译服务器终端。
  • 环境准备,请安装"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
  • 下载 riscv-gnu-toolchain 交叉编译工具链。
    git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
  • 打开文件夹 riscv-gnu-toolchain,先删除空文件夹,以防止下载 newlib,binutils,gcc 时冲突。
    cd riscv-gnu-toolchain && rm -rf riscv-newlib && rm -rf riscv-binutils && rm -rf riscv-gcc
  • 下载 riscv-newlib-3.0.0。
    git clone -b riscv-newlib-3.0.0 https://github.com/riscv/riscv-newlib.git
  • 下载 riscv-binutils-2.31.1。
    git clone -b riscv-binutils-2.31.1 https://github.com/riscv/riscv-binutils-gdb.git
  • 下载 riscv-gcc-7.3.0。
    git clone -b riscv-gcc-7.3.0 https://github.com/riscv/riscv-gcc
  • 下载 riscv-gcc-7.3.0 补丁。
    拷贝 gcc 官方 89411.patch,拷贝 gcc 官方 86724.patch,并对应代码做一定的行数号修改,将两个 patch 放入 riscv-gcc 目录
    cd riscv-gcc && patch -p1 < 89411.patch && patch -p1 < 86724.patch
    patch 过程中如遇到 Hunk #1 FAILED 等问题,请对应到相应 .c 文件,修改 patch 代码所在行数
  • 下载 GMP 6.1.2,并解压安装。
    tar -xvf mpfr-4.0.2.tar.gz && mkdir build_mpfr && cd build_mpfr && ../mpfr-4.0.2/configure --prefix=/usr/local/mpfr-4.0.2 --with-gmp=/usr/local/gmp-6.1.2 --disable-shared && make && make install
  • 下载 mpfr-4.0.2 ,并解压安装。
    tar -xvf mpfr-4.0.2.tar.gz && mkdir build_mpfr && cd build_mpfr && ../mpfr-4.0.2/configure --prefix=/usr/local/mpfr-4.0.2 --with-gmp=/usr/local/gmp-6.1.2 --disable-shared && make && make install
  • 下载 mpc-1.1.0  ,并解压安装。
    tar -xvf mpc-1.1.0.tar.gz && mkdir build_mpc && cd build_mpc && ../mpc-1.1.0/configure --prefix=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.2 --disable-shared && make && make install
  • 打开文件夹 riscv-gnu-toolchain,新建工具链输出目录。
    cd /opt && mkdir gcc_riscv32
  • 编译 bintutils。
    mkdir build_binutils && cd build_binutils && ../riscv-binutils-gdb/configure --prefix=/opt/gcc_riscv32 --target=riscv32-unknown-elf --with-arch=rv32imc --with-abi=ilp32 --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --enable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-multilib --enable-poison-system-directories --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib --with-system-zlib CFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" CFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" --bindir=/opt/gcc_riscv32/bin --libexecdir=/opt/gcc_riscv32/riscv32 --libdir=/opt/gcc_riscv32 --includedir=/opt/gcc_riscv32 && make -j16 && make install
  • 编译 newlib。
    mkdir build_newlib && cd build_newlib && ../riscv-newlib/configure --prefix=/opt/gcc_riscv32 --target=riscv32-unknown-elf --with-arch=rv32imc --with-abi=ilp32 --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --enable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-multilib --enable-poison-system-directories --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib --with-system-zlib CFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" \CXXFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" CFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" --bindir=/opt/gcc_riscv32/bin --libexecdir=/opt/gcc_riscv32 --libdir=/opt/gcc_riscv32 --includedir=/opt/gcc_riscv32 && make -j16 && make install
  • 编译 gcc。
    mkdir build_gcc && cd build_gcc && ../riscv-gcc/configure --prefix=/opt/gcc_riscv32 --target=riscv32-unknown-elf --with-arch=rv32imc --with-abi=ilp32 --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --enable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-multilib --enable-poison-system-directories --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib --with-system-zlib CFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" LDFLAGS="-Wl,-z,relro,-z,now,-z,noexecstack" CXXFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" CFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" --with-headers="/opt/gcc-riscv32/riscv32-unknown-elf/include" --with-mpc=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.2 && make -j16 && make install
  • 设置环境变量。
    将以下命令拷贝到 ~/.bashrc 文件的最后一行,保存并退出。
    export PATH=/opt/gcc_riscv32/bin:$PATH
  • 生效环境变量。
    source ~/.bashrc
  • Shell 命令行中输入如下命令,如果能正确显示编译器版本号,表明编译器安装成功。
    riscv32-unknown-elf-gcc -v

太麻烦了,还是用 Docker 吧!

2.3 安装 Windows 开发环境
浏览器打开 https://device.harmonyos.com/cn/ide,下载 DevEco Device Tool。
OpenHarmony IDE 工具 DevEco Device Tool 集成了终端工具的能力,安装前请确认系统已经安装好 Python3。
DevEco_Device_Tool_IDE.png
提示:DevEco Device Tool 2.0 Beta1 已经发布,支持 Linux 烧录!
关于 DevEco Device Tool 的具体使用请查看 HUAWEI DevEco Device Tool 使用指南

评论

您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发文章
快速回复
扫一扫分享
返回顶部 返回列表