我目前正在阅读Linux模块编程指南,我偶然发现了两个让人困惑的术语 - 设备文件和设备驱动程序。在调整这些术语时,我遇到了以下内容 -
设备驱动程序是一种操作或控制特定类型设备的软件。
设备文件是设备驱动程序的接口,它出现在文件系统中,就像它是普通文件一样。在类Unix操作系统中,这些通常位于/ dev目录下,也称为设备节点。
我想知道的是 -
1)设备文件是用户空间程序和设备驱动程序之间的接口吗? 2)程序是否通过适当的设备专用文件访问内核中的驱动程序?
例如,当使用say spidev char dev文件时,是否允许我的用户空间程序使用简单的read,write和ioctl调用与spi.c和omap2_mcspi.c等进行交互?
答案 0 :(得分:6)
Unix中的一个主要抽象是文件(source):
程序,服务,文本,图像等都是文件。根据系统,输入和输出设备以及通常所有设备都被视为文件。
这使得用户可以使用统一的操作集处理各种实体,即使这些操作的实现可能会有很大的不同。
当您提出问题时,设备文件是面向抽象的用户。这是用户看到的;他们可以写入,读取,打开,关闭等文件。设备驱动程序是这些操作的实现。
因此用户将调用文件操作(如write),然后内核将使用设备驱动程序执行操作。
答案 1 :(得分:0)
像/dev/spidevX.Y这样的设备文件是SPI设备的SW抽象,它通过syscall(在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 :(得分:-1)
linux中的所有内容都是文件。 设备驱动程序是操作系统用于与设备通信的软件。 设备驱动程序使用设备文件。