HI3516DV300_13_配套SDK中提供的Rootfs分析


一配套SDK中提供的rootfs构建分析1_2

1.1 默认镜像中根文件系统内容解析

1.1.1 烧录了默认镜像进入系统后

1.1.2 进入到bin目录中,宾目录中大部分是busybox的文件

上图中,绿色的,应该是其它某些地方来的,而不是默认的busybox中的东西

1.1.3 komod

ko应该就是去insmod去安装的那个模块

里面是空的

1.1.4 mnt

这个也是一个空目录,因为这只是一个挂载点

1.1.5 share

share目录也是一个空的

1.1.6 usr

  • usr目录下不是空的,是有东西的,并且还有不少的东西

  • bin:肯定也是busybox生成的一些符号链接

除了btools和RpHicom不是默认就有的之外,其它都是

  • lib:里面应该是一些库文件

  • ko:里面有好多东西

这些其实就是芯片里面所用到的那些库,都是mpp相关的库
hi3516dv300_ive.ko:就是图像视频AI处理相关的
这些ko呢是本来就有的,这些是从SDK里面复制过来的
这些ko文件位于SDK的以下位置,实际上就是从这个位置原封不动地拷贝过来的:

注意看有3个脚本,脚本里面就是去insmod这些模块,重启开机就可以观察出来

这里面有些是属于触摸的驱动的,在这个平台,默认移植了两个电容触摸屏的驱动,如下图:

这里也有一些是和网络有关的驱动

  • libexec

这里存放的是运行时库,一个是ftp的server,一个是ssh的server,ssh的server是用来生成key的

  • qt5.12

这里已经默认移植了qt5.12,将来如果要基于Qt5.12来开发程序,那么根文件系统里面就已经提供了,这里的这些文件,也都比较大

  • sbin

这里存放的也是和busybox有关的符号链接
bin和sbin的区别:sbin一般是给网络系统管理员使用的;bin一般是给用户使用的

  • share

share也一定是一个空目录

  • include

里面是安装一些什么东西的头文件,比如OpenSSL与Zlib,这些东西呢,其实可有可无

在开发板上面,只是用来做执行,而不用来做开发,做开发编译就要用到这些头文件

  • lib

lib是拷贝的SDK中的动态链接库

其中编译工具的动态链接库是在外面的

lib动态链接库是位于SDK中的以下路径

ko是内核模块,这些和驱动是相互联系的,ko是将来要insmod到内核内部的

so跟用户程序一样,是工作在用户态的

  • local

local里面有bin和etc

bin:bin里面也是一些简单程序,如下图所示:
基本都是ssh,ftp,scp,openssl相关的程序,基本是移植的第三方的功能的

etc:etc里面基本都是与ssh相关的public key

  • sample

sample里面放的就是我们的应用程序

其实这个sample应用程序也是来自于SDK的以下路径

svp就是图像的智能识别相关的东西
region就是图像的region相关的功能
hifb:就是直接把彩色图像直接输出出去的功能
如果基于海思芯片来开发一些应用程序,一般是先看懂sample,然后基于sample来开发新功能

  • script

script里面存放的就是一些测试脚本

  • tools

里面存放的是一些工具,这些工具,确实是海思SDK里面本来就有的

这些工具位于海思SDK的以下位置:

1.1.7 boot

boot里面是空的

1.1.8 lib

lib就是复制的动态链接库里面的那个lib

1.1.9 nfsroot

一个空白的挂载点

1.1.10 sharefs

这个也是空的

1.1.11 var

这是一个虚拟文件系统,在该文件夹里面有以下东西,在Ubuntu里面也是有的

1.1.12 dev

虚拟的设备文件,里面有以下东西

上面有些,是在安装那些ko文件的时候生成的

本身就是驱动,经过安装后,就会有那些设备文件

1.1.13 linuxrc

linuxrc就是busybox的符号链接

1.1.14 opt

opt也是一个挂载点,也是空的

1.1.15 sys

是一个高版本的虚拟文件系统,是用来做调试用的

1.1.16 etc

里面有很多动态运行时的脚本

除了本身文件系统就有的东西,还多了

ssl:也就是openssl里面的一些配置文件
ppp:应该是支持了ppp拨号,属于4G的功能
wireless:无线网卡
dhcpcd.conf:移植了dhcp功能
包括network在内,都是和网络通信相关的

1.1.17 proc

标准的linux调试文件

1.1.18 tmp

也是一个标准的虚拟文件系统

1.1.19 home

这是用来放用户相关的

1.1.20 mkimg.rootfs,mknod_consol

创建根文件夹形式的根文件系统

mknod:这个是用来mknod用的

1.1.21 root

这个是root用户的宿主目录

1.1.22 usr

这里面也是没有实现的,这里面只有一个回收用的文件夹

1.1.23 init

这个也属于符号链接,也是指向busybox的

1.1.24 sbin

这个是属于系统管理员用到的一些

大部分都还是系统管理员用到的符号链接

少部分是用来连接网卡用到的,用户自己生成的bin

1.1.25 userdata

这个user.conf肯定是在系统启动的时候,去加载了

这个就是运行时配置体系,把这个文件丢到etc下也是可以的

这个强调的是用户的配置,而/etc强调的是系统的配置

1.2配套SDK解压开后rootfs构建上文件解析

1.2.1 make.sh文件分析

  • 首先查看make.sh文件

打开make.sh

里面制作根文件系统最重要的就是用到了这个:

前面这些东西就不说了,和有的没的没啥区别,主要看下面这一段

最核心的,也就是多了以下命令文件:

关键是执行了:source cp2rootfs.sh

  • 文件夹查看

这个文件在哪里呢?

生成rootfs的文件夹已经有一些东西了,ko文件夹下面也有些东西了,所以这个是整个做完了再打了一个包的

其实默认的SDK也只有以下3个文件夹,其它的都是移植过来的

在Package文件夹下面有以下文件,这个也是事先经过交叉编译了

  • 接下来重点分析cp2rootfs.sh文件

新建文件夹

拷贝编译好的OpenSSH

拷贝rootfs-custom

拷贝dhcpcd

拷贝Qt

拷贝ko文件

拷贝lib文件

拷贝reg_tool文件

这个是用来读取寄存器的一个工具,这下面的工具都是可以直接用的,直接和内核进行交互的
himm:Hision Memory Modify
ARM里面的寄存器,其实就是一个内存地址
应用层想读写某个寄存器,直接使用这个工具就够了
这都是海思提供的,能够直接进行硬件操作的工具

拷贝RpHicom文件

这个是用串口来控制RS485用的
单独的一个RS485通信的一个程序

拷贝dump工具文件

Dump其实就是反汇编,这里其实是为了获取某个图像使用的

拷贝Sample

这个是拷贝mpp里面的sample,并且是先创建文件夹,然后再进行Copy

拷贝测试脚本

创建userdata与user文件夹

  • 接下来,创建了一个/dev/shm文件夹

  • 然后,再额外拷贝一些文件

  • 最后,制作根文件系统

1.2.2 如何自己来单独构建这个根文件系统呢?

  • 要传哪个参数

  • 具体怎么执行呢?

  • 最后生成的根文件系统在什么地方呢?

  • 后续如何修改呢?

就是修改make.sh脚本文件

海思的这种玩法确实有它的套路

  • 后续:驱动,mpp,svp,ive

Author: Ruimin Huang
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Ruimin Huang !
  TOC