设备文件和设备驱动程序之间的区别

8
我目前正在阅读《Linux模块编程指南》,遇到了两个有点困惑的术语——设备文件和设备驱动。在查找这些术语时,我发现以下内容:
设备驱动是一种控制特定类型设备的软件。
设备文件是设备驱动的接口,它作为一个普通文件出现在文件系统中。在类Unix操作系统中,这些文件通常位于/dev目录下,也称为设备节点。
我想知道的是:
1)设备文件是否是用户空间程序和设备驱动之间的接口?
2)程序是否通过相应的设备特殊文件访问内核中的驱动程序?
例如,在使用spidev字符设备文件时,我的用户空间程序是否可以通过简单的读取、写入和ioctl调用与spi.c和omap2_mcspi.c等进行交互?

嗨@Siddharth,我不明白你的第二个问题,那里的“program”也指的是“用户空间程序”吗? 你说的“设备特殊文件”是什么意思? - undefined
《Linux内核模块编程指南》(The Linux Kernel Module Programming Guide)?请适当引用和归属 - 我没有立即找到引用的部分。 - undefined
3个回答

8

Unix中的主要抽象概念之一是文件(source):

程序、服务、文本、图像等都是文件。输入输出设备以及通常所有设备都被视为文件。

这使得用户可以使用一组统一的操作来处理各种实体,即使实现这些操作的方式可能大相径庭。

正如您在问题中提到的那样,设备文件是抽象的用户界面。这是用户看到的东西;他们可以写入、读取、打开、关闭等的文件。设备驱动程序是这些操作的实现。

因此,用户将调用文件操作,例如写入,然后内核将使用设备驱动程序来执行操作。


0

设备文件,如/dev/spidevX.Y是SPI设备的软件抽象,它使用系统调用(在Linux驱动程序世界中称为“文件操作”)向用户空间公开Linux低级别SPI API:

read(),write(),ioctl()...

spidev.c是一种特殊类型的驱动程序,为通用SPI客户端(芯片)设备注册,并其主要目标是将内核低级别SPI API导出到用户空间。

spi.c中定义了整个Linux SPI层。

表示实际HW SPI控制器的设备驱动程序是实现并注册到内核作为spi_master (spi_controller)结构的回调(钩子)部分。这里是SPI消息传输的回调初始化:

master->transfer_one_message = atmel_spi_transfer_one_message;

-2

Linux 中的一切都是文件。 设备驱动程序是操作系统用来与设备通信的软件。 设备驱动程序利用设备文件。


有人能解释一下这个答案哪里出了问题吗? - Ryan Lyu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接