Linux内核4:文件系统1_概
1 Linux文件系统概述
在linux中,可以安装各种不同的文件系统,也就是说文件系统本身和linux内核代码是相对独立的,比如ext2,ext3,ext4等,我想,在安装ubuntu等linux发行版的时候,大家都会发现,有这样的一个选择文件系统的步骤,哈哈哈。
linux读写硬盘的实际情况是,读的硬盘数据对应的高速缓冲区。而高速缓冲区再和硬盘进行对接,通过linux的一些函数进行同步
文件系统的结构,比如:引导快,超级快,i节点位图,数据区,i节点对应文件目录,每一个文件目录都有对应的一个i节点,i节点是文件目录和物理磁盘连接的桥梁,这是一个结构体,里面记录了一些相关信息,比如:文件夹的数组id,长度大小,修改时间,链接数,占用的磁盘的逻辑块,物理块的数组号。
管道:用作进程间通信的工具pipe,一个进程写入管道,另一个读出
文件系统到底如何与底层的设备进行沟通呢?比如vfs,虚拟文件系统,比如字符驱动和块驱动,如何通过文件打开iocontrol,进行操作。
如何移植
2 Linux文件系统的作用
- 管理磁盘数据:磁盘中的文件通过文件系统形成了目录结构,方便管理
- 操作硬件:Linux中所有的硬件都被映射成了文件,使用文件系统对其进行操作
- 提供系统的其他功能,比如:
3 Linux根文件系统
3.1 Linux根文件系统是什么:
Linux根文件系统类似于windows中的C盘,对于Linux来说,没有所谓的C盘,D盘,而是通过挂载的机制完成了windows中的各个盘的区分,其中根文件系统的目录结构对应了c盘的结构
如下图所示,这是一个典型的根文件系统目录结构:
文件系统也叫应用程序,写应用程序不仅要存在文件系统中,并且还要使用文件系统提供的功能,
应用:大多数嵌入式公司做的都是文件系统,例如:系统界面,系统的开机画面,系统的rom,系统的功能,预装软件。
3.2 一个Linux系统运行的简单过程描述
- Uboot的启动,板卡上电后,又uboot启动初始化办卡,将linux内核移到内存中并运行。
- 由linux内核自行做初始化等操作,挂载第一个应用程序(根文件系统/ linuxrc)
- 根文件系统会提供磁盘管理服务,glibc,配置文件,标准库,应用程序,shell命令。Android就是Linux多了一个文件系统:lib+framework,lib提供了很多库,比如c标准库,java库,安卓的虚拟机的库,glibc库等。
3.3 文件系统的重要组成部分
- 标准库:glibc, OpenGL , media Framework 等
比如,android的结构图如下,其中的标准库在第二层,位于Kernel的上方
可以看出,最下面的kernel和linux kernel是完全一样的,上面多了图像库OpenGL,FreeType字体库,视频框架库,数据库接口等库和右边的虚拟机 Core Lib。
- 配置文件
1 /etc/init.d/rcS 想要开机运行什么软件,载入什么画面,执行什么命令,都可以写在rcS文件中。去1
2 sys/ 开机要挂载的设备节点 比如:光驱,usb等
- 设备节点
开机的时候需要挂载一些硬件的设备节点,比如 /dev/console 控制台节点 ; /dev/null —->mknod sudo mknod console c51
- 架构程序(对于Android)
安卓对多种服务和功能进行了系统接口封装,提供给应用层调用,FrameWork层。相当于windos的win32,mfc,也就是windows的api函数
目的:为了方便开发,是的开发者使用集成度更高的api,不用对底层进行操作。
- SHELL
当敲下一个命令,比如ls,之后,命令去找函数,函数去找实现。而所有的shell命令都在文件系统中,linuxrcs
4 典型的文件系统:
4.1busybox
实现了shell命令
作用:
内核在后台运行,要是使用,必须通过系统调用或者信号的方式
文件系统是内核的上一层
1 | new_init_action(SYSINIT, "mount -t proc proc /proc", ""); |
文件系统的初始化机制
创建一些shell命令,并根据此类的shell命令进行相应的操作