zoukankan      html  css  js  c++  java
  • linux内核(三)文件系统

    1、为什么需要根文件系统

    (1)init进程的应用程序在根文件系统上
    (2)根文件系统提供了根目录/
    (3)内核启动后的应用层配置(etc目录)在根文件系统上。几乎可以认为:发行版=内核+rootfs
    (4)shell命令程序在根文件系统上。譬如ls、cd等命令
    总结:一套linux体系,只有内核本身是不能工作的,必须要rootfs(上的etc目录下的配置文件、/bin /sbin等目录下的shell命令,还有/lib目录下的库文件等···)相配合才能工作。

    下面是根文件系统顶层目录 

    根文件系统的实质是什么

    (1)根文件系统是特殊用途的文件系统。
    (2)根文件系统也必须属于某种文件系统格式。rootfstype=
    (3)究竟文件系统是用来干嘛的。ZnFAT
    首先,存储设备(块设备,像硬盘、flash等)是分块(扇区)的,物理上底层去访问存储设备时是按照块号(扇区号)来访问的。这就很麻烦。
    其次,文件系统是一些代码,是一套软件,这套软件的功能就是对存储设备的扇区进行管理,将这些扇区的访问变成了对目录和文件名的访问。我们在上层按照特定的目录和文件名去访问一个文件时,文件系统会将这个目录+文件名转换成对扇区号的访问。
    最后,不同的文件系统的差异就在于对这些扇区的管理策略和方法不同,譬如坏块管理、碎片管理。

    2、根文件系统的形式

    2.1镜像文件形式

    (1)使用专用工具软件制作的可供烧录的镜像文件
    (2)镜像中包含了根文件系统中的所有文件
    (3)烧录此镜像类似于对相应分区格式化。
    (4)镜像文件系统具有一定的格式,格式是内化的,跟文件名后缀是无关的。

    2.2文件夹形式

    (1)根文件系统其实就是一个包含特定内容的文件夹而已
    (2)根文件系统可由任何一个空文件夹添加必要文件构成而成
    (3)根文件系统的雏形就是在开发主机中构造的文件夹形式的

    总结

    (1)镜像文件形式的根文件系统主要目的是用来烧录到块设备上,设备上的内核启动后去挂载它。镜像文件形式的根文件系统是由文件夹形式的根文件系统使用专用的镜像制作工具制作而成的。
    (2)最初在开发主机中随便mkdir创建了一个空文件夹,然后向其中添加一些必要的文件(包括etc目录下的运行时配置文件、/bin等目录下的可执行程序、/lib目录下的库文件等···)后就形成了一个文件夹形式的rootfs。然后这个文件夹形式的rootfs可以被kernel通过nfs方式来远程挂载使用,但是不能用来烧录块设备。我们为了将这个rootfs烧录到块设备中于是用一些专用的软件工具将其制作成可供烧录的一定格式的根文件系统镜像。
    (3)文件夹形式的rootfs是没有格式的,制作成镜像后就有了一定的rootfs格式了,格式是由我们的镜像制作过程和制作工具来决定的。每一种格式的镜像制作工具的用法都不同

    说明:关于各种文件系统的说明:

    VFS(virtual File System)的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统,即为各类文件系统提供了一个统一的操作界面和应用编程接口。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。

    NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

    上面是百度百科,可能看了还不太清楚他们的关系。

    先看一下我上上篇博客:https://www.cnblogs.com/xdyixia/p/9248240.html中的start_kernel函数,为了方便直接截图了

    1)VFS是linux内核的一部分,作为一个编程接口,统一所有类型的文件系统。open()、read()、write()等系统调用通过这个编程接口去打开文件(所有类型的文件系统,驱动)。

    2)根文件系统是linux内核启动后首先挂接(mount)的文件系统。

    3)网络文件系统是挂在根文件系统上的。

    转载:https://www.cnblogs.com/PengfeiSong/p/6442986.html

    https://blog.csdn.net/kelsey11/article/details/74075143

    百度百科

  • 相关阅读:
    RN-Android构建失败:Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'AwesomeProject'.
    Android更新包下载成功后不出现安装界面
    真机调试: The application could not be installed: INSTALL_FAILED_TEST_ONLY
    react native 屏幕尺寸转换
    Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
    React Native安卓真机调试
    git提交代码报错Permission denied, please try again
    The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
    命令行设置快捷命令
    Linux 常用指令
  • 原文地址:https://www.cnblogs.com/xdyixia/p/9251271.html
Copyright © 2011-2022 走看看