海思HI3516A 开发记录(sdk环境搭建)

ubuntu 16
解压sdk文件
1、Hi3516A SDK包位置
在"Hi3516A_V100R001***/01.software/board"目录下,您可以看到一个 Hi3516A_SDK_Vx.x.x.x.tgz 的文件,
该文件就是Hi3516A的软件开发包。

2、解压缩SDK包
在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用命令:tar -zxf Hi3516A_SDK_Vx.x.x.x.tgz ,
解压缩该文件,可以得到一个Hi3516A_SDK_Vx.x.x.x目录。

可以提前把下面的都装上,省的报错
sudo apt install zlib1g-dev
sudo apt-get install u-boot-tools
sudo apt-get install uboot-mkimage
sudo aptitude install lib32z1
sudo apt-get install build-essential

遇到问题

./sdk.unpack: 2: ./sdk.unpack: source: not found
./sdk.unpack: 4: ./sdk.unpack: ECHO: not found
./sdk.unpack: 6: ./sdk.unpack: WARN: not found
./sdk.unpack: 7: ./sdk.unpack: WARN: not found
./sdk.unpack: 8: ./sdk.unpack: ECHO: not found
./sdk.unpack: 20: ./sdk.unpack: ECHO: not found
./sdk.unpack: 22: ./sdk.unpack: run_command_progress_float: not found
./sdk.unpack: 24: ./sdk.unpack: ECHO: not found
./sdk.unpack: 26: ./sdk.unpack: run_command_progress_float: not found
./sdk.unpack: 37: ./sdk.unpack: ECHO: not found
./sdk.unpack: 39: ./sdk.unpack: run_command_progress_float: not found
./sdk.unpack: 42: ./sdk.unpack: ECHO: not found
./sdk.unpack: 44: ./sdk.unpack: run_command_progress_float: not found

解决方案:

原因
BASH 和 DASH 的问题。
Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,
它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。

解决
方法一
1、vim scripts/common.sh; 第一行, #!/bin/sh 为 #!/bin/bash
2、vim sdk.unpack 第一行, #!/bin/sh 为 #!/bin/bash, 也可以正常解压

方法二
sudo dpkg-reconfigure dash

Using dash as the system shell will improve the system’s overall performance. It does not alter the shell presented to interactive users.

Use dash as the default system shell (/bin/sh)?

选择no

备注

在编译海思SDK时,会出现如下错误:

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:99:40: warning: implicit declaration of function ‘gai_strerror’ [-Wimplicit-function-declaration]
fprintf(stderr, “getaddrinfo: %s\n”, gai_strerror(ret));
fprintf(stderr, “getaddrinfo: %s\n”, gai_strerror(ret));
serve_image.c:103:35: error: dereferencing pointer to incomplete type ‘struct addrinfo’
make[6]: *** [/home/sky2_klockwork/motianbiao/hmtisi/sdk/kitkat/out/target/product/Hi3798MV100/obj/TOOLS_OBJ/mtd-utils/tmp/mtd-utils-1.5.0/serve_image.o] Error 1
make[5]: *** [/home/sky2_klockwork/motianbiao/hisi/sdk/kitkat/out/target/product/Hi3798MV100/obj/TOOLS_OBJ/mtd-utils/tmp/sbin/mkfs.jffs2] Error 2
make[4]: [mkmtdutils_tool] Error 1 (ignored)
make[4]: [mkmtdutils_tool] Error 1 (ignored)
make[4]: [mkmtdutils_tool] Error 1 (ignored)

究其原因,在于ubuntu操作系统版本太高,而SDK使用的mtd-utils版本太低导致(device/hisilicon/bigfish/sdk/tools/linux/utils/mtd-utils/mtd-utils-1.5.0),正常情况下,ubuntu12.04.04下支持mtd-utils-1.5.0,但是ubuntu16.04版本兼容不是很好,但是16.04支持mtd-utils-2.0.0版本,所以,解决办法有如下几种:

方法1.修改sdk版本下的mtd-utils-1.5.0为mtd-utils-2.0.0,可以在root权限下通过命令:wget ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-2.0.0.tar.bz2 获取,然后替换device/hisilicon/bigfish/sdk/tools/linux/utils/mtd-utils/下的mtd-utils-1.5.0.tar.bz2版本

方法2.修改操作系统头文件/usr/include/netdb.h,将此宏__USE_XOPEN2K注释,如下图(注意#ifdef与#endif是一一对应的)

方法3.当然是修改操作系统的内核版本咯,可以通过如下命令更换操作系统内核版本:

①sudo apt-cache search linux-image(搜索可下载内核)
②sudo apt-get install linux-image-2.6.32-21-generic(下载内核)
③更换系统内核:sudo vim /boot/grub/grub.cfg
④set default=“0” #内核默认启动顺序从0开始依次类推,如果数错了进入恢复模式,开机时按shift选择启动内核(可以通过grep menuentry /boot/grub/grub.cfg查看位置)

以上3中方法,就看哪种更适合你了。


版权声明:本文为CSDN博主「Nate」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mtbiao/article/details/77052659

你可能感兴趣的:(linux)