以下内容源于朱有鹏嵌入式课程对的学习,如有侵权,请告知删除。
一、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。