`
1. 准备材料搭建 WiFi IoT 智能家居套件开发环境前需要准备如下材料:
硬件描述
目标开发板如 Hi3861、Hi3516DV300、Hi3518EV300
Linux 编译服务器Ubuntu16.04 及以上 64 位系统版本,Shell 使用 bash
Windows 工作台Windows XP/Windows7/Windows10
开发人员可以在 Windows 工作台中进行程序开发,或者远程登录到 Linux 服务器进行程序开发。典型的硬件连接关系如下图所示。
1.1 Linux 构建工具要求Linux 服务器通用环境配置需要的工具及其获取途径如下表所示。
交叉编译器 gcc_riscv32
Python3.7+
SCons3.0.4+
bash
build-essential
用途:编译依赖的基础软件包
获取途径:通过互联网获取
gn
ninja
1.2 Windows 开发工具要求
2. 安装步骤
2.1 安装 Linux 编译环境(Docker 方式)Linux 编译环境可以通过 Docker 方式快速安装,具体请参见 Docker方式获取编译环境 的“搭建Docker环境”。
OpenHarmony 为开发者提供了两种 Docker 环境,以帮助开发者快速完成复杂的开发环境准备工作。两种 Docker 环境及适用场景如下:
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 编译环境(安装包方式)须知:
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/sh
2.2.3 安装 Python 环境确定 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
2.2.4 安装 Scons打开 Linux 编译服务器终端。
运行如下命令,安装 SCons 安装包。
sudo apt-get install scons -y
2.2.5 安装 gn2.2.6 安装 ninja2.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.patchpatch 过程中如遇到 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 ~/.bashrcShell 命令行中输入如下命令,如果能正确显示编译器版本号,表明编译器安装成功。
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 2.0 Beta1 已经发布,支持 Linux 烧录!
关于 DevEco Device Tool 的具体使用请查看 HUAWEI DevEco Device Tool 使用指南
`