Hi3518E_V200 SDK编译笔记

进入目录Z:\Hi3518E_V200R001C01SPC020\Hi3518E V200R001C01SPC020\01.software\board
把Hi3518E_SDK_V1.0.2.0.tgz拷贝到自己的工作目录
解压Hi3518E_SDK_V1.0.2.0.tgz得到文件夹Hi3518E_SDK_V1.0.2.0
cd Hi3518E_SDK_V1.0.2.0 
执行source sdk.cleanup清除之前的文件,./sdk.cleanup不行。
然后执行source sdk.unpack解压文件,./sdk.unpack不行。
make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 all  编译osdrv整个目录
报错/bin/sh: 1: popd: not found 
进入/bin目录,查看sh的链接文件,显示如下:表示sh命令链接到的是dash,而pushd命令需要在bash的环境中执行。
执行sudo dpkg-reconfigure dash 命令,将dash设置为No。
再执行make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 all 
报错arm-hisiv300-linux-gcc: Command not found 
可能是Makefile里面arm-hisiv300-linux-gcc路径不对
cp arm-hisiv300-linux.tar.bz2 /data/Hi3518E_SDK_V1.0.2.0/osdrv 把交叉编译工具拷贝到当前目录
tar xjvf arm-hisiv300-linux.tar.bz2 解压工具链
再执行make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 all
报错arm-hisiv300-linux-gcc: Command not found还是找不到,有两种可能一是路径还是不对,二是32位和64位的问题
看一下交叉编译工具链是32还是64位的,因为系统是64位,
其实最终是要找到osdrv/arm-hisiv300-linux/bin下面的工具链,发现下面的工具链的名称arm-hisiv300-linux-uclibcgnueabi
都是以uclibcgnueabi结尾,file arm-hisiv300-linux-uclibcgnueabi-gcc  发现工具链都是32位的,在64位的机器上是不能运行的
解决方法
(1)方法1:换32位ubuntu
(2)方法2:装32位兼容包(windows的64位是兼容32位的,但是在ubuntu里面不行,必须要安装兼容包)
给ubuntu16.0403X64安装32位兼容包
(1)参考:http://blog.csdn.net/ma57457/article/details/68923623
或者:https://www.cnblogs.com/leaven/p/5084902.html
(2)用apt-get install lib32z1 或者apt install lib32z1安装lib32z1。如果发现装不了请用 aptitude方式安装lib32z1。原因是ubuntu太新了,里面很多库都是新版本的,但是基于这个新版本的lib32z1还没有,所以不能装。解决方案就是用aptitude工具来装。看前导课程《嵌入式linux开发环境搭建》的第6节的6.3部分。
(3)测试执行arm-xxx-gcc -v,提示找不到stdc++错误:
./arm-hisiv300-linux-uclibcgnueabi-gcc -v
./arm-hisiv300-linux-uclibcgnueabi-gcc: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
(4)再用aptitude方式安装lib32stdc++6-4.8-dbg
sudo aptitude install lib32stdc++6-4.8-dbg或者sudo apt install lib32stdc++6-4.8-dbg
再次测试arm-xxx-gcc -v,终于可以运行了。
再次测试整体编译osdrv
make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 all 
(1)仍然提示找不到arm-hisiv300-linux-gcc
(2)修改Makefile中OSDRV_CROSS的路径,结果不行,分析原因是:命令行传参覆盖了
(3)export导出到环境变量,参考裸机课程1.4节,格式为:
echo $PATH先导出原来的环境变量
再添加环境变量
export PATH=/data/Hi3518E_SDK_V1.0.2.0/osdrv/arm-hisiv300-linux/bin:$PATH
arm-hisiv300-linux-uclibcgnueabi-gcc -v在非arm-hisiv300-linux/bin目录下来执行成功,说明环境变量导出成功
cd ~ 切换到对应用户的家目录
vim .bashrc
export PATH=/data/Hi3518E_SDK_V1.0.2.0/osdrv/arm-hisiv300-linux/bin:$PATH 直接写入.bashrc
这样以后每次打开终端环境变量都生效

再次测试整体编译 make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 all 
直接测试可以执行了,但是编译还是出错。分析原因:名字不对make里面是arm-hisiv300-linux但是我们直接执行的是arm-hisiv300-linux-uclibcgnueabi
(4)解决方案有2个:一种是修改make时传参的名字,另一种是给安装好的交叉编译工具链创建符号链接。实际尝试后发现第一种Makefile要改的太多,所以走第2种。
rm -fr arm-hisiv300-linux rm -f arm-hisiv300-linux.tar.bz2 删除刚刚解压的arm-hisiv300-linux,因为在Hi3518E_SDK_V1.0.2.0/目录下执行sdk.cleanup  sdk.unpack任意一个文件,下面的所有的文件都将被清空
切换到/osdrv/opensource/toolchain/arm-hisiv300-linux目录执行./cross.v300.install 
然后到/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin下执行./arm-hisiv300-linux-gcc -v 执行成功后
添加环境变量到~/.bashrc中export PATH=/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin:$PATH
source ~/.bashrc使其生效
在非arm-hisiv300-linux/target/bin目录下执行arm-hisiv300-linux-gcc -v成功
切换回osdrv目录下执行make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 all 再次编译

使用install脚本安装交叉编译工具链
(1)install到/opt目录下并建立符号链接
(2)导出到PATH并测试可以执行
(3)再次编译

猜你喜欢

转载自blog.csdn.net/taotongning/article/details/82352974