quickstart-pkg-3861-tool.md 10.6 KB
Newer Older
D
duangavin123 已提交
1
# 安装Hi3861开发板特有环境
N
NEEN 已提交
2

M
mamingshuai 已提交
3

D
duangavin123 已提交
4
除上述[安装库和工具集](quickstart-pkg-install_package.md)[安装编译工具](quickstart-pkg-install_tool.md)外,针对Hi3861开发板还需要安装特定的编译工具。
M
mamingshuai 已提交
5 6


D
duangavin123 已提交
7
## 工具要求
D
duangavin123 已提交
8 9

  **表1** Hi3861 WLAN模组需要安装的编译工具
N
NEEN 已提交
10

D
duangavin123 已提交
11 12 13 14 15
| 开发工具 | 用途 | 
| -------- | -------- |
| SCons3.0.4+ | 编译构建工具 | 
| python模块:setuptools、kconfiglib、pycryptodome、six、ecdsa | 编译构建工具 | 
| gcc riscv32 | 编译构建工具 | 
N
NEEN 已提交
16

N
NEEN 已提交
17

D
duangavin123 已提交
18
## 操作步骤
N
NEEN 已提交
19

D
duangavin123 已提交
20
相关操作在Ubuntu环境下进行。
N
NEEN 已提交
21

N
NEEN 已提交
22

D
duangavin123 已提交
23
### 安装Scons
N
NEEN 已提交
24

D
duangavin123 已提交
25
1. 运行如下命令,安装SCons安装包。
D
duangavin123 已提交
26
   
D
duangavin123 已提交
27 28 29
   ```
   python3 -m pip install scons
   ```
N
NEEN 已提交
30

D
duangavin123 已提交
31
2. 运行如下命令,查看是否安装成功。如果安装成功,查询结果下图所示。
D
duangavin123 已提交
32
   
D
duangavin123 已提交
33 34 35 36
   ```
   scons -v
   ```

D
duangavin123 已提交
37
     **图1** SCons安装成功界面,版本要求3.0.4以上  
D
duangavin123 已提交
38 39

   ![hi3861-scons-install-success](figures/hi3861-scons-install-success.png)
D
duangavin123 已提交
40 41 42 43 44


### 安装python模块

1. 运行如下命令,安装python模块setuptools。
D
duangavin123 已提交
45
   
D
duangavin123 已提交
46 47 48 49 50
   ```
   pip3 install setuptools
   ```

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

D
duangavin123 已提交
52
   - **命令行方式:**
D
duangavin123 已提交
53
     
D
duangavin123 已提交
54 55 56 57 58
      ```
      sudo pip3 install kconfiglib
      ```
   - **安装包方式:**
      1. 下载.whl文件(例如:kconfiglib-13.2.0-py2.py3-none-any.whl)。
