你好。
我试图围绕文件系统(ext2/3 等)、设备驱动程序和设备文件之间的关系进行思考。
我将阐述我对每个术语的理解,然后是我的问题。
据我所知,设备驱动程序是内核端代码,处理 I/O 和访问某些设备(鼠标、闪存等)的逻辑,它需要实现几个功能(例如打开、读取等)并在注册设备时将它们分配给一些函数指针。
设备文件是一个通常位于 /dev
中的文件,它应该用作设备驱动程序的接口,通过分配给该文件的主要和次要值。
我不认为我完全理解这个概念,文件系统应该处理 I/O 和对物理存储在驱动器上的文件的一般访问,但这听起来像一个设备驱动程序,所以 - 希望在这里提供更多信息
>例如,如果我要将备份 ssd 的 /dev/sdb1
挂载到某个挂载点,则说 /mnt/temp
- /dev/sdb1
将是设备文件,文件系统类型将是分机4。
现在当我 cd
到 /mnt/temp
并使用 ls
时,应该调用设备驱动程序实现的 open
方法。
open
函数?感谢您的帮助。
答案 0 :(得分:1)
这是一个很好的问题,但相当多肉! :)
关于您的问题 2,这里有一些关于 open
是/做什么的信息。 open
是一个 libc 调用 - 它是 POSIX 系统必须实现的 C 函数。现在基本上每个发行版都使用一个名为 glibc(GNU libc 实现)的 libc 版本,但尤其是在 RAM 或存储资源有限的嵌入式设备上,您有时仍然会看到人们使用其他 libc 实现。 Here's glibc open
的联机帮助页。 open
通过尝试打开给定路径名的文件来工作 - 它与文件系统对话。对于open
,文件系统在底层存储层实现方式的差异无关紧要。所以,你现在写的问题 2 的措辞(“如何在我讨论的场景中调用适当的 open
函数?”)有点偏离基础:只有一个 open
函数,而不是每个文件系统实现多个函数。