2.根文件系统的原理

以下内容源于朱有鹏嵌入式课程对的学习,如有侵权,请告知删除。


一、linuxrc本质

1、/linuxrc是一个可执行的应用程序

(1)/linuxrc是应用层的,和内核源码没有关系;

(2)/linuxrc在开发板当前内核系统下是可执行的。

  • 在ARM SoC的linux系统下,那么这个程序就是用arm-linux-gcc编译链接的;
  • 如果是在PC机linux系统下,那么这个程序就是用gcc编译连接的。

(3)/linuxrc如果是静态编译连接的,则直接可以运行;如果是动态编译连接的,必须提供必要的库文件才能运行。

  • 但实际上/linuxrc由内核直接调用执行,因此用户没有机会去导出库文件的路径,因此/linuxrc没法动态连接,一般都是静态连接的

2、/linuxrc执行时引出用户界面

(1)用户操作界面由/linuxrc带出来。

(2)应用程序是直接或者间接的被/linuxrc调用执行的。

  • 用户界面程序和其他的应用程序就是进程2、3、4……
  • 进程1(init进程,也就是/linuxrc)是其他所有应用程序进程的祖宗进程

3、/linuxrc负责系统启动后的配置

(1)操作系统启动起来后不能直接用,需要配置;

(2)操作系统启动后的应用层的配置(一般叫运行时配置,英文简写etc)是为了让我们的操作系统用起来更方便,更具实用性。

4、/linuxrc在嵌入式linux中一般就是busybox

(1)busybox是一个C语言写出来的项目,里面包含了很多.c文件和.h文件。

  • 此项目可以被配置编译成各个平台下面可以运行的应用程序。
  • 如果用arm-linux-gcc来编译busybox就会得到一个可以在我们开发板linux内核上运行的应用程序。

(2)busybox是为了在嵌入式环境下构建rootfs而开发的,即它就是专门开发的init进程应用程序。

(3)busybox同时也为当前系统提供了一整套的shell命令程序集。

  • 譬如vi、cd、mkdir、ls等。在桌面版的linux发行版(譬如ubuntu、redhat、centOS等)中vi、cd、ls等都是一个一个的单独的应用程序。
  • 但是在嵌入式linux中,为了省事,把vi、cd等所有常用的shell命令集合到一起构成一个shell命令包,起名叫busybox。


二、rootfs有哪些目录?

1、最重要的是/linuxrc

2、dev目录下的设备文件

  • 在linux中一切皆是文件,因此一个硬件设备也被虚拟化成一个设备文件来访问,在linux系统中/dev/xxx就表示一个硬件设备,我们要操作这个硬件时就是open打开这个设备文件,然后read/write/ioctl操作这个设备,最后close关闭这个设备。
  • 在最小rootfs中/dev目录也是不可少的,这里面有一两个设备文件是rootfs必须的。

3、sys和proc目录

  • 在最小rootfs中也是不可省略的,但是这两个只要创建了空文件夹即可,里面是没东西的,也不用有东西。这两个目录也是和驱动有关的。属于linux中的虚拟文件系统。

4、usr

  • 是系统的用户所有的一些文件的存放地,这个东西将来busybox安装时会自动生成。

5、etc目录

  • 是很关键很重要的一个,目录中的所有文件全部都是运行时配置文件。
  • /etc目录下的所有配置文件会直接或者间接被/linuxrc调用,完成操作系统的运行时配置。
  • /etc目录是制作rootfs的关键。

6、lib目录

  • rootfs中很关键的一个,不能省略的一个。lib目录下放的是当前操作系统中的动态和静态链接库文件。我们主要是为了其中的动态链接库。

三、VFS简介

1、什么是VFS?

VFS是linux内核的一种设计理念、设计机制。VFS就是vitrual file system,叫虚拟文件系统

  • 具体的一些文件系统如FAT、NTFS、ext2、ext3、jffs2、yaffs2、ubi等,它们的设计目的是为了管理块设备。
  • VFS借鉴文件系统的设计理念,将硬件设备的访问转化成对目录+文件的访问
  • 因此有了VFS之后,可以通过设备文件(目录+文件名,譬如/dev/mmcblk0p2)的方式来访问系统中的硬件设备。

2、VFS的意义

(1)将对硬件设备的访问和对普通文件的访问给接口统一化了(linux中一切届是文件)。

(2)将操作系统上层(应用层)对下层不同文件系统类型的访问细节给屏蔽掉了。


  • 如果没有VFS,写cp命令(其他命令也一样)时,需要考虑cp的这个文件在什么文件系统类型下,因此cp命令非常复杂。
  • 而VFS成了一个隔离层,隔离了下层的不同文件系统的差异性,对上层应用提供一个统一的接口。

(3)VFS将不同文件系统和下层硬件设备(块设备)驱动之间的细节也给屏蔽了。

  • 不同类型的文件系统在本身设计时,不用考虑各种不同的硬件设备的具体操作差异,这里有一个类似于VFS的设计理念。

3、VFS和我们学习的关系

(1)VFS机制和rootfs挂载,和其他文件系统的挂载都是有关联的。

(2)内核中有一些sys proc这种虚拟文件系统,这东西也是和VFS机制有关。

(3)/dev/目录下的设备文件都和VFS有关,所以学习驱动绕不开VFS

猜你喜欢

转载自blog.csdn.net/u011124985/article/details/80093055
今日推荐