【发布时间】:2012-11-03 18:39:39
【问题描述】:
第 1 部分:
致 linux/unix 专家,请您帮助我了解设备驱动程序。据我了解,驱动程序是一段代码,它直接与硬件交互并公开一些 api 来访问设备。我的问题是这段代码在哪里运行,用户空间还是内核空间?
我知道在内核空间中执行的代码有一些额外的权限,比如访问任何内存位置(如果我错了,请纠正)。如果我们安装一个第三方驱动,如果它在内核空间运行,这对整个系统不会有害吗?任何操作系统如何处理这个问题?
第 2 部分:
让我们以 USB 设备(相机、键盘..)为例,系统如何识别这些设备?系统如何知道要安装哪个驱动程序?驱动如何知道读写数据的设备地址?
(如果这里太大而无法回答,请提供一些好的文档或教程的链接..,我已经尝试过但无法找到这些答案。请帮助)
【问题讨论】:
-
你应该把这个问题分成两个独立的问题。
-
在我过去开发 Linux 设备驱动程序的日子里,设备驱动程序在内核中编译并执行 100% 的内核空间。如今,内核似乎保护自己免受有缺陷的设备驱动程序甚至中断它们。但如果是关于学术考试的问题,我会以“内核空间”作为答案。
-
关于USB设备检测,VID和PID用于识别设备。
-
感谢 cmets。这不是学术考试问题..:)。我只是想了解这是如何工作的。如果可能的话,请您详细说明您的答案并提供一些链接。
标签: linux-kernel operating-system device-driver