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

时间:2021-04-08 14:43:29

标签: linux-kernel filesystems linux-device-driver device-driver

背景

你好。

我试图围绕文件系统(ext2/3 等)、设备驱动程序和设备文件之间的关系进行思考。

我将阐述我对每个术语的理解,然后是我的问题。

设备驱动

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

设备文件

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

文件系统

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

>

场景

例如,如果我要将备份 ssd 的 /dev/sdb1 挂载到某个挂载点,则说 /mnt/temp - /dev/sdb1 将是设备文件,文件系统类型将是分机4。 现在当我 cd/mnt/temp 并使用 ls 时,应该调用设备驱动程序实现的 open 方法。

我的请求/问题

  1. 我对设备驱动程序和文件的理解是否正确?如果没有,我希望了解更多细节
  2. 在我讨论的场景中如何调用适当的 open 函数?
  3. 如果设备驱动程序是实现访问的驱动程序,那么文件系统类型在文件访问中究竟扮演什么角色?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是一个很好的问题,但相当多肉! :)

关于您的问题 2,这里有一些关于 open 是/做什么的信息。 open 是一个 libc 调用 - 它是 POSIX 系统必须实现的 C 函数。现在基本上每个发行版都使用一个名为 glibc(GNU libc 实现)的 libc 版本,但尤其是在 RAM 或存储资源有限的嵌入式设备上,您有时仍然会看到人们使用其他 libc 实现。 Here's glibc open 的联机帮助页。 open 通过尝试打开给定路径名的文件来工作 - 它与文件系统对话。对于open,文件系统在底层存储层实现方式的差异无关紧要。所以,你现在写的问题 2 的措辞(“如何在我讨论的场景中调用适当的 open 函数?”)有点偏离基础:只有一个 open函数,而不是每个文件系统实现多个函数。