HarmonyOS技术社区 · 2020年10月29日

【开发记录】OpenHarmony环境部署

硬件讲解:

wifi板
图片.png

底板:
图片.png

linux:

官网文档中提到所需安装的软件有:

交叉编译器gcc_riscv32

Python3.7+

bash

build-essential

SCons3.0.4+

ninja

gn

ubuntu20.04

python3.8.5(ubuntu20.04自带)

bash(5.0-6ubuntu1.1)(ubuntu20.04自带)
  1. SCons3.0.4+
$sudo apt-get install scons
$scons --version
scons(3.1.2-2)
  1. ninja

2.1安装re2c

$sudo apt install re2c
$ re2c --version
re2c 1.3

2.2安装ninja

$sudo apt install ninja-build

图片.png

  1. gn

3.1安装依赖clang

$sudo apt install clang
$clang++ --version
clang version 10.0.0-4ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

3.2安装gn

//下载gn
$git clone https://hub.fastgit.org/timni...
$cd ./gn
$./build/gen.py
$ ninja -C out
ninja: Entering directory `out'
[280/280] LINK gn_unittests
$ sudo cp ./out/gn /usr/bin
$ gn --version
1839 (815c8cb75)

  1. gcc_riscv32工具链

获取路径:https://repo.huaweicloud.com/...

步骤一:

打开Linux编译服务器终端。

步骤二:

环境准备,请安装以下软件,确保工具链能正确编译
gcc
g++
bison
flex
makeinfo

可通过以下命令查看是否安装,如:
$ gcc --version
$ g++ --version
$ bison --version
$ flex --version
$ makeinfo --version

如果没有安装,推荐但不限于:
$ 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://hub.fastgit.org/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://hub.fastgit.org/riscv/riscv-newlib.git

步骤六:

下载riscv-binutils-2.31.1
$ git clone -b riscv-binutils-2.31.1 https://hub.fastgit.org/riscv/riscv-binutils-gdb.git

步骤七:

下载riscv-gcc-7.3.0
$ git clone -b riscv-gcc-7.3.0 https://hub.fastgit.org/riscv/riscv-gcc

步骤八:

下载riscv-gcc-7.3.0补丁
拷贝gcc官方89411.patch,并对应代码做一定的行数号修改:
https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=026216a753ef0a757a9e368a59fa667ea422cf09;hp=2a23a1c39fb33df0277abd4486a3da64ae5e62c2
拷贝gcc官方86724.patch:
https://gcc.gnu.org/git/?p=gcc.git;a=blobdiff;f=gcc/graphite.h;h=be0a22b38942850d88feb159603bb846a8607539;hp=4e0e58c60ab83f1b8acf576e83330466775fac17;hb=b1761565882ed6a171136c2c89e597bc4dd5b6bf;hpb=fbd5f023a03f9f60c6ae36133703af5a711842a3
将两个patch放入 riscv-gcc目录
$ cd riscv-gcc
$ patch -p1 < 89411.patch
$ patch -p1 < 86724.patch
patch过程中如遇到Hunk #1 FAILED等问题,请对应到相应.c文件,修改patch代码所在行数

步骤九:

下载GMP 6.1.2 ,并解压安装:https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2
运行以下命令:
$ 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

步骤十:

下载mpfr-4.0.2 ,并解压安装:https://www.mpfr.org/mpfr-4.0.2/mpfr-4.0.2.tar.gz
运行以下命令:
$ 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 ,并解压安装:https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz
运行以下命令:
$ 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 riscv-gnu-toolchain
$ 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

步骤十六:

设置环境变量“$ vim /etc/profile”,新增“$ export PATH=/opt/gcc_riscv32/bin:$PATH”。
生效环境变量“$ source /etc/profile”。

步骤十七:

Shell命令行中输入“$ riscv32-unknown-elf-gcc -v”,查看是否安装成功。
如果能正确显示编译器版本号,表明编译器安装成功。

说明:

/opt/gcc-riscv32为gcc_riscv32编译工具链的输出路径(如需自定义可以替换该路径,该节均已“/opt/gcc_riscv32”为例);
以“$ ”区分上述linux命令,拷贝命令时请忽略“$ ”。


硬件连线:
图片.png


作者:wx5f895a4030adf

想了解更多内容,请访问:
51CTO和华为官方战略合作共建的鸿蒙技术社区
https://harmonyos.51cto.com?jssq

推荐阅读
关注数
3010
内容数
446
华为鸿蒙相关技术,活动及资讯,欢迎关注及加入创作
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息