HI3516DV300_20_根文件系统解析1


一、根文件系统来自哪里

1.1 包含哪些部分

rootfs:这是根文件系统里面比较熟悉的

userdata:用户数据

比如,安卓手机里面,就是有一些目录,专门存放我们的用户数据的

编译完成之后,是在我们的这个result目录里面

但是,result只是一个符号链接,指向的其实是/osdrv/pub

真正的位置,其实是在/osdrv/pub里面的。这里面;其实就是我们构建完后,生成的。

以上分别是:U-boot,Kernel,Rootfs

在这个userdata里面,是有userdata的
在这里面,有很多的文件,是因为有很多的配置

userfs里面,最主要的就是那个user.conf文件,那个conf文件呢,可以被配置成各种参数

sensor,lcd的不同造成了各种差异

这里,这里提供一个,我们根据自己的需求,自己去配,也很简单

如何生成的呢,其实,就是通过这个命令:make_ext4fs这个命令来生成

1.2 基本流程

如何构建根文件系统:

  • 首先,建立这些目录,也就是常见的那些目录
  • 然后,再把busybox移植进去
  • 然后,再把那些必要的英文程序库给拷贝进去
  • 再然后,生成一个文件夹格式的根文件系统
  • 最后,再用make工具去make

这整个make流程是不变的

1.3 具体流程

一开始,空的根文件系统是上面这个

这上面这个东西,一开始的时候,不是全空的,是有一些东西的,是在海思的SDK里面提供的

解压之后,就生成了这个文件夹

生成了这个之后,把制作根文件系统过程中,需要拷贝的东西,都拷贝到这个文件夹中来

1.4 文件夹分析

现在,可以直接把这个文件夹拷贝到Windows中进行分析

因为分析的过程很简单,所以,现在就不拷贝出来了

1.5是怎样填充的呢

实际上,是有一些脚本,或者一些Makefile进行填充的

实际上,是在这个脚本里面可以看到的

现在,可以来分析这个make.sh这个脚本文件

其实,这一套,在Makefile里面也是有的

但不管用的是那一套,套路是一样的

这里面,定义了很多目录,定义的这些目录都很重要,因为到时候哪个去哪里找,都是看这里的

这个是build u-boot

这个是build kernel

这个是用来编译:busy box的

如果没有busybox,也没有busybox_dir,那么,就创建一个文件指向这个busybox_dir,也就是用了符号链接

如果还没有创建成功的话,就返回错误

如果成功的话, 就创建了这个符号链接了

如果有.config的话,那就直接用了

如果没有.config的话,copy我们的busybox中的.config到到。config

这就是那个什么的Make default_config

打印出CPU的核心数

然后,这里,就开始执行make了

然后再进行make

然后,进行make install

然后,再把install的内容给copy到这里

就是在这一步,把busybox给填充进去了

否则,编译生成busybox失败

然后,这一步,就是开始实际制作rootfs了

这个osdrv/pub,其实就是我们的这个目录

其实也就是result目录

如果不存在rootfs,那就先解压开

否则就提示没有找到,在解压开之后,就进入到linux的那个sample目录下

这个A7_LINUX_DIR,其实就是这个:

这个smp其实就是多核的意思

现在开始往rootfs里面添加东西了,现在来查看一下cp2rootfs.sh

这个FS_CUSTOM就是这个目录:

这个就是我们要制作的根文件夹形式的文件系统的根目录

然后,这个目录里面呢,就有一个usr

这里呢,是copy到usr/sample里面来

所以呢,就来看一下这里的sample:

这里面呢,就有sample

最终在开发板上面运行的,也是这样的,现在来看一下开发板这边:

最终的执行程序,就是这个vio

这个vio就是我们双sensor采集,在屏幕上来显示的那个,这个程序呢,其实对应的就是这个vio

就是在我们copy到rootfs的时候哦,copy进来的

这里面,其实copy了很多个sample

这里面,也copy了一个usr script

这些脚本是干什么的呢?其实是可以在这边看一下的:

这里面的一些脚本,其实就是测试脚本

这些脚本也要部署到开发板上,如果不部署这些脚本,怎么测试呢?

然后,创建了2个空文件夹,这两个空文件夹创建后,用来干嘛的呢?

userdata这个目录创建来是用来在我们后面挂载我们的user_fs的

也就是说:最终生成的user_data,烧录的时候,烧录的最后的那个分区,最后,就会被挂载到userdata这个文件夹里面去,所以,在这里创建这个文件夹就是为了制造它的挂载点

usr这个目录创建来是为了做什么呢?这个就是用户用来放我们自己的一些东西的,这个也就是用户的目录

这样做也就是为了看起来比较正式

也是为了将来放数据的时候,比较正规

这个就是用户的目录里面有一个回收站,这个可以理解为,就是用户的桌面

这是与共享设备有关的

这个就是为了进入到RESULT_DIR,然后执行打包命令,打包制作了一个ext4文件,指定了大小为200M,但是实际没有200M

然后,这个就弄完了,开始制作自己的userdata了

userdata其实就是刚刚看到的那个userdata文件直接制作

实际上,制作文件系统的流程还是比较简单的,就是这样的一些流程而已

知道文件从哪里来的,这样就OK了

但是,这里不应当还有好多的东西都要被复制的吗?

比如说usr目录下,还有好多的.ko文件,Qt文件,是没有被复制的,应该也是在其他什么地方被复制的

buildroot,makefile,shell脚本,等等都可以进行制作的

Linux里面的执行从:/etc/init.d这个地方的rcS开始的

但是,这个是谁决定的呢?这个是busybox决定的;因为busybox是我们的任务1


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