2. SDK编译环境搭建

海思官方建议Linux4.19_SDK使用的编译主机Linux系统为Ubuntu18.04 LTS,而HiSpark社区建议Linux6.6_SDK使用Ubuntu22.04 LTS。

综合需求和实际开发验证,LubanCat_Hi3403的开发过程中使用的环境为Ubuntu20.04,可以兼顾两个版本SDK的开发。建议用户使用Ubuntu20.04,与LubanCat开发环境保持一致。

2.1. Linux系统配置

需要对Linux系统环境进行配置,设置环境变量,安装依赖软件包等

  • 配置默认shell解释器为bash

1
sudo dpkg-reconfigure dash

执行命令后弹出的对话框选择

../../_images/bash.png

如果没有配置,在编译时会报错找不到 pushd 命令

  • 安装软件包

1
2
3
4
5
6
7
8
9
# 更新软件包列表
sudo apt update -y

# 安装软件包
sudo apt install -y make libc6-i386 lib32z1 lib32stdc++6 zlib1g-dev \
libncurses5-dev ncurses-term libncursesw5-dev g++ u-boot-tools texinfo \
gawk libssl-dev openssl bc p7zip-full gperf bison flex diffutils git \
unzip python3-pip libffi-dev libtool libfreetype6 fakeroot autopoint \
po4a wget vim openssh-server net-tools
  • 创建/etc/ld.so.preload文件

1
2
# 解决64bit Linux server上某些第三方库编译失败的问题
sudo bash -c "echo '' > /etc/ld.so.preload"
  • 安装python3.x.x、 pip3、 wheel、 pycryptodome、pyelftools库

1
2
3
sudo pip3 install wheel -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo pip3 install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo pip3 install pyelftools -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 设置默认python版本为python3

1
sudo ln -sf /usr/bin/python3 /usr/bin/python

以上是Linux4.19_SDK和Linux6.6_SDK都需要安装的依赖。 由于Linux4.19_SDK还使用了一些第三方开源组件,在编译前还需要安装下面的工具, 如果仅使用Linux6.6_SDK则可以跳过下面依赖的安装。

  • 安装SDK中开源组件mtd-utils依赖

1
2
3
sudo apt install -y zlib1g-dev liblzo2-dev uuid-dev pkg-config automake

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig"
  • 安装SDK中开源组件e2fsprogs依赖

1
sudo apt install -y texlive
  • 安装LiteOS编译需要的工具,包括python、pip 和 kconfiglib

1
sudo pip3 install kconfiglib -i https://pypi.tuna.tsinghua.edu.cn/simple

2.2. Ubuntu根文件系统构建工具安装

如果要使用SDK构建Ubuntu根文件系统镜像,还需要安装Ubuntu项目中的特定版本离线软件包。

Linux4.19_SDK和Linux6.6_SDK使用同样的Ubuntu构建脚本,所以进入任意版本SDK的open_source/ubuntu目录中,运行下面的命令进行安装。

