by 20200601
本笔记追求将文件系统或者存储设备从linux的启动、加载到运行一路走来浮于面上的大脉络蓝图,串连成线,梳理出轮廓纲要,形成骨干链条。各个点内的机制与实现,以及点与点之间配合的细节之处,之后再各个点逐一纵向理解。
一、分区
![](https://i-blog.csdnimg.cn/blog_migrate/7c4ea9e1db976dcc65a03ab34bf55a05.png)
整个Flash的剖面如上图,0地址处是Uboot,随之是要给到kernel的启动参数存放区,然后是kernel,最后是文件系统。文件系统根据必备性,放到前面的是rootfs,最后才是用户空间的其他文件系统。
rootfs之所单列出来,是因为她是kernel的必要依赖,rootfs里面都是系统启动运行必备的程序和库文件。
上面这个剖面所表示的Flash地址空间就设备uboot的分区表了,这个分区表实质上是人为约定下每个部分的起止地址而已,这个起止地址是需要告诉程序的,uboot根据bootparams的地址和kernel的地址来启动kernel并传递参数,kernel根据rootfs的地址来加载rootfs。
uboot/include/config/xxx.h 里面有一个宏定义
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \
"128k(params)," \
"2m(kernel)," \
"-(root)"
上面是整个裸flash分区情况,当进到kernel后,还需要对磁盘(flash)在进行分区,这个分区主要是给文件系统用的,这个分区后,每个分区都指定一种文件系统格式,将一个文件系统格式指定给分区,与分区关联起来,并指定挂载点的过程叫挂载(mount),注意这里是有三个要素:分区、文件系统、挂载点。所谓挂载点就是给分区在根目录树上找一个访问路径。
mount -t ext2 /dev/loop0 /mnt/point1
文件系统的创建
mkfs.ext4 /dev/sda
mkfs.btrfs /dev/sdb
![](https://i-blog.csdnimg.cn/blog_migrate/dd859a34c63087758bd35ac09302a5fc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4a30f563ab0bdc2f41608ef3ee060eee.png)
从上面梳理出分区的内容可知:
sysupgrade升级的是kernel+rootfs,而zgateway 在另外的其他分区,属于非系统必备的应用程序,所以升级的时候zgateway是不被改动的,这同windows安装C盘其他盘不被改动是一样的道理。
双固件就是有两个kernel区、两个rootfs区。
二、文件系统与根文件系统rootfs的澄清
根文件系统与kernel之间的关系,都说文件系统是kernel的子系统,但为啥kernel与根文件系统是分开独立的,而不是包含在kernel中?
我认为这里是概念上的歧义导致的,虽有都有“文件系统”四个字,但实质不是一个东西。
文件系统是一个模块概念,作用是组织磁盘上的数据,实现代码与、机制、原理都在kernel中,所以说是kernel的五大巨头之一。
根文件系统,不是上面哪个文件系统的概念,实际上是核心应用程序的集合,然后用文件系统将这些程序、库的集合组织在一起,这些应用是系统启动不可或缺的,必须的,并且内核把这些应用程序放在/根目录下,所以才叫根文件系统。
实际上,从性质上看,根文件系统和其他分区都属于应用程序,只是重要性不一样而已,根文件系统的程序不能少,少了系统就不稳定不正常了,这如同货车的方向轮与后面并排的轮胎相似,都是轮胎,并排的轮胎坏一个暂时没事,方向轮有问题车就没法动。
三、分区与文件系统的工具
-
mount
-
mtd
-
df
-
mkfs
主要是获取分区、文件系统格式、挂载点三者的状态、格式与容量信息
/# cat proc/partitions
major minor #blocks name
31 0 512 mtdblock0
31 1 512 mtdblock1
31 2 256 mtdblock2
31 3 32768 mtdblock3
31 4 1408 mtdblock4
31 5 31360 mtdblock5
31 6 512 mtdblock6
31 7 512 mtdblock7
31 8 512 mtdblock8
31 9 16384 mtdblock9
31 10 32768 mtdblock10
31 11 45824 mtdblock11
253 0 62464 zram0
上面的内容今天白天梳理的时候还是没觉得啥,现在觉得太似曾相识了,这分区啥的同单片机的flash一样的简直一个模子的。