【问题标题】:difference between device file and device driver设备文件和设备驱动程序的区别
【发布时间】:2014-08-21 11:16:33
【问题描述】:

我目前正在阅读 Linux 模块编程指南,我偶然发现了两个混淆了一点的术语 - 设备文件和设备驱动程序。在查看这些术语后,我遇到了以下内容 -

设备驱动程序是运行或控制特定类型设备的软件。

设备文件是设备驱动程序的接口,它出现在文件系统中,就好像它是一个普通文件一样。在类 Unix 操作系统中,这些通常位于 /dev 目录下,也称为设备节点。

我想知道的是-

1) 设备文件是用户空间程序和设备驱动程序之间的接口吗? 2) 程序是否通过相应的设备专用文件访问内核中的驱动程序?

例如,当使用 spidev char dev 文件时,是否允许我的用户空间程序使用简单的读取、写入和 ioctl 调用与 spi.c 和 omap2_mcspi.c 等进行交互?

【问题讨论】:

    标签: linux linux-device-driver


    【解决方案1】:

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

    程序、服务、文本、图像等都是文件。根据系统,输入和输出设备,通常是所有设备,都被视为文件。

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

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

    所以用户会调用write等文件操作,然后内核会使用设备驱动来执行操作。

    【讨论】:

      【解决方案2】:

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

      那是read(), write(), ioctl()...

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

      spi.c

      中定义了一个完整的Linux SPI层

      代表真正硬件 SPI 控制器的设备驱动程序是实现回调(钩子)并将其作为spi_master (spi_controller)structure 的一部分注册到内核的地方。 下面是 SPI 消息传输的回调初始化:

      master->transfer_one_message = atmel_spi_transfer_one_message;
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 谁能解释一下这个答案有什么问题?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-14
        • 2013-05-31
        • 2011-02-26
        • 2016-04-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多