1
2
3
sudo apt-get install binfmt-support qemu-user-static
sudo dpkg -i ubuntu-build-service/packages/*
sudo apt-get install -f

2.3. 交叉编译工具安装

根据使用的SDK版本安装对应的交叉编译工具,如果同时使用两个版本的SDK,则都安装。

2.3.1. Linux4.19_SDK

2.3.1.1. 安装arm64交叉编译工具

从网盘资源 4-SDK源码压缩包/交叉编译环境/LubanCat_Hi3403_Linux4.19_SDK 中获取aarch64-mix210-linux.tgz压缩包, 使用以下命令安装交叉编译工具。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 解压压缩包
tar -xvf aarch64-mix210-linux.tgz

# 安装
cd aarch64-mix210-linux/
sudo ./aarch64-mix210-linux.install

# 配置环境变量
echo "export PATH="/opt/linux/x86-arm/aarch64-mix210-linux/bin:\$PATH""  >> ~/.bashrc
source ~/.bashrc
../../_images/mix210.png

使用 aarch64-mix210-linux-gcc -v 命令查看aarch64-mix210-linux-gcc的版本,来验证是否安装成功。

../../_images/mix210-version.png

出现图中的信息,则说明安装成功

2.3.1.2. 安装riscv交叉编译工具

从网盘资源 4-SDK源码压缩包/交叉编译环境/LubanCat_Hi3403_Linux4.19_SDK 中获取cc-riscv32-cfg5-musl-20211008-elf.tar.gz压缩包, 使用以下命令安装交叉编译工具。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 解压压缩包
tar -xvf cc-riscv32-cfg5-musl-20211008-elf.tar.gz

# 进入install.sh脚本所在目录
cd cc-riscv32-cfg5-musl-20211008-elf/

# 使用脚本安装工具链
./install.sh

# 进入工具链安装目录
cd ./cc-riscv32-cfg5-musl-20211008-elf/

# 获取工具链安装目录路径
pwd
# pwd返回
/home/dev/cc-riscv32-cfg5-musl-20211008-elf/cc-riscv32-cfg5-musl-20211008-elf

# 配置工具链路径
# 用上面获取的路径替换PATH="到/bin:\$PATH"中间的内容
echo "export PATH="/home/dev/cc-riscv32-cfg5-musl-20211008-elf/cc-riscv32-cfg5-musl-20211008-elf/bin:\$PATH""  >> ~/.bashrc
source ~/.bashrc

注意,cc-riscv32-cfg5-musl-20211008-elf被安装到了运行install.sh的目录下,设置环境变量时,要设置对应的目录。

../../_images/riscv32.png

使用 riscv32-cfg5-musl-20211008-elf-gcc -v 命令查看riscv32-cfg5-musl-20211008-elf-gcc的版本,来验证是否安装成功。

../../_images/riscv32-version.png

出现图中的信息,则说明安装成功

2.3.2. Linux6.6_SDK

  • 可以访问 https://gitee.com/openeuler/yocto-meta-openeuler/releases 下载 openEuler Embedded Toolchains V0.1.8 中的序号为1到4,名称为openeuler_gcc_arm64le.tar.gz的4个压缩包

    ../../_images/yocto-meta-openeuler.png
  • 也可以从网盘资源 4-SDK源码压缩包/交叉编译环境/LubanCat_Hi3403_Linux6.6_SDK 中获取这4个压缩包。

将交叉编译工具的压缩包传输到编译主机中,使用以下命令安装交叉编译工具。

1
2
3
4
5
6
7
8
9
# 将拆分的4个压缩包合并为1个
cat 1_openeuler_gcc_arm64le.tar.gz 2_openeuler_gcc_arm64le.tar.gz 3_openeuler_gcc_arm64le.tar.gz 4_openeuler_gcc_arm64le.tar.gz > openeuler_gcc_arm64le.tar.gz

# 解压合并后的压缩包到系统目录
sudo tar -xzf openeuler_gcc_arm64le.tar.gz -C /opt/linux/x86-arm/

# 配置环境变量
echo "export PATH="/opt/linux/x86-arm/openeuler_gcc_arm64le/bin:\$PATH""  >> ~/.bashrc
source ~/.bashrc
../../_images/openeuler.png

使用 aarch64-openeuler-linux-gnu-gcc -v 命令查看aarch64-openeuler-linux-gnu-gcc 的版本,来验证是否安装成功。

../../_images/openeuler-version.png

出现图中的信息,则说明安装成功

2.3.2.1. 安装arm64交叉编译工具

2.4. 补全依赖库

使用Ubuntu20.04的系统编译SDK,编译时会缺少依赖库,还需要手动安装此依赖库。

从网盘资源 4-SDK源码压缩包/交叉编译环境 中可以获取isl-0.19.tar.xz压缩包

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 安装依赖包
sudo apt install -y libgmp-dev

# 下载或使用网盘中的源代码压缩包
wget https://sourceforge.net/projects/libisl/files/isl-0.19.tar.xz/download -O isl-0.19.tar.xz

# 解压压缩包
tar xf isl-0.19.tar.xz

# 编译
cd isl-0.19
./configure --prefix=$HOME/.isl-0.19
make -j$(nproc)

# 安装
make install

# 设置环境变量
echo 'export LD_LIBRARY_PATH="$HOME/.isl-0.19/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"' >> ~/.bashrc
source ~/.bashrc

# 验证
ldd /opt/linux/x86-arm/aarch64-mix210-linux/libexec/gcc/aarch64-linux-gnu/7.3.0/cc1
# 查看libisl.so.19是否指向正确的路径
libisl.so.19 => /home/dev/.isl-0.19/lib/libisl.so.19