OpenHarmony设备开发基于命令行开发轻量系统(基于Hi3861开发板)

您所在的位置:网站首页 arch安装时怎么连wifi OpenHarmony设备开发基于命令行开发轻量系统(基于Hi3861开发板)

OpenHarmony设备开发基于命令行开发轻量系统(基于Hi3861开发板)

2023-03-26 08:55| 来源: 网络整理| 查看: 265

版本:v3.2 Beta

安装Hi3861开发板特有环境

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

工具要求

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

开发工具

用途

SCons3.0.4+

编译构建工具

python模块:setuptools、kconfiglib、pycryptodome、six、ecdsa

编译构建工具

gcc riscv32

编译构建工具

操作步骤

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

安装Scons

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

python3 -m pip install scons

2.运行如下命令,查看是否安装成功。如果安装成功,查询结果下图所示。

scons -v

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

安装python模块

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

pip3 install setuptools

2.安装GUI menuconfig工具(Kconfiglib),建议安装Kconfiglib 13.2.0+版本,任选如下一种方式。

●   命令行方式:

sudo pip3 install kconfiglib

●   安装包方式:

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

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

sudo pip3 install kconfiglib-13.2.0-py2.py3-none-any.whl

3.安装pycryptodome,任选如下一种方式。安装升级文件签名依赖的Python组件包,包括:pycryptodome、six、ecdsa。安装ecdsa依赖six,请先安装six,再安装ecdsa。

●   命令行方式:

sudo pip3 install pycryptodome

●   安装包方式:

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

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

sudo pip3 install pycryptodome-3.9.9-cp38-cp38-manylinux1_x86_64.whl

4.安装six,任选如下一种方式。

●   命令行方式:

sudo pip3 install six --upgrade --ignore-installed six

●   安装包方式:

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

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

sudo pip3 install six-1.12.0-py2.py3-none-any.whl

4.安装ecdsa,任选如下一种方式。

●   命令行方式:

sudo pip3 install ecdsa

●   安装包方式:

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

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

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交叉编译工具链。

git clone --recursive https://gitee.com/mirrors/riscv-gnu-toolchain.git

3.打开文件夹riscv-gnu-toolchain,先删除空文件夹,以防止下载newlib,binutils,gcc时冲突。

cd riscv-gnu-toolchain && rm -rf riscv-newlib && rm -rf riscv-binutils && rm -rf riscv-gcc

4.下载riscv-newlib-3.0.0。

git clone -b riscv-newlib-3.0.0 https://github.com/riscv/riscv-newlib.git

5.下载riscv-binutils-2.31.1。

git clone -b riscv-binutils-2.31.1 https://github.com/riscv/riscv-binutils-gdb.git

6.下载riscv-gcc-7.3.0。

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​​,并解压安装。

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 ​​,并解压安装。

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​​ ,并解压安装。

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,新建工具链输出目录。

cd /opt && mkdir gcc_riscv32

12.编译binutils。

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。

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。

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

15.设置环境变量。

说明:

 如果直接采用编译好的riscv32 gcc包,请先执行以下命令将压缩包解压到根目录:

tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~

vim ~/.bashrc

将以下命令拷贝到.bashrc文件的最后一行,保存并退出。

export PATH=~/gcc_riscv32/bin:$PATH

16.生效环境变量。

source ~/.bashrc

17.Shell命令行中输入如下命令,如果能正确显示编译器版本号,表明编译器安装成功。

riscv32-unknown-elf-gcc -v编写“Hello World”程序

下方将通过修改源码的方式展示如何编写简单程序,输出“Hello world”。请在下载的源码目录中进行下述操作。

1.确定目录结构。开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:

. └── applications └── sample └── wifi-iot └── app └── my_first_app │── hello_world.c └── BUILD.gn

2.编写业务代码。新建./applications/sample/wifi-iot/app/my_first_app下的hello_world.c文件,在hello_world.c中新建业务入口函数HelloWorld,并实现业务逻辑。并在代码最下方,使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)

#include #include "ohos_init.h" #include "ohos_types.h" void HelloWorld(void) { printf("[DEMO] Hello world.\n"); } SYS_RUN(HelloWorld);

3.编写用于将业务构建成静态库的BUILD.gn文件。新建./applications/sample/wifi-iot/app/my_first_app下的BUILD.gn文件,并完成如下配置。如步骤1所述,BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。

static_library("myapp") { sources = [ "hello_world.c" ] include_dirs = [ "//utils/native/lite/include" ] }

●   static_library中指定业务模块的编译结果,为静态库文件libmyapp.a,开发者根据实际情况完成填写。

●   sources中指定静态库.a所依赖的.c文件及其路径,若路径中包含"//“则表示绝对路径(此处为代码根路径),若不包含”//"则表示相对路径。

●   include_dirs中指定source所需要依赖的.h文件路径。

4.添加新组件。修改文件build/lite/components/communication.json,添加组件hello_world_app的配置,如下所示为communication.json文件片段,"##start##“和”#



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3