关于Linux中的设备文件

时间:2015-11-08 04:52:19

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

据我所知,Linux中的设备文件只是用户界面,用户可以与实际设备进行通信。是否还有其他设备文件的使用?

这是否意味着如果用户不需要与真实设备通信,我们不需要设备文件?

此外,他们倾向于将每个真实设备建模为字符或块或网络设备。这是真的吗?

2 个答案:

答案 0 :(得分:3)

让我们从一些历史事实开始:

首先,这是一切的开始。根据{{​​3}},世界是在1970年1月1日星期四上午12点(UTC)创建的,因此在此之前的任何时间都没有(标准)计算方法,因为它根本就不存在;)。

然后,它是70年代(实际上,已故的60年代,但谁在乎呢?),你还记得吗(我不......)?我们当时并不知道the Legend of the Epoch吸烟的是什么,但它似乎是在绝密的贝尔实验室使用的某种异国情调的墨水。他所拥有的文件应该无法访问。他只是在创作之前的一小部分时间,他说......

  

让一切都成为文件!

就是这样。在Unix及其无数的后代(几乎) 一文件中,地狱(也称为/dev/null)是一个文件。< / p>

在Epoch诞生了核心。它是最终的君主,其唯一目的是允许或拒绝访问神圣数据。啊!杀死所有驱逐他的人(如果你做*(int*)0 = 0),由于违反了地址空间法,你将获得死刑:Shall not you read, write, or otherwise access any address outside your address space)。

现在,因为所有都是文件,设备是文件,不是吗?它没有坏处(除了向大家展示块设备是羞耻的事实是一个愚蠢的想法)。而且,由于网络资源是某种东西,它们是文件,不是吗?

现在,至尊君主如何处理这个问题?首先,对于普通文件,一切都按预期工作。文件系统驱动程序从大容量存储设备驱动程序获取块,然后读取超级块,等等,等等......

但是,所有其他人会发生什么?我通常将它们视为&#34;陷阱&#34;文件。每当您读取或写入它们时,内核都会检测到这种特殊情况,并调用适当的回退函数来模拟&#34;模拟&#34;从常规文件读取和写入的效果。例如,对于/dev/null(地狱),所有读取都将返回End-of-File,并且所有写入都将被丢弃。在引用设备的文件的情况下,调用不直接到设备,而是到设备驱动程序,即负责处理特定硬件的内核的一部分。因此,没有&#34;文件到设备&#34;,但是&#34;文件到设备驱动程序,带有一些额外的信息来区分各个设备&#34;。

这允许特殊文件,例如/dev/random/dev/zero ...通过相同的界面存在。虽然他们没有&#34;文件到设备/设备驱动程序&#34;,但用户(几乎)无法区分它们,所以谁在乎呢?

  

这也意味着如果用户不需要与&gt;进行通信。真实的设备,我们不需要设备文件吗?

如果他能听到那话,那么

Ken会转入他的坟墓......这些抽象允许在设备驱动程序和实用程序(例如用于格式化USB驱动器的程序)之类的内容中实现用户空间(尽管具有root权限,无论如何)。从内核的角度来看,没有&#34;用户&#34;正如您所想,但是某些群组中的流程(称为&#34;用户&#34;)由其&#34;用户ID&#34;标识。

  

此外,他们倾向于将每个真实设备建模为字符或块或网络设备。这是真的吗?

虽然在实践中它是正确的,但设备驱动程序没有义务通过特殊文件导出其相应的设备。

我希望这能为你带来一些启示!

答案 1 :(得分:0)

除了实际设备外,还存在/dev/random/dev/null以及/dev/stdin等特殊文件,与硬件设备不对应。

声明

  

他们倾向于将每个真实设备建模为字符或块或网络设备

是正确的,因为他们倾向于这样做,但请注意有例外(“大多数设备是块或字符设备;但是存在其他类型的设备并且可以创建”):http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/dev.html