海思Hi3516DV300使用arm-himix200-linux-工具链,内含双核 ARM Cortex-A7。
本文使用的测试硬件为 荣品Hi3516DV300开发板 ,淘宝有售,此处非广告。使用的SDK版本为 Hi3516CV500_SDK_V2.0.1.0 。
busybox的作用是提供Linux下的一系列命令工具,独立于内核,因为内核提供管理但不提供工具。目标平台不同,就需要使用不同的交叉编译工具链进行编译,编译步骤很简单。来源见参考1。
SDK中提供busybox的源码故无需下载。在 /Hi3516CV500_SDK_V2.0.1.0/package/osdrv/opensource/busybox 目录下解压busybox-1.26.2.tgz。修改Makefile中的 ARCH 和 CROSS_COMPILE 两项。
在命令行输入
make menuconfig
进入配置菜单。选中Busybox Settings->Build Options->Build BusyBox as a static binary (no shared libs)项(空格键选中)。如下图所示:
命令行下输入:
make
make install
即可在busybox目录下生成 _install 文件夹。这里面存放的就是linux下操作的基本命令了。
在 Hi3516CV500_SDK_V2.0.1.0/package/osdrv/tools/board 目录下,存放了板端可能用得到的工具。在 Hi3516CV500_SDK_V2.0.1.0/package/osdrv/tools/pc 目录下,则需要使用 make_ext4fs 工具。
himm工具是海思提供的可以直接操作SOC寄存器的工具,当配置IO复用或者调整IRCUT等的时候,可能会用上。himm工具在板端目录下的 reg-tools-1.0.0 文件夹内,命令行进入直接输入 make 编译即可。
ext4是用于EMMC的文件系统,make_ext4fs工具在pc端目录下的 ext4_utils 文件夹内,如果安装过程中出错,提示 cannot find uuid library required for mkfs.ubifs ,则验证有没有安装以下依赖包:
sudo apt install libuuid1:i386 zlib1g-dev liblzo2-dev uuid-dev pkg-config
而后重新 make 即可。本步骤来源见参考2。
本阶段步骤部分来源为:《Hi3516CV500╱Hi3516DV300╱Hi3516AV300 开发环境用户指南》P18。
找一个自己喜欢的目录,建一个用于存放根文件系统的文件夹,比如这里就单纯的命名为 rootfs 。
这一步很简单,因为目录还是空的,所以直接拷贝busybox目录下的 _install 中全部文件(夹)到 rootfs 目录即可。
在himm工具编译完后,将其目录下 bin 文件夹中的内容复制到 rootfs/bin 中,这样就算完成了。
使用命令行进入 rootfs 文件夹中,输入:
mkdir etc dev lib tmp var mnt home proc
进入目录:
/Hi3516CV500_SDK_V2.0.1.0/package/osdrv/opensource/busybox/busybox-1.26.2/examples/bootfloppy/etc
将其中的所有文件拷贝到 rootfs/etc 中,这将作为kerne的“启动”文件夹。
Hi3516DV300芯片具有浮点运算单元和neon,程序运行需要依赖编译工具提供的运行库,进入海思arm-himix200-linux-工具链对应目录下:
cd /opt/hisi-linux/x86-arm/arm-himix200-linux/runtime_glibc/a7_softfp_neon-vfpv4
可以看到其中有一个孤零零的 lib.tgz 文件,解压到rootfs中的lib文件夹内即可。
将前面编译好的 make_ext4fs 工具拷贝到和 rootfs 文件夹同一级目录下,命令行下运行:
./make_ext4fs -l 200M -s rootfs_hi3516dv300.ext4 rootfs
这里,200M指的是根文件系统所占EMMC的大小,可以根据需要修改,-s后面是生成的镜像名,rootfs为待压缩的目录。
至此,得到根文件系统镜像,使用Hi_Tool或者手动操作uboot进行烧录均可。
Hi_Burn下载过程截图(我这里Hi_Tool工具打不开69端口,使用TFTP外挂的):
Hi_Burn操作下的下载命令供参考:
setenv serverip 169.254.134.39
setenv ethaddr 00:7c:6f:41:94:55
setenv ipaddr 169.254.134.0
etenv netmask 255.255.0.0
setenv gatewayip 169.254.134.1
getinfo ddrfree
mw.b 0x81000000 0xFF 0x121f600
tftp 0x81000000 L_rootfs_hi3516dv300.ext4
crc32 81000000 121f5b0
mmc write.ext4sp 0x0 0x81000000 0x7800 0x64000
这些取决于本地设置。
如果需要操作MPP,将MPP下的ko加载即可,此处不表。
运行库的解压一定要在linux环境进行,如果lib中的文件经过Windows环境打包进rootfs,可能导致符号链接损坏,表现为根文件系统烧录成功、linux启动成功、操作命令可以使用,但运行程序时显示 Input/Output error 。
百度网盘链接: https://pan.baidu.com/s/1xYszCIPdaaQFKnms-JJ-KQ
提取码: 4rb1
1.使用BusyBox制作根文件系统
2.hi3516cv500 sdk 编译提示 cannot find uuid library required for mkfs.ubifs
————2020-3-27@燕卫博————