一、根文件系统来自哪里
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