海思的文档其实挺详尽的,但是跟着走还是没有一次就成功,所以还是稍稍记录一下自己的步骤。
切换软件源
在开始之前,先将宿主机的源切换到国内,速度快点,我用的Ubuntu 18.04,按下面步骤进行切换
cp /etc/apt/sources.list /etc/apt/sources.list.bak # 备份一下原文件
sudo vi /etc/apt/sources.list # 使用vi进行编辑
在打开的文件前面添加下面条目(其实我是将官方的删了再添加)
#添加阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
添加并保存后执行下面两条命令更新源
##更新
sudo apt-get update
sudo apt-get upgrade
安装SDK
-
解压SDK压缩包:
tar -zxf Hi3159V101_SDK_V2.0.5.0.tgz
; -
进入解压后的文件夹:
cd Hi3519V101_SDK_V2.0.5.0/
; -
给安装文件添加可执行权限:
chmod 777 ./sdk.unpack
; -
安装SDK:这里需要注意,不同的Shell使用的指令不一样,使用
ls -l /bin/sh
来查看当前使用的Shell类型,如果是dash,执行source sdk.unpack
进行安装,如果是bash,则跟文档一样,执行./sdk.unpack
dash --> bash
为了跟文档上的操作一致,可以将系统默认Shell更改为bash,执行
sudo dpkg-reconfigure dash
,在弹出的对话框里选择【否】,然后再执行ls -l /bin/sh
查看是否真的切换成功。
安装交叉编译器
海思提供了两种交叉编译工具链,基于uclibc的arm-hisiv500-linux和基于glibc的arm-hisiv600-linux。两者的详细区别可以看一下Glibc_vs_uClibc_Differences.txt,简单的就看下面吧:
- Glibc
glibc = GNU C Library
是GNU项目(GNU Project),所实现的 C语言标准库(C standard library)。
目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。
其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。 - uClibc
一个小型的C语言标准库,主要用于嵌入式。
其最开始设计用于uClinux(注:uClinux不支持MMU),因此比较适用于微处理器中。
对应的,此处的u意思是μ,Micro,微小的意思。
uClibc的特点:- 1、uClibc比glibc要小很多。
- 2、uClibc是独立的,为了应用于嵌入式系统中,完全重新实现出来的。和glibc在源码结构和二进制上,都不兼容。
这里我选择arm-hisiv600-linux,安装很简单:
- 解压工具链:执行
tar -xvf arm-hisiv600-linux.tgz
进行解压;(《Hi3519V101/Hi3516AV200 Linux 开发环境用户指南.pdf》文档上说工具链及其安装程序位于 osdrv/toolchain/arm-hisiXXX-linux/ 目录下,是错误的。实际上Hi3519V101_SDK_V2.0.5.0.tgz与arm-hisiv600-linux.tgz是分开的。) - 进入解压后的文件夹:
cd arm-hisiv600-linux/
; - 给安装文件添加可执行权限:
chmod +x arm-hisiv600-linux.install
; - 安装工具链:
sudo ./arm-hisiv600-linux.install
; - 安装完成在最后会有提示
export path /opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/bin
,因此需要使更改的环境变量生效:source /etc/profile
; - 验证工具链是否可以正常使用:
arm-hisiv600-linux-gcc -v
,成功的话会有下面的提示:
Using built-in specs.
COLLECT_GCC=arm-hisiv600-linux-gcc
COLLECT_LTO_WRAPPER=/opt/hisi-linux/x86-arm/arm-hisiv600-linux/bin/../libexec/gcc/arm-hisiv600-linux-gnueabi/4.9.4/lto-wrapper
Target: arm-hisiv600-linux-gnueabi
Configured with: ../gcc-linaro-4.9-2015.06/configure --host=x86_64-linux-gnu --build=x86_64-linux-gnu --target=arm-hisiv600-linux-gnueabi --prefix=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/arm-hisiv600-linux --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-arch=armv5te --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --enable-nls --enable-clocale=gnu --enable-extra-hisi-multilibs --with-sysroot=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/arm-hisiv600-linux/target --with-build-sysroot=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/arm-hisiv600-linux/target --with-gmp=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-mpfr=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-mpc=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-ppl=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-cloog=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-libelf=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --enable-libgomp --disable-libitm --enable-poison-system-directories --with-libelf=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-pkgversion=Hisilicon_v600_20180630 --with-bugurl=http://www.hisilicon.com/cn/service/claim.html
Thread model: posix
gcc version 4.9.4 20150629 (prerelease) (Hisilicon_v600_20180630)
如果使用的系统是64bits的,会出现下面的错误提示。这是因为交叉编译器是为32bits系统准备的,需要安装对应的32bits库,执行sudo apt install lib32z1-dev
安装,之后再重新验证即可通过。
bash: /opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/bin/arm-hisiv600-linux-gcc: No such file or directory
验证环境是否搭建完成
进入osdrv目录,执行make OSDRV_CROSS=arm-hisiv600-linux CHIP=hi3519v101 FLASH_TYPE=spi all
编译整个osdrv目录,编译成功,则环境已经搭建完成,这个过程可能需要很多次,具体看环境的准备程度。
1、提示scripts/kconfig/lxdialog/dialog.h:38:20: fatal error: curses.h: No such file or directory
,执行sudo apt-get install libncurses5-dev
:
2、提示 fatal error: zlib.h: No such file or directory
,执行sudo apt-get install zlib1g-dev
;
3、提示"mkimage" command not found - U-Boot images will not be built
,执行sudo apt-get install u-boot-tools
;
4、提示configure: error: ncurses or ncursesw selected, but library not found (--without-ncurses to disable)
,执行sudo apt-get install libncurses5-dev libncursesw5-dev
5、提示configure: error: C++ compiler cannot create executables
,执行sudo apt-get install g++
网友评论