1.HI3519v101的SDK包预览
首先找到SDK安装与升级使用说明:
2. HI3519v101的SDK包解压
---》1、Hi3519V101 SDK包位置
在"Hi3519***/01.software/board"目录下,您可以看到一个 Hi3519V101_SDK_Vx.x.x.x.tgz 的文件,
该文件就是Hi3519V101 的软件开发包。
----》2、解压缩SDK包
在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用命令:
tar -zxf Hi3519V101_SDK_Vx.x.x.x.tgz
解压缩该文件,可以得到一个Hi3519V101_SDK_Vx.x.x.x目录。
----》、展开SDK包内容
返回Hi3519V101_SDK_Vx.x.x.x目录,运行
./sdk.unpack(请用root或sudo权限执行)---》将会展开SDK包打包压缩存放的内容,请按照提示完成操作。
如果您需要通过WINDOWS操作系统中转拷贝SDK包,请先运行
./sdk.cleanup,清除SDK包解压的所有文件。
-----》、在linux服务器上安装交叉编译器
1)安装uclibc交叉编译器(注意,需要有sudo权限或者root权限):
进入Hi3519V101_SDK_Vx.x.x.x/osdrv/opensource/toolchain/arm-hisiv500-linux目录,运行chmod +x arm-hisiv500-linux.install,然后运行./arm-hisiv500-linux.install即可。
2) 安装glibc交叉编译器(注意,需要有sudo权限或者root权限):
进入Hi3519V101_SDK_Vx.x.x.x/osdrv/opensource/toolchain/arm-hisiv600-linux目录,运行chmod +x arm-hisiv600-linux.install,然后运行./arm-hisiv600-linux.install即可。
3) 执行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。然后echo $PATH看下环境变量!
3、编译osdrv
参见osdrv目录下readme
---》1.osdrv 顶层 Makefile 使用说明
本目录下的编译脚本支持选用下文提到的两种工具链中的任何一种进行编译,因此编译时需要带上一个编译参数以指定对应的工具链 -- arm-hisiv500-linux 和 arm-hisiv600-linux。其中,arm-hisiv500-linux工具链对应uclibc库,arm-hisiv600-linux工具链对应glibc库。具体命令如下
(1)编译整个osdrv目录:
make OSDRV_CROSS=arm-hisiv500-linux CHIP=xxx FLASH_TYPE=xxx all
或者
make OSDRV_CROSS=arm-hisiv600-linux CHIP=xxx FLASH_TYPE=xxx all
参数说明:
CHIP:设为hi3519v101参数时,对应芯片为hi3519v101;设为hi3516av200参数时,对应芯片为hi3516av200。
FLASH_TYPE:设为nand参数时,使用Nand Flash;设为spi参数时,使用SPI Nor Flash或SPI Nand Flash。
(2)清除整个osdrv目录的编译文件:
make OSDRV_CROSS=arm-hisiv500-linux CHIP=xxx clean©
或者
make OSDRV_CROSS=arm-hisiv600-linux CHIP=xxx clean
(3)彻底清除整个osdrv目录的编译文件,除清除编译文件外,还删除已编译好的镜像:
make OSDRV_CROSS=arm-hisiv500-linux CHIP=xxx distclean
或者
make OSDRV_CROSS=arm-hisiv600-linux CHIP=xxx distclean
----》2.顶层Makefile修改
修改的目的是为了简化手动输入的参数!
---》3.编译
make OSDRV_CROSS=arm-hisiv500-linux all
等待10分钟!
-----》4编译出现的问题1:提示pop和push指令找不到
原因:我们主机ubuntu中使用的是sh脚本指向dash,改成指向bash,可以使用 which sh找到sh脚本的位置
解决:使用ln –sf /bin/sh /bin/bash来重新软连接来定向sh。
指令:ln -sf sh bash
然后编译:make OSDRV_CROSS=arm-hisiv500-linux all
等待10分钟!
-----》4.编译出现的问题2:找不到zlib.h
错误:compr_zlib.c:39:18: fatal error: zlib.h: No such file or directory
因为找不到zlib.h所以编译错误,zlib.h在tools/pc/zlib/tmp/include目录中有。
解决:只需要复制到tools/pc/jffs2_tool/tmp/include目录中即可。注意同时要将zconf.h也复制过去的。
cp tools/pc/zlib/tmp/include/* tools/pc/jffs2_tool/tmp/include/
还有,要将tools/pc/zlib/tmp/lib目录下的libz.a libz.so libz.so.1 libz.so.1.2.7等4个文件复制到tools/pc/jffs2_tool/tmp/lib目录下,不然一会儿还得报错。
cp tools/pc/zlib/tmp/lib/* tools/pc/jffs2_tool/tmp/lib
修改完之后:make OSDRV_CROSS=arm-hisiv500-linux all
等待10分钟!
-----》5.编译出现的问题3:找不到mkfs.cramfs
我们需要的是jffs2,此时实际上我们板子上用的是spi flash,合适用jffs2文件系统,所以不会做yaffs2文件系统,这个东西要不要都无所谓的。还报错就不管了,此时已经有了mkfs.jffs2了,我们就是只要这个而已,手工将其复制到osdrv/pub/bin/pc目录下即可
我们看下主目录的Makefile,找到mkfs.jffs2的路径:然年后我们找一下,发现有这个文件!
拷贝到osdrv/pub/bin/pc目录下即可:
cp tools/pc/jffs2_tool/mkfs.jffs2 pub/bin/pc/ -f
-----》6.编译出现的问题3:出现问题再编译时间太长了,我们需要修改下Makefile
Uboot 和kernel 不需要编译了,文件系统只需要jffss2即可,修改如下:
hiboot: prepare
@echo "---------task [1] build boot"
hiboot_clean:
rm $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER) -rf
##########################################################################################
#task [2] build kernel
##########################################################################################
hikernel: prepare
@echo "---------task [2] build kernel"
hikernel_clean:
rm $(OSDRV_DIR)/opensource/kernel/$(KERNEL_VER) -rf
##########################################################################################
#task [3] prepare drv
##########################################################################################
hidrv:
@echo "---------task [3] build drv"
hidrv_clean:
make -C $(OSDRV_DIR)/drv/pcie_mcc clean
##########################################################################################
#task [4] prepare rootfs
##########################################################################################
hirootfs_prepare: prepare
@echo "---------task [4] prepare rootfs "
##########################################################################################
#task [5] build busybox
##########################################################################################
hibusybox: prepare
@echo "---------task [5] build busybox "
hibusybox_clean:
rm $(OSDRV_DIR)/opensource/busybox/$(BUSYBOX_VER) -rf
修改完之后:make OSDRV_CROSS=arm-hisiv500-linux all
等待20分钟。编译完成!
生成的镜像uboot,kernel和rootfs都在pub文件夹里面:
拷贝到烧录文件下:
4.单独编译版本
(1)编译整个osdrv目录:
make OSDRV_CROSS=arm-hisiv500-linux CHIP=xxx FLASH_TYPE=xxx all
或者
make OSDRV_CROSS=arm-hisiv600-linux CHIP=xxx FLASH_TYPE=xxx all
参数说明:
CHIP:设为hi3519v101参数时,对应芯片为hi3519v101;设为hi3516av200参数时,对应芯片为hi3516av200。
FLASH_TYPE:设为nand参数时,使用Nand Flash;设为spi参数时,使用SPI Nor Flash或SPI Nand Flash。
(2)清除整个osdrv目录的编译文件:
make OSDRV_CROSS=arm-hisiv500-linux CHIP=xxx clean
或者
make OSDRV_CROSS=arm-hisiv600-linux CHIP=xxx clean
(3)彻底清除整个osdrv目录的编译文件,除清除编译文件外,还删除已编译好的镜像:
make OSDRV_CROSS=arm-hisiv500-linux CHIP=xxx distclean
或者
make OSDRV_CROSS=arm-hisiv600-linux CHIP=xxx distclean
(4)单独编译kernel:
待进入内核源代码目录后,执行以下操作,如果芯片为hi3516av200,将hi3519v101替换为hi3516av200。
cp arch/arm/configs/hi3519v101_big_little_xxx_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- uImage
或者
cp arch/arm/configs/hi3519v101_big_little_xxx_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiv600-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv600-linux- uImage
内核配置文件说明如下:
(5)单独编译uboot:
待进入boot源代码目录后,执行以下操作,如果芯片为hi3516av200,将hi3519v101替换为hi3516av200。
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- hi3519v101_xxx_config
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux-
或者
make ARCH=arm CROSS_COMPILE=arm-hisiv600-linux- hi3519v101_xxx_config
make ARCH=arm CROSS_COMPILE=arm-hisiv600-linux-
将生成的 u-boot.bin 复制到 osdrv/tools/pc_tools/uboot_tools/ 目录
./mkboot.sh reg_info_hi3519v101.bin u-boot-hi3519v101.bin
将生成可用的 u-boot-hi3519v101.bin 镜像文件
(6)制作文件系统镜像:
在osdrv/pub/中有已经编译好的文件系统,因此无需再重复编译文件系统,只需要根据单板上flash的规格型号制作文件系统镜像即可。
spi flash使用jffs2格式的镜像,制作jffs2镜像时,需要用到spi flash的块大小。这些信息会在uboot启动时会打印出来。建议使用时先直接运行mkfs.jffs2工具,根据打印信息填写相关参数。下面以块大小为256岁KB为例:
osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x40000 -o osdrv/pub/rootfs_uclibc_256k.jffs2
或者
osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_glibc -l -e 0x40000 -o osdrv/pub/rootfs_glibc_256k.jffs2
nand flash和spi nand flash使用yaffs2格式的镜像,制作yaffs2镜像时,需要用到nand flash的pagesize和ecc。这些信息会在uboot启动时会打印出来。建议使用时先直接运行mkyaffs2image工具,根据打印信息填写相关参数。
示例:
2KB pagesize、4bit ecc命令格式为:
osdrv/pub/bin/pc/mkyaffs2image100 osdrv/pub/rootfs_uclibc osdrv/pub/rootfs_uclibc_2k_4bit.yaffs2 1 2
或者
osdrv/pub/bin/pc/mkyaffs2image100 osdrv/pub/rootfs_glibc osdrv/pub/rootfs_glibc_2k_4bit.yaffs2 1 2
5.烧录
5.1.使用hitool工具!烧录uboot
5.2.使用tftp烧录kernel
主机配置好了,板子一直不行,ping不同,可能是网卡驱动的问题,修改完uboot之后再来看。