Hi3516A开发环境的搭建需要一台Linux服务器,于是在虚拟机上装了一个Ubuntu系统(Linux操作系统的一种发行版本),然后在Ubuntu系统上安装Hi3516A_SDK_V1.0.5.0,配置交叉工具链,进行编译osdrv目录等操作
虚拟机上安装ubuntu16.04
之前装的是ubuntu18.04,没有编译成功,所以这次换成ubuntu16.04来试试
百度又很多安装教程,这里不详解了
或者可参考如下链接:
Ubuntu镜像下载
Linux开发环境搭建
配置网络
共享主机网络或者桥接到外部网络,先保证Ubuntu能上网,再配置其他工具
ubuntu更换软件下载源
安装常用软件工具
sudo apt-get install vim
sudo apt-get install tree
//看个人需要……
安装32位库
因为交叉工具链是针对32位开发板制作的,在64位平台上需要32位库的支持才能正确使用
sudo apt-get install libc6 libc6-dev
sudo apt-get install libc6-dev-i386
sudo apt-get install libx32gcc-4.8-dev
sudo apt-get install lib32stdc++6
sudo apt-get install gcc-multilib
sudo apt-get install lib32ncurses5
sudo apt-get install lib32z1 lib32z1-dev
apt-get install ia32-libs
//安装ia32-libs若不成功,安装推荐的lib32ncurses5也可以
//若出现error while loading shared libraries: libstdc++.so.6:
sudo apt-get install libstdc++6
sudo apt-get install lib32stdc++6 //这个是32位的
# dpkg --print-architecture // 查看内核架构应该会看到amd64
# dpkg --print-foreign-architectures //确认多架构打开 应该看到i386
//如果没有得到i386则执行下面命令
# sudo dpkg --add-architecture i386 //添加多架构支持
# sudo apt-get update //更新软件
# sudo apt-get dist-upgrade //更新库,选择yes
安装编译osdrv目录所需的各种依赖包,先装上吧免得后面报错
sudo apt-get install build-essential
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install wget
sudo apt-get install fakeroot
sudo apt-get install kernel-package
sudo apt-get install automake
sudo apt-get install autoconf
sudo apt-get install libtool
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libncurses5-dev
sudo apt-get install zlib1g-dev
apt-get install mtd-utils
sudo apt-get install uuid-dev
在Linux服务器上安装SDK参考下面链接:
安装 Hi3516A SDK
安装官方提供的Hi3516A交叉编译工具链
安装好Hi3516A_SDK后,交叉编译工具链就放在osdrv/opensource/toolchain/
目录下
步骤1:解压工具链
cd osdrv/opensource/toolchain/arm-hisiv300-linux/
tar -xvf arm-hisiv300-linux.tar.bz2
步骤2:安装工具链
./cross.v300.install
#可能需要先添加可执行权限
chmod 777 cross.v300.install
步骤3:刷新环境变量
source /etc/profile
安装好工具链后,系统会自动在/etc/profile文件中添加上环境变量,刷新一下使其生效,或者重开终端
输入arm-hisiv300-linux-gcc -v
可以查看到信息,说明工具链已安装好
使用交叉工具链编译整个osdrv目录
1.进入osdrv目录
cd osdrv/
2.编译整个osdrv目录
make OSDRV_CROSS=arm-hisiv300-linux all
出现如下错误:“mkimage” command not found - U-Boot images will not be built
解决方法:
apt-get install u-boot-tools
再次编译,然后又报了其他错误
serve_image.c:32:18: error: storage size of ‘hints’ isn’t known
serve_image.c:94:19: error: ‘AI_ADDRCONFIG’ undeclared (first use in this function)
serve_image.c:103:35: error: dereferencing pointer to incomplete type ‘struct addrinfo’
解决办法1:
//打开文件/usr/include/netdb.h
vi /usr/include/netdb.h
//将此宏__USE_XOPEN2K注释
//分别定位到565行和595行,将前面的#号去掉
参考:
编译海思osdrv出现的问题并解决
编译报错serve_image.c
再次编译后,又报出如下错误:
看来此方法在我这里行不通,继续试下一个方法
解决方法2:修改sdk版本下的mtd-utils-1.5.0为mtd-utils-2.0.0
1.通过如下命令获取mtd-utils-2.0.0.tar.bz2
wget ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-2.0.0.tar.bz2
2.修改当前目录下Makefile中指定的版本号
root@ubuntu16:/home/cfs/Hi3516A_SDK_V1.0.5.0/osdrv/tools/pc/jffs2_tool# vim Makefile
替换完成后再次编译,前面的错误信息没了,但是又出现了新的错误
解压mtd-utils-2.0.0.tar.bz2失败了(压缩文件可能已损坏),提示说可以用bzip2recover命令尝试修复一下
删除osdrv/tools/pc/jffs2_tool/tmp
目录下的空目录mtd-utils-2.0.0后(因为刚刚解压有误,所以先删除了它),再次重新编译
还是不行,可能真是这个压缩包有问题(事实证明真的是刚刚下载的压缩包mtd-utils-2.0.0.tar.bz2有问题,因为我放到windows下下同样无法解压),于是又找了另外一个地方重新下载,戳下面
mtd-utils下载地址
下载下来的是mtd-utils_2.0.0.orig.tar.gz,所以我先将其解压缩
tar -zxvf mtd-utils_2.0.0.orig.tar.gz
解压后得到mtd-utils-2.0.0目录
再将mtd-utils-2.0.0目录压缩为mtd-utils-2.0.0.tar.bz2
tar jcvf mtd-utils-2.0.0.tar.bz2 mtd-utils-2.0.0
随后将得到的压缩包mtd-utils-2.0.0.tar.bz2重新拷贝到Hi3516A_SDK_V1.0.5.0/osdrv/tools/pc/jffs2_tool/
目录下
回到osdrv目录,重新编译
压缩包mtd-utils-2.0.0.tar.bz2可以正常解压了,但是又出现了另外的错误信息:
make[2]: Entering directory ‘/home/cfs/Hi3516A_SDK_V1.0.5.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-2.0.0’
make[2]: *** No targets specified and no makefile found. Stop.
make[2]: Leaving directory ‘/home/cfs/Hi3516A_SDK_V1.0.5.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-2.0.0’
Makefile:40: recipe for target ‘/home/cfs/Hi3516A_SDK_V1.0.5.0/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2’ failed
make[1]: *** [/home/cfs/Hi3516A_SDK_V1.0.5.0/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2] Error 2
make[1]: Leaving directory ‘/home/cfs/Hi3516A_SDK_V1.0.5.0/osdrv/tools/pc/jffs2_tool’
Makefile:164: recipe for target ‘hipctools’ failed
make: *** [hipctools] Error 2
提示说进入/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-2.0.0目录中找不到Makefile??无法匹配目标……
于是手动进入到/home/cfs/Hi3516A_SDK_V1.0.5.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-2.0.0
目录中一看,果真没有Makefile文件,却是又一个Makefile.am文件
但是发现它有autogen.sh文件,那就执行一下看看能不能生成Makefile
于是先执行./autogen.sh
,再执行./configure
,还是无法生成Makefile,哎又不行
解决方法:
换了个网址,又去下载一个mtd-utils_1.5.2.orig.tar.bz2,重新尝试编译……
http://ftp.sjtu.edu.cn/ubuntu/pool/universe/m/mtd-utils/
将下载下来的mtd-utils_1.5.2.orig.tar.bz2先解压缩,再重新压缩为mtd-utils-1.5.2.tar.bz2
注: 不要直接就将mtd-utils_1.5.2.orig.tar.bz2改名字为mtd-utils-1.5.2.tar.bz2,否则可能会出错
将mtd-utils-1.5.2.tar.bz2放入/home/cfs/Hi3516A_SDK_V1.0.5.0/osdrv/tools/pc/jffs2_tool,并修改Makefile中指定的版本号,在osdrv目录下输入make OSDRV_CROSS=arm-hisiv300-linux all
再次编译
终于编译成功了!
其实这个替换mtd-utils-1.5.2.tar.bz2的方法我在ubuntu18.04上也尝试过,但是没有成功;如今在ubuntu16.04上就编译通过了;也许是ubuntu版本太高了不支持mtd-utils-1.5.2
又再试了一次,同样的方法用在ubuntu18.04上仍然存在错误
也罢,还是用ubuntu16.04做开发环境吧……
附上所用的mtd-utils-1.5.2.tar.bz2
链接:https://pan.baidu.com/s/1QNxDXIZ8DSogZ3PQF3oJEw
提取码:irht
复制这段内容后打开百度网盘手机App,操作更方便哦
分析编译出来的镜像文件
使用hisiv300工具链成功编译osdrv目录后,各种镜像文件存放在osdrv/pub/目录下
其实在安装好SDK后,在Hi3516A_SDK_V1.0.5.0/package
目录下就已经有制作好的根文件系统和各种镜像文件了