PC端开发环境安装:
sudo ./sdk.unpack
报如下错误:
./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: 28: ./sdk.unpack: ECHO: not found
./sdk.unpack: 30: ./sdk.unpack: run_command_progress_float: not found
./sdk.unpack: 32: ./sdk.unpack: ECHO: not found
./sdk.unpack: 34: ./sdk.unpack: run_command_progress_float: not found
原因和3531一样,修改sdk.unpack文件,将首行的 #!/bin/sh 改为 #!/bin/bash 运行OK。
uclibc:
uclibc = Micro library
一个小型的C语言标准库,主要用于嵌入式。
其最开始设计用于uClinux(注:uClinux不支持MMU),因此比较适用于微处理器中。
对应的,此处的u意思是μ,Micro,微小的意思。
uClibc的特点:
(1)uClibc比glibc要小很多。
(2)uClibc是独立的,为了应用于嵌入式系统中,完全重新实现出来的。和glibc在源码结构和二进制上,都不兼容。
glibc:
glibc = GNU C library
是GNU项(GNU Project)目,所实现的 C语言标准库(C standard library)。
目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。
其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。
1)安装uclibc交叉编译器(注意,需要有sudo权限或者root权限):
进入hi3520D_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv100nptl-linux目录,运行chmod +x cross.install,然后运行./cross.install即可。
2) 安装glibc交叉编译器(注意,需要有sudo权限或者root权限,暂时不支持glibc版本):
进入hi3520D_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv200-linux目录,运行chmod +x cross.install,然后运行./cross.install即可。
3) 执行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。
板载开发环境搭建:
/bin/sh: 1: ./configure: not found
发现系统的/bin/sh的映射有问题,于是修改系统配置:
运行:
sudo dpkg-reconfigure dash
出现:
选择NO,确认。
重新编译。
/home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/kernel/linux-3.0.y /home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
提示不能使用defined(@array),应该忽略掉它。
我们找到这个文件osdrv/kernel/linux-3.0.y/kernel/timeconst.pl。打开文件,找到这个defined(@array)。
修改 if (!defined(@val)) 为 if (!@val) 后依然报错,结果查看发现,当重新make之后,这个文件又变为之前的了。
执行:make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig
报错:
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
提示没有 ncurses 库。
使用命令安装库:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package ncurses-devel
提示不能安装到本地。
重新安装:
sudo apt-get install libncurses5-dev
安装成功,测试:sudo make menuconfig 命令 OK 。
再次编译kernel报错:
"mkimage" command not found - U-Boot images will not be built
/home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/kernel/linux-3.0.y/arch/arm/boot/Makefile:76: recipe for target 'arch/arm/boot/uImage' failed
make[1]: *** [arch/arm/boot/uImage] Error 1
/home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/kernel/linux-3.0.y/arch/arm/Makefile:288: recipe for target 'uImage' failed
make: *** [uImage] Error 2
安装这个工具解决:
apt-get install u-boot-tools
现在可以在arch/arm/boot下面找到生成的image文件。
根据osdrv/readme_cn.txt操作步骤编译uboot成功。
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
和第一次安装的时候报错一样,但是单独编译kernel的时候却没问题,说明很可能是Makefile的问题。
打开Makefile确定问题原因:
#rm $(OSDRV_DIR)/kernel/linux-3.0.y -rf
#tar xzf $(OSDRV_DIR)/kernel/linux-3.0.y.tgz -C $(OSDRV_DIR)/kernel/
确定问题原因,因为每次在编译kernel的时候,Makefile都会重新解压一份kernel,然后使用解压的kernal进行编译,这样我之前修改的文件就会被覆盖掉。屏蔽这个两行内容,重新编译。
mv /home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/pub/rootfs /home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/pub/rootfs_uclibc
tar xzf /home/ubuntu/Work/Hi/3520/Hi3520D_SDK_V2.0.5.1/osdrv/toolchain/arm-hisiv100nptl-linux/runtime_lib/armv7a_soft/lib.uClibc.tgz \
-C /home/ubuntu/Work/Hi/