鸿蒙OpenHarmony【轻量系统 环境搭建】 (基于Hi3861开发板)

安装Hi3861开发板特有环境

除上述[安装库和工具集]和[安装编译工具]外,针对Hi3861开发板还需要安装特定的编译工具。

工具要求

表1 Hi3861 WLAN模组需要安装的编译工具

开发工具 用途
SCons3.0.4+ 编译构建工具
python模块:setuptools、kconfiglib、pycryptodome、six、ecdsa 编译构建工具
gcc riscv32 编译构建工具

操作步骤

相关操作在Ubuntu环境下进行。

安装Scons

  1. 运行如下命令,安装SCons安装包。

    cpp 复制代码
    python3 -m pip install scons
  2. 运行如下命令,查看是否安装成功。如果安装成功,查询结果下图所示。

    cpp 复制代码
    scons -v

    图1 SCons安装成功界面,版本要求3.0.4以上

鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

安装python模块

  1. 运行如下命令,安装python模块setuptools。

    cpp 复制代码
    pip3 install setuptools
  2. 安装GUI menuconfig工具(Kconfiglib),建议安装Kconfiglib 13.2.0+版本,任选如下一种方式。

    • 命令行方式:

      cpp 复制代码
      sudo pip3 install kconfiglib
    • 安装包方式:

      1. 下载.whl文件(例如:kconfiglib-13.2.0-py2.py3-none-any.whl)。 下载路径:"https://pypi.org/project/kconfiglib#files"

      2. 运行如下命令,安装.whl文件。

        复制代码
        sudo pip3 install kconfiglib-13.2.0-py2.py3-none-any.whl
  3. 安装pycryptodome,任选如下一种方式。

    安装升级文件签名依赖的Python组件包,包括:pycryptodome、six、ecdsa。安装ecdsa依赖six,请先安装six,再安装ecdsa。

    • 命令行方式:

      cpp 复制代码
      sudo pip3 install pycryptodome
    • 安装包方式:

      1. 下载.whl文件(例如:pycryptodome-3.9.9-cp38-cp38-manylinux1_x86_64.whl)。 下载路径:"https://pypi.org/project/pycryptodome/#files"。

      2. 运行如下命令,安装.whl文件。

        cpp 复制代码
        sudo pip3 install pycryptodome-3.9.9-cp38-cp38-manylinux1_x86_64.whl
  4. 安装six,任选如下一种方式。

    • 命令行方式:

      cpp 复制代码
      sudo pip3 install six --upgrade --ignore-installed six
    • 安装包方式:

      1. 下载.whl文件(例如:six-1.12.0-py2.py3-none-any.whl)。 下载路径:"https://pypi.org/project/six/#files"

      2. 运行如下命令,安装.whl文件。

        cpp 复制代码
        sudo pip3 install six-1.12.0-py2.py3-none-any.whl
  5. 安装ecdsa,任选如下一种方式。

    • 命令行方式:

      cpp 复制代码
      sudo pip3 install ecdsa
    • 安装包方式:

      1. 下载.whl文件(例如:ecdsa-0.14.1-py2.py3-none-any.whl)。 下载路径:"https://pypi.org/project/ecdsa/#files"

      2. 运行如下命令,安装.whl文件。

        cpp 复制代码
        sudo pip3 install ecdsa-0.14.1-py2.py3-none-any.whl

安装gcc_riscv32(WLAN模组类编译工具链)

须知:

  • Hi3861开发板平台仅支持使用libgcc运行时库的静态链接,不建议开发者使用libgcc运行时库的动态链接,以免产品需遵从GPLV3许可证。
  • 通过下述步骤2-14,编译好了gcc_riscv32镜像,提供给开发者[直接下载]使用。直接下载gcc_riscv32镜像的开发者可省略下述2-14步。
  1. 打开Linux编译服务器终端。

  2. 下载riscv-gnu-toolchain交叉编译工具链。

    cpp 复制代码
    git clone --recursive https://gitee.com/mirrors/riscv-gnu-toolchain.git
  3. 打开文件夹riscv-gnu-toolchain,先删除空文件夹,以防止下载newlib,binutils,gcc时冲突。

    cpp 复制代码
    cd riscv-gnu-toolchain && rm -rf riscv-newlib && rm -rf riscv-binutils && rm -rf riscv-gcc
  4. 下载riscv-newlib-3.0.0。

    cpp 复制代码
    git clone -b riscv-newlib-3.0.0 https://github.com/riscv/riscv-newlib.git
  5. 下载riscv-binutils-2.31.1。

    cpp 复制代码
    git clone -b riscv-binutils-2.31.1 https://github.com/riscv/riscv-binutils-gdb.git
  6. 下载riscv-gcc-7.3.0。

    cpp 复制代码
    git clone -b riscv-gcc-7.3.0 https://github.com/riscv/riscv-gcc
  7. 添加riscv-gcc-7.3.0补丁。

    访问gcc官方补丁链接[89411],[86724],按照补丁链接中要求的修改,手动将变更添加到对应的.c和.h文件中,注意由于patch版本与下载的gcc版本有所偏差,行数有可能对应不上,请自行查找patch中的关键字定位到对应行。

  8. 下载[GMP 6.1.2],并解压安装。

    cpp 复制代码
    ​
    tar -xvf gmp-6.1.2.tar.bz2 && mkdir build_gmp && cd build_gmp && ../gmp-6.1.2/configure --prefix=/usr/local/gmp-6.1.2 --disable-shared --enable-cxx && make && make install
    
    ​
  9. 下载[mpfr-4.0.2 ],并解压安装。

    cpp 复制代码
    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
  10. 下载mpc-1.1.0 ,并解压安装。

    cpp 复制代码
    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
  11. 打开文件夹riscv-gnu-toolchain,新建工具链输出目录。

    cpp 复制代码
    cd /opt && mkdir gcc_riscv32
  12. 编译binutils。

    cpp 复制代码
    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 && cd ..
  13. 编译newlib。

    cpp 复制代码
    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 && cd ..
  14. 编译gcc。

    cpp 复制代码
    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
  1. 设置环境变量。

