1:编译前请先自行安装所需交叉编译器(参考SDK里文档)
2:海思平台下多款芯片SDK编译均可参考
3:本文参考说明以 Hi3536_SDK_V2.0.7.0 为例
windows10电脑 + 虚拟机15 Pro + Ubuntu18.0.4
cd ~/sambashare/
cp /my_work/sdk/hs_sdk/Hi3536V100R001C02SPC070/01.software/board/Hi3536_SDK_V2.0.7.0.tgz ./ -f
tar -xzf Hi3536_SDK_V2.0.7.0.tgz
cd Hi3536_SDK_V2.0.7.0/
sudo ./sdk.unpack
source /etc/profile
注:如果执行 source 不生效,重启虚拟机即可。
进入osdrv目录。先执行clean命令,确保SDK命令是干净的
cd Hi3536_SDK_V2.0.7.0/osdrv
sudo make OSDRV_CROSS=arm-hisiv300-linux distclean
执行make all,编译整个osdrv目录
sudo make OSDRV_CROSS=arm-hisiv300-linux CPU_TYPE=single PCI_MODE=none all
/bin/sh: 1: pushd: not found
解决方法1
步骤1:which sh,结果是/bin/sh
步骤2:ls -l /bin/sh,结果sh指向dash
步骤3:sudo rm /bin/sh
步骤4:sudo ln -s /bin/bash /bin/sh
步骤5:ls -l /bin/sh,结果sh指向bash
解决方法2
步骤1:sudo dpkg-reconfigure dash 【NO】
步骤2:ls -l /bin/sh,结果sh指向bash
make[2]: arm-hisiv300-linux-gcc: Command not found
解决方法
步骤1,cd Hi3536_SDK_V2.0.7.0/osdrv/opensource/toolchain/arm-hisiv300-linux
步骤2,tar -xzf arm-hisiv300-linux.tar.bz2
步骤3,sudo ./cross.install.v300
步骤4,vi ~/.bashrc 【在文件末尾追加: export PATH=/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin:$PATH】
步骤5,source ~/.bashrc 【确保环境变量设置生效,可以用 echo $PATH 查看是否成功导入】
arm-hisiv300-linux-gcc -v
出现了gcc version 4.8.3 20131202 (prerelease) (Hisilicon_v300)说明安装成功
“mkimage” command not found - U-Boot images will not be built
解决方法1
步骤1:cd osdrv/opensource/uboot/u-boot-2010.06
步骤2:ls 【可以看到里面uboot.bin已经生成了】
步骤3:cd tools 【里面有mkimage.c和mkimage】
步骤4:file mkimage 【写x86-64位的架构,ubuntu16.0.04也是x86-64架构,因此可以在当前虚拟机上运行】
步骤5:sudo cp mkimage /usr/local/bin
步骤6:cd ../../
步骤7:ls 【发现里面要u-boot-2010.06文件夹和u-boot-2010.06.tgz压缩包】
步骤8:mki[连续按TabTab键] 【发现补全mkimage,说明已经成功解决了】
解决方法2
sudo apt-get install u-boot-tools
compr_zlib.c:39:18: fatal error: zlib.h: No such file or directory
解决方法
sudo apt-get install zlib1g-dev
serve_image.c:32:18: error: storage size of ‘hints’ isn’t known
原因:在于 ubuntu 操作系统版本太高, 而SDK使用的 mtd-utils 版本太低导致
解决方法
步骤1:sudo vi /usr/include/netdb.h
步骤2::set nu 【显示行号】
步骤3:/__USE_XOPEN2K 【回车搜索】
步骤4:将第79行的#if defined __USE_XOPEN2K || defined __USE_XOPEN_EXTENDED和相应的第82行的#endif用//注释掉
步骤5:/__USE_XOPEN2K 【回车搜索】
步骤6:第565行的#ifdef __USE_XOPEN2K和第681行的的#endif用//注释掉 【用:681命令跳转到681行】
mkfs.ubifs/hashtable/hashtable_itr.c:42:1: error: redefinition of ‘hashtable_iterator_key’
Makefile:204: recipe for target ‘hipctools’ failed
解决方法
下载 mtd-utils_1.5.2.tar.bz2 http://nl.archive.ubuntu.com/ubuntu/pool/universe/m/mtd-utils/mtd-utils_1.5.2.orig.tar.bz2
osdrv/tools/pc/jffs2_tool/ 替换如下:
步骤1:cd osdrv/tools/pc/jffs2_tool
步骤2:cp ~/sambashare/mtd-utils_1.5.2.orig.tar.bz2 ./
步骤3:mv mtd-utils-1.5.0.tar.bz2 mtd-utils-1.5.0_backup.tar.bz2 //备份原始版本
步骤4:mv mtd-utils_1.5.2.orig.tar.bz2 mtd-utils-1.5.2.tar.bz2 //重命名新版本
步骤5:修改jffs2_tool/Makefile:
MTD_UTILS := mtd-utils-1.5.2 //修改mtd-utils的新版本号
保存退出
注意:osdrv/tools/board/mtd-utils/mtd-utils-1.5.0.tar.bz2 是不需要替换的,否则编译时会报错: mkfs.jffs2.c:71:21: fatal error: sys/acl.h: No such file or directory
configure: error: ncurses or ncursesw selected, but library not found (–without-ncurses to disable)
解决方法
sudo apt-get install libncurses5-dev libncursesw5-dev
uuid/uuid.h no such file or directory
解决方法
sudo apt-get install uuid-dev
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
解决方法
sudo apt-get install g++-multilib
【参考文献】
HI3518EV200 SDK安装并编译osdr