D
duangavin123 已提交
59
          下载路径:“[https://pypi.org/project/kconfiglib#files](https://pypi.org/project/kconfiglib#files)
D
duangavin123 已提交
60
      2. 运行如下命令,安装.whl文件。
D
duangavin123 已提交
61
         
D
duangavin123 已提交
62 63 64 65 66
          ```
          sudo pip3 install kconfiglib-13.2.0-py2.py3-none-any.whl
          ```

3. 安装pycryptodome,任选如下一种方式。
D
duangavin123 已提交
67 68
     
   安装升级文件签名依赖的Python组件包,包括:pycryptodome、six、ecdsa。安装ecdsa依赖six,请先安装six,再安装ecdsa。
D
duangavin123 已提交
69
   - **命令行方式:**
D
duangavin123 已提交
70
     
D
duangavin123 已提交
71 72 73 74 75 76
     ```
     sudo pip3 install pycryptodome
     ```
   
   - **安装包方式:**
     1. 下载.whl文件(例如:pycryptodome-3.9.9-cp38-cp38-manylinux1_x86_64.whl)。
D
duangavin123 已提交
77
         下载路径:“[https://pypi.org/project/pycryptodome/#files](https://pypi.org/project/pycryptodome/#files)”。
D
duangavin123 已提交
78
     2. 运行如下命令,安装.whl文件。
D
duangavin123 已提交
79
        
D
duangavin123 已提交
80 81 82 83 84 85
         ```
         sudo pip3 install pycryptodome-3.9.9-cp38-cp38-manylinux1_x86_64.whl
         ```

4. 安装six,任选如下一种方式。
   - **命令行方式:**
D
duangavin123 已提交
86
     
D
duangavin123 已提交
87 88 89 90 91
      ```
      sudo pip3 install six --upgrade --ignore-installed six
      ```
   - **安装包方式:**
      1. 下载.whl文件(例如:six-1.12.0-py2.py3-none-any.whl)。
D
duangavin123 已提交
92
          下载路径:“[https://pypi.org/project/six/#files](https://pypi.org/project/six/#files)
D
duangavin123 已提交
93
      2. 运行如下命令,安装.whl文件。
D
duangavin123 已提交
94
         
D
duangavin123 已提交
95 96 97 98 99 100
          ```
          sudo pip3 install six-1.12.0-py2.py3-none-any.whl
          ```

5. 安装ecdsa,任选如下一种方式。
   - **命令行方式:**
D
duangavin123 已提交
101
     
D
duangavin123 已提交
102 103 104 105 106
      ```
      sudo pip3 install ecdsa
      ```
   - **安装包方式:**
      1. 下载.whl文件(例如:ecdsa-0.14.1-py2.py3-none-any.whl)。
D
duangavin123 已提交
107
          下载路径:“[https://pypi.org/project/ecdsa/#files](https://pypi.org/project/ecdsa/#files)
D
duangavin123 已提交
108
      2. 运行如下命令,安装.whl文件。
D
duangavin123 已提交
109
         
D
duangavin123 已提交
110 111 112 113 114 115 116 117 118 119
          ```
          sudo pip3 install ecdsa-0.14.1-py2.py3-none-any.whl
          ```


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

> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:**
> - Hi3861开发板平台仅支持使用libgcc运行时库的静态链接,不建议开发者使用libgcc运行时库的动态链接,以免产品需遵从GPLV3许可证。
> 
L
liyan 已提交
120
> - 通过下述步骤2-14,编译好了gcc_riscv32镜像,提供给开发者[直接下载](https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz)使用。直接下载gcc_riscv32镜像的开发者可省略下述2-14步。
D
duangavin123 已提交
121 122 123 124

1. 打开Linux编译服务器终端。

2. 下载riscv-gnu-toolchain交叉编译工具链。
D
duangavin123 已提交
125
   
D
duangavin123 已提交
126 127 128 129 130
   ```
   git clone --recursive https://gitee.com/mirrors/riscv-gnu-toolchain.git
   ```

3. 打开文件夹riscv-gnu-toolchain,先删除空文件夹,以防止下载newlib,binutils,gcc时冲突。
D
duangavin123 已提交
131
   
D
duangavin123 已提交
132 133 134 135 136
   ```
   cd riscv-gnu-toolchain && rm -rf riscv-newlib && rm -rf riscv-binutils && rm -rf riscv-gcc
   ```

4. 下载riscv-newlib-3.0.0。
D
duangavin123 已提交
137
   
D
duangavin123 已提交
138 139 140 141 142
   ```
   git clone -b riscv-newlib-3.0.0 https://github.com/riscv/riscv-newlib.git
   ```

5. 下载riscv-binutils-2.31.1。
D
duangavin123 已提交
143
   
D
duangavin123 已提交
144 145 146 147 148
   ```
   git clone -b riscv-binutils-2.31.1 https://github.com/riscv/riscv-binutils-gdb.git
   ```

6. 下载riscv-gcc-7.3.0。
D
duangavin123 已提交
149
   
D
duangavin123 已提交
150 151 152 153 154 155 156 157
   ```
   git clone -b riscv-gcc-7.3.0 https://github.com/riscv/riscv-gcc
   ```

7. 添加riscv-gcc-7.3.0补丁。
   访问gcc官方补丁链接[89411](https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=026216a753ef0a757a9e368a59fa667ea422cf09;hp=2a23a1c39fb33df0277abd4486a3da64ae5e62c2)[86724](https://gcc.gnu.org/git/?p=gcc.git;a=blobdiff;f=gcc/graphite.h;h=be0a22b38942850d88feb159603bb846a8607539;hp=4e0e58c60ab83f1b8acf576e83330466775fac17;hb=b1761565882ed6a171136c2c89e597bc4dd5b6bf;hpb=fbd5f023a03f9f60c6ae36133703af5a711842a3),按照补丁链接中要求的修改,手动将变更添加到对应的.c和.h文件中,注意由于patch版本与下载的gcc版本有所偏差,行数有可能对应不上,请自行查找patch中的关键字定位到对应行。

8. 下载[GMP 6.1.2](https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2),并解压安装。
D
duangavin123 已提交
158
   
D
duangavin123 已提交
159 160 161 162 163
   ```
   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 ](https://www.mpfr.org/mpfr-4.0.2/mpfr-4.0.2.tar.gz),并解压安装。
D
duangavin123 已提交
164
   
D
duangavin123 已提交
165 166 167 168 169
   ```
   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](https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz) ,并解压安装。
D
duangavin123 已提交
170
    
D
duangavin123 已提交
171 172 173
   ```
   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
   ```
D
duangavin123 已提交
174 175

11. 打开文件夹riscv-gnu-toolchain,新建工具链输出目录。
D
duangavin123 已提交
176
    
D
duangavin123 已提交
177 178 179
   ```
   cd /opt && mkdir gcc_riscv32
   ```
D
duangavin123 已提交
180 181

12. 编译binutils。
D
duangavin123 已提交
182
    
D
duangavin123 已提交
183 184 185
   ```
   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 ..
   ```
D
duangavin123 已提交
186 187

13. 编译newlib。
D
duangavin123 已提交
188
    
D
duangavin123 已提交
189 190 191
   ```
   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 ..
   ```
D
duangavin123 已提交
192 193

14. 编译gcc。
D
duangavin123 已提交
194
    
D
duangavin123 已提交
195 196 197
   ```
   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
   ```
D
duangavin123 已提交
198 199

15. 设置环境变量。
D
duangavin123 已提交
200 201 202 203 204 205
   > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
   >   如果直接采用编译好的riscv32 gcc包,请先执行以下命令将压缩包解压到根目录:
   >   
   > ```
   > tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~
   > ```
D
duangavin123 已提交
206

D
duangavin123 已提交
207 208


D
duangavin123 已提交
209 210 211
   ```
   vim ~/.bashrc
   ```
D
duangavin123 已提交
212

D
duangavin123 已提交
213
   将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
D
duangavin123 已提交
214

D
duangavin123 已提交
215

D
duangavin123 已提交
216 217 218
   ```
   export PATH=~/gcc_riscv32/bin:$PATH
   ```
D
duangavin123 已提交
219 220

16. 生效环境变量。
D
duangavin123 已提交
221
    
D
duangavin123 已提交
222 223 224
   ```
   source ~/.bashrc
   ```
D
duangavin123 已提交
225 226

17. Shell命令行中输入如下命令,如果能正确显示编译器版本号,表明编译器安装成功。
D
duangavin123 已提交
227
    
D
duangavin123 已提交
228 229 230
   ```
   riscv32-unknown-elf-gcc -v
   ```