说明:

复制代码
>
> 如果直接采用编译好的riscv32 gcc包,请先执行以下命令将压缩包解压到根目录:
>
> ```
> tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~
> ```
>
> 注意之后设置和生效环境变量时,所设置的路径为根目录。

打开`.bashrc`文件。

cpp 复制代码
vim /opt/.bashrc
复制代码
将以下命令拷贝到的最后一行,保存并退出。
cpp 复制代码
export PATH=/opt/gcc_riscv32/bin:$PATH
  1. 生效环境变量。

    cpp 复制代码
    source /opt/.bashrc
  2. Shell命令行中输入如下命令,如果能正确显示编译器版本号,表明编译器安装成功。

    cpp 复制代码
    riscv32-unknown-elf-gcc -v

我们程序员都知道学习开发技术,最先是从语言学起,鸿蒙语言有TS、ArkTS等语法,那么除了这些基础知识之外,其核心技术点有那些呢?下面就用一张整理出的鸿蒙学习路线图表示:

从上面的OpenHarmony技术梳理来看,鸿蒙的学习内容也是很多的。现在全网的鸿蒙学习文档也是非常的少 ,下面推荐一些:完整内容可在头像页保存,或这qr23.cn/AKFP8k甲助力

内容包含:《鸿蒙NEXT星河版开发学习文档》

  • ArkTS
  • 声明式ArkUI
  • 多媒体
  • 通信问题
  • 系统移植
  • 系统裁剪
  • FW层的原理
  • 各种开发调试工具
  • 智能设备开发
  • 分布式开发等等。

这些就是对往后开发者的分享,希望大家多多点赞关注喔!

相关推荐
芯岭技术郦2 小时前
批量不到1元,芯岭技术集成 2.4G 射频32 位 MCU 与 USB2.0的超低功耗 SoC XL2417U
单片机·嵌入式硬件·射频工程
少年、潜行5 小时前
【开源】基于STM32的无线姿态检测仪设计
stm32·嵌入式硬件·开源·姿态检测仪
想你依然心痛6 小时前
HarmonyOS 6 悬浮导航 + 沉浸光感:打造鸿蒙智能体驱动的沉浸式会议效率助手
华为·ar·harmonyos·智能体
三品吉他手会点灯7 小时前
STM32F103 学习笔记-22-DMA(第1节)-DMA功能框图讲解和DMA初始化结构体讲解
笔记·stm32·单片机·嵌入式硬件·学习
华普微HOPERF9 小时前
电视冰箱洗衣机、空调风扇热水器,Matter协议如何塑造全屋智能?
嵌入式硬件·物联网·智能家居·matter协议·全屋智能
●VON9 小时前
BodyAR 从零开始:开发环境搭建与完整项目配置指南
华为·harmonyos·鸿蒙·新特性
ThornArmor9 小时前
【控制篇】斩断无休止空转:4-bit 指令集里的跳转律令与时序状态机
c语言·汇编·c++·单片机·嵌入式硬件
篮子里的玫瑰9 小时前
STM32/MCU【IAP在线升级】全流程深度解析与实战指南
stm32·单片机·嵌入式硬件
深圳市青牛科技实业有限公司10 小时前
D3815C30V/0.8A高调光比 LED恒流驱动器介绍
单片机·嵌入式硬件·人机交互·摄像机
2301_7803567011 小时前
加入开源鸿蒙生态:全视通与开鸿启源共建智慧医康养新场景
harmonyos