文件系统1-之轮廓纲要

by 20200601
本笔记追求将文件系统或者存储设备从linux的启动、加载到运行一路走来浮于面上的大脉络蓝图,串连成线,梳理出轮廓纲要,形成骨干链条。各个点内的机制与实现,以及点与点之间配合的细节之处,之后再各个点逐一纵向理解。
 
一、分区
文件系统1-之轮廓纲要_第1张图片
整个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

 

 
文件系统1-之轮廓纲要_第2张图片 文件系统1-之轮廓纲要_第3张图片
从上面梳理出分区的内容可知:
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一样的简直一个模子的。

 
 
 

你可能感兴趣的:(嵌入式linux)