从零开始创建Hi3516DV300在EMMC上的根文件系统

目录

  • Hi3516DV300及测试环境介绍
  • 创建步骤
    • 1.busybox的编译
    • 2.海思工具的编译
      • 2.1 himm工具的编译
      • 2.2 make_ext4fs工具的编译
    • 3.建立根文件系统的目录
      • 3.1 复制busybox编译的文件到rootfs目录
      • 3.2 复制himm工具到rootfs
      • 3.3 建立根文件系统目录结构
      • 3.4 填充etc目录
      • 3.5 填充lib目录
    • 4.打包rootfs镜像
  • 注意事项
  • 本文资源分享
  • 参考

Hi3516DV300及测试环境介绍

海思Hi3516DV300使用arm-himix200-linux-工具链,内含双核 ARM Cortex-A7。

本文使用的测试硬件为 荣品Hi3516DV300开发板 ,淘宝有售,此处非广告。使用的SDK版本为 Hi3516CV500_SDK_V2.0.1.0

创建步骤

1.busybox的编译

busybox的作用是提供Linux下的一系列命令工具,独立于内核,因为内核提供管理但不提供工具。目标平台不同,就需要使用不同的交叉编译工具链进行编译,编译步骤很简单。来源见参考1。

SDK中提供busybox的源码故无需下载。在 /Hi3516CV500_SDK_V2.0.1.0/package/osdrv/opensource/busybox 目录下解压busybox-1.26.2.tgz。修改Makefile中的 ARCHCROSS_COMPILE 两项。

从零开始创建Hi3516DV300在EMMC上的根文件系统_第1张图片

在命令行输入

make menuconfig

进入配置菜单。选中Busybox Settings->Build Options->Build BusyBox as a static binary (no shared libs)项(空格键选中)。如下图所示:

从零开始创建Hi3516DV300在EMMC上的根文件系统_第2张图片其它的配置项均遵从默认即可。退出配置菜单并保存。

命令行下输入:

make
make install

即可在busybox目录下生成 _install 文件夹。这里面存放的就是linux下操作的基本命令了。

2.海思工具的编译

Hi3516CV500_SDK_V2.0.1.0/package/osdrv/tools/board 目录下,存放了板端可能用得到的工具。在 Hi3516CV500_SDK_V2.0.1.0/package/osdrv/tools/pc 目录下,则需要使用 make_ext4fs 工具。

2.1 himm工具的编译

himm工具是海思提供的可以直接操作SOC寄存器的工具,当配置IO复用或者调整IRCUT等的时候,可能会用上。himm工具在板端目录下的 reg-tools-1.0.0 文件夹内,命令行进入直接输入 make 编译即可。

2.2 make_ext4fs工具的编译

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。

3.建立根文件系统的目录

本阶段步骤部分来源为:《Hi3516CV500╱Hi3516DV300╱Hi3516AV300 开发环境用户指南》P18。

找一个自己喜欢的目录,建一个用于存放根文件系统的文件夹,比如这里就单纯的命名为 rootfs

3.1 复制busybox编译的文件到rootfs目录

这一步很简单,因为目录还是空的,所以直接拷贝busybox目录下的 _install 中全部文件(夹)到 rootfs 目录即可。

3.2 复制himm工具到rootfs

在himm工具编译完后,将其目录下 bin 文件夹中的内容复制到 rootfs/bin 中,这样就算完成了。

3.3 建立根文件系统目录结构

使用命令行进入 rootfs 文件夹中,输入:

mkdir etc dev lib tmp var mnt home proc

3.4 填充etc目录

进入目录:

/Hi3516CV500_SDK_V2.0.1.0/package/osdrv/opensource/busybox/busybox-1.26.2/examples/bootfloppy/etc

将其中的所有文件拷贝到 rootfs/etc 中,这将作为kerne的“启动”文件夹。

3.5 填充lib目录

Hi3516DV300芯片具有浮点运算单元和neon,程序运行需要依赖编译工具提供的运行库,进入海思arm-himix200-linux-工具链对应目录下:

cd /opt/hisi-linux/x86-arm/arm-himix200-linux/runtime_glibc/a7_softfp_neon-vfpv4

可以看到其中有一个孤零零的 lib.tgz 文件,解压到rootfs中的lib文件夹内即可。

4.打包rootfs镜像

将前面编译好的 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外挂的):

从零开始创建Hi3516DV300在EMMC上的根文件系统_第3张图片

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@燕卫博————

你可能感兴趣的:(从零开始创建Hi3516DV300在EMMC上的根文件系统)