深入理解 Linux 设备与设备驱动
1. 设备驱动基础
在计算机系统中,每个应用程序在某些时刻都会与设备进行通信。即便你有意避免,也很难不与系统中的一个或多个设备产生接触。例如,你编写了一个完全在内存中运行的复杂建模算法,但如果要保存结果,就需将数据存储到文件系统中。而且,由于系统负载,代码可能会被交换到磁盘上,向控制台输出信息可能还需要伪终端驱动。所以,无论如何,进程都会调用设备驱动。
Linux 设备驱动 API 可追溯到 UNIX 早期,此后基本保持不变。POSIX 标准对该接口进行了规范化,成为 Linux 的基础。许多设备的打开方式与磁盘上的文件类似,与这些设备驱动的通信始于打开其中一个文件。应用程序使用 open 系统调用返回的文件描述符,并使用所有以文件描述符为参数的系统调用。这实际上是一个采用函数式编程的面向对象模型,尽管它诞生于 20 世纪 70 年代,远早于面向对象编程流行之时。通常,设备通过其文件描述符(类似于对象)进行访问,并且有一组有限的系统调用可用于访问设备(类似于方法)。
设备驱动可能仅实现其所需的系统调用,因此在一个设备上有效的系统调用在另一个设备上可能无效。例如,一个驱动可能只实现 open 和 close 系统调用,但这样的驱动用处不大。当应用程序尝试使用驱动未实现的系统调用时,函数通常会返回错误指示,并根据具体的系统调用设置 errno 。
2. 设备驱动类型
设备驱动主要分为以下几类:
- 字符设备 :PC 上的串口或用于输入 s
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



