从搭建海思Hi3516A开发环境到成功编译osdrv整个目录走过的坑……

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目录下就已经有制作好的根文件系统和各种镜像文件了
在这里插入图片描述

osdrv目录说明在这里插入图片描述

镜像存放目录说明在这里插入图片描述

发布了37 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Chen_qi_hai/article/details/104513665