2019.7.2 IPC–Hi3516 环境搭建
1.Ubuntu的安装
使用的是Ubuntu 16.04
2 .海思SDK的安装
1、Hi3516 SDK包位置
在"Hi3516_V100R001***/01.software/board"目录下,您可以看到一个 Hi3516_SDK_Vx.x.x.x.tgz 的文件,
该文件就是Hi3516的软件开发包。
2、解压缩SDK包
在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用命令:tar -zxf Hi3516_SDK_Vx.x.x.x.tgz ,
解压缩该文件,可以得到一个Hi3516_SDK_Vx.x.x.x目录。
3、展开SDK包内容
返回Hi3516_SDK_Vx.x.x.x目录,运行./sdk.unpack(请用root或sudo权限执行)将会展开SDK包打包压缩存放的内容,请按照提示完成操作。
如果您需要通过WINDOWS操作系统中转拷贝SDK包,请先运行./sdk.cleanup,收起SDK包的内容,拷贝到新的目录后再展开。
4、在linux服务器上安装交叉编译器
1)安装uclibc交叉编译器(注意,需要有sudo权限或者root权限):
进入Hi3516_SDK_Vx.x.x.x/osdrv/opensource/toolchain/arm-hisiv300-linux目录,运行chmod +x cross.install,然后运行./cross.install即可。
2) 安装glibc交叉编译器(注意,需要有sudo权限或者root权限):
进入Hi3516_SDK_Vx.x.x.x/osdrv/opensource/toolchain/arm-hisiv400-linux目录,运行chmod +x cross.install,然后运行./cross.install即可。
3) 执行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。
5、Ubuntu 为64位,Hi3516ev100为32位,需要兼容,需要apt-get以下包
sudo apt-get install lib32stdc++6
sudo apt-get install libc6:i386
sudo apt-get install lib32z1*
不然可能会包以下错误:
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/…/lib/gcc/arm-hisiv300-linux-uclibcgnueabi/4.8.3/…/…/…/…/arm-hisiv300-linux-uclibcgnueabi/bin/as: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
6、编译osdrv
参见osdrv目录下readme
7、SDK目录介绍
Hi3521A_SDK_Vx.x.x.x 目录结构如下:
|-- sdk.cleanup # SDK清理脚本
|-- sdk.unpack # SDK展开脚本
|-- osdrv # 存放操作系统及相关驱动的目录
| |-- opensource # opensource源代码
| | |-- busybox # busybox源代码
| | |-- kernel # linux内核源代码
| | |-- toolchain # 交叉编译器
| | |-- uboot # uboot源代码
| |-- pub # 编译好的镜像、工具、drv驱动等
| |-- tools # linux工具源代码
| |-- readme_cn.txt # osdrv使用说明(中文版)
| |-- readme_en.txt # osdrv使用说明(英文版)
| |-- … #
| `-- Makefile # osdrv Makefile
|-- package # 存放SDK各种压缩包的目录
| |-- osdrv.tgz # linux内核/uboot/rootfs/tools源码压缩包
| |-- mpp.tgz # 媒体处理平台软件压缩包
| |-- drv.tgz # drv压缩包
| |-- rootfs_*.tgz # rootfs压缩包
| |-- image * # 可供FLASH烧写的映像文件,如内核、根文件系统
|-- scripts # 存放shell脚本的目录
|-- drv # drv目录
|-- mpp # 存放媒体处理平台的目录
|-- component # 组件源代码
|-- extdrv # 板级外围驱动源代码
|-- include # 对外头文件
|-- ko # 内核模块
|-- lib # release版本库以及音频库
|-- Makefile.param # mpp一些全局编译选项
|-- tools # 媒体处理相关工具
|–sample #例子
3 . busybox
/bin/sh: arm-hisiv600-linux-gcc: command not found
经过查看arm-hisiv600-linux-gcc -v,一切正常。
然后sudo -s切换到当前用户的root用户,发现PATH中没有arm-hisiv600-linux-gcc的路径,然后加上这个:
export PATH=/opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/bin:$PATH ------liteos编译工具
export PATH=/opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/bin:$PATH ------linux编译工具
@ubuntu:/home/dev/busybox-1.19.3# make menuconfig
HOSTCC scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:0:
scripts/kconfig/lxdialog/dialog.h:31:20: fatal error: curses.h: 没有那个文件或目录
compilation terminated.
make[2]: *** [scripts/kconfig/lxdialog/checklist.o] 错误 1
make[1]: *** [menuconfig] 错误 2
make: *** [menuconfig] 错误 2
这时因为ubuntu系统中缺少一个套件 ncurses devel ,把此套件安装下即可
apt-get install libncurses5-dev
error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
交叉编译平台 ubuntu12.04 x64
交叉编译工具链:Hi3516 arm-hisiv300
配置交叉环境时出现:
arm-hisiv300-linux-gcc: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory```
/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc: 15: exec: /opt/FriendlyARM/toolschain/4.4.3/bin/.arm-none-linux-gnueabi-gcc: not found
原因:缺少32位库,由于ubuntu12.04我使用的是64位的
解决:
sudo apt-get install lib32stdc++6*
sudo apt-get install lib32z1*
否则出现还会如下错误:
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/…/lib/gcc/arm-hisiv300-linux-uclibcgnueabi/4.8.3/…/…/…/…/arm-hisiv300-linux-uclibcgnueabi/bin/as: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
4. uboot下通过tftp下载内核与文件系统
注:这种方式为spi falsh
a. uboot烧录
tftp 0x82000000 uboot_hi3516ev100.bin
将uboot_hi3516ev100.bin保存到 0x82000000
sf probe 0
- init flash device on given SPI bus and chip select
sf erase 0 100000
sf write 0x82000000 0x0 0x100000
将0x82000000的数据cpy到 flash 偏移 0 大小 100000
b. uImage 烧录
tftp 0x82000000 uImage_hi3516ev100.bin
sf probe 0
sf erase 0x100000 0x200000
sf write 0x82000000 0x100000 0x200000
c .文件系统烧录
tftp 0x82000000 rootfs_hi3516ev100_64k.jffs2
sf probe 0
sf erase 0x300000 0x500000
sf write 0x82000000 0x300000 0x500000
d.启动参数设置
setenv bootargs ‘mem=8M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2
rwmtdparts=hi_sfc:1M(boot),2M(kernel),5M(rootfs)’
setenv bootcmd ‘sf probe 0;sf read 0x82000000 0x100000 0x200000;bootm 0x82000000’
save
参数解释: bootcmd :
sf read 0x82000000 0x100000 0x200000; uboot启动内核时读取的位置:
falsh从偏移0x100000,读取的大小:0x200000,将其读到0x8200000,。
bootm:内核的启动位置0x8200000.
bootargs=mem=24M console=ttyAMA0,115200 root=/dev/nfs rw noinitrd ip=192.168.16.197:192.168.16.130:192.168.16.1:255.255.255.0::eth0::off nfsroot=192.168.16.130:/work/squashfs-root mtdparts=hi_sfc:192K(boot),1344K(kernel),6144K(rootfs),512K(config)
知识点补充
**1. phy**
PHY(英语:Port Physical Layer),中文可称之为端口物理层,是一个对OSI
模型物理层的共同简称。
2. tftp
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族
中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、
开销不大的文件传输服务。端口号为69。是基于UDP实现的。
3. SVN
svn是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、
CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多
版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个
人共同开发同一个项目,共用资源的目的。