Linux kernel 设备驱动程序和文件系统之间的关系是什么 背景

Linux kernel 设备驱动程序和文件系统之间的关系是什么 背景,linux-kernel,filesystems,linux-device-driver,device-driver,Linux Kernel,Filesystems,Linux Device Driver,Device Driver,你好 我正试着去理解文件系统(ext2/3等)、设备驱动程序和设备文件之间的关系 我将展示我对每个学期的理解,然后是我的问题 设备驱动程序 据我所知,设备驱动程序将是内核端代码,用于处理访问某些设备(鼠标、闪存等)的I/O和逻辑,它需要实现几个功能(如打开、读取等),并在注册设备时将它们分配给一些函数指针 设备文件 设备文件通常位于/dev中,通过分配给该文件的主要值和次要值,该文件应用作设备驱动程序的接口 文件系统 我不认为我完全理解这个概念,文件系统应该处理I/O和对物理存储在驱动器上的文件

你好

我正试着去理解文件系统(ext2/3等)、设备驱动程序和设备文件之间的关系

我将展示我对每个学期的理解,然后是我的问题

设备驱动程序 据我所知,设备驱动程序将是内核端代码,用于处理访问某些设备(鼠标、闪存等)的I/O和逻辑,它需要实现几个功能(如打开、读取等),并在注册设备时将它们分配给一些函数指针

设备文件 设备文件通常位于
/dev
中,通过分配给该文件的主要值和次要值,该文件应用作设备驱动程序的接口

文件系统 我不认为我完全理解这个概念,文件系统应该处理I/O和对物理存储在驱动器上的文件的一般访问,但这听起来像是一个设备驱动程序,所以-希望在这里提供更多信息

脚本 例如,如果我要将作为备份ssd的
/dev/sdb1
装载到某个装载点,那么
/mnt/temp
-
/dev/sdb1
将是设备文件,文件系统类型将是ext4。 现在,当我
cd
/mnt/temp
并使用
ls
时,应该调用设备驱动程序实现的
open
方法

我的要求/问题
  • 我对设备驱动程序和文件的理解是否正确?如果不是的话,我希望能提供更多的细节
  • 在我讨论的场景中,如何调用相应的
    open
    函数
  • 如果设备驱动程序是实现访问的驱动程序,那么文件系统类型在文件访问中究竟扮演什么角色

  • 谢谢你的帮助。

    这是一个好问题,但很充实!)


    这是你的问题2,这里有一些关于
    open
    是/做什么的信息
    open
    是一个libc调用,它是POSIX系统必须实现的一个C函数。现在,基本上每个发行版都使用一个名为glibc(gnulibc实现)的libc版本,但特别是在内存或存储资源有限的嵌入式设备上,您有时仍然会看到人们使用其他libc实现。glibc的手册页
    打开
    <代码>打开通过尝试在给定路径名处打开文件来工作-它与文件系统通信。要打开,文件系统在底层存储层的实现方式不同并不重要。因此,您现在编写的问题2的措辞(“在我讨论的场景中,如何调用适当的
    open
    函数?”)有点离谱:只有一个
    open
    函数,而不是每个文件系统实现多个。

    关于文件系统,每种文件系统类型都有一个文件系统驱动程序(即,实现文件系统逻辑的代码)。某些类型的文件系统使用块设备进行存储—通常是一个主块设备,但某些文件系统可以出于特殊目的使用额外的块设备。其他类型的文件系统不使用块设备,例如procfs之类的虚拟文件系统和CIFS之类的网络文件系统(至少就客户端而言)。您需要了解层次,例如协议堆栈。文件系统实现数据块的逻辑组织,位于上层(更接近用户空间)。块设备驱动程序位于下层(更接近硬件)。设备驱动程序通常只是提供对外围设备的访问,忽略数据内容,并以设备支持的块(例如扇区或LBA、以太网帧或单个字节)传输数据。IOW an open()syscall可以同时使用文件系统和设备驱动程序功能。系统调用将解析路径,然后通过内核的VFS(虚拟文件系统)进行路由层到相应的文件系统驱动程序以打开该文件。如果该文件不是常规文件或目录,则调用将被路由到该类型文件的相应处理程序。例如,“字符设备”文件,它将被路由到
    chrdev_open
    ,然后如果该设备已注册“打开”文件操作处理程序,它将被路由到该设备的驱动程序。因此,如果我理解正确,在访问已安装文件系统上的文件时,操作将被路由到相应的文件系统驱动程序,除非我正在打开一个特殊文件(块/字符设备)在这种情况下,将执行适当的设备驱动程序功能?感谢您的回答!我将尝试澄清,因为我认为我可能混淆了一些东西。我理解glibc函数包装了实际的系统调用,但我仍然对文件系统(本应管理对磁盘文件的数据访问)的“操作方式”感到困惑.从我通过评论所理解的,当我尝试阅读时(glibc的
    读取
    /
    写入
    /
    在已装载的文件系统上打开
    文件,内核中应该有一个文件系统驱动程序来获取并处理这些请求。我觉得这里有很多漏洞,你能帮我澄清一下吗?我想我更清楚地看到了你的好奇。是的,内核有一个虚拟文件系统m(VFS)层,负责从用户空间接收与fs相关的调用,并将需要在这些调用上完成的工作分配给文件系统驱动程序,该驱动程序负责处理文件所在的任何文件系统。内核在VFS上对详细信息有很好的了解。这有帮助吗?