linux新手关于嵌入式linux设备驱动程序的问题

时间:2011-10-04 13:13:55

标签: linux linux-kernel

我最近一直在研究linux驱动程序, 正如我读过的那些文章所说,设备驱动程序模块可能会被内核按需自动加载,因此我想知道内核如何确定为特定设备加载哪个模块(声卡,I2C / spi设备,等),我也无法想象内核在启动时如何检测每个硬件设备。

与嵌入式Linux相关的答案更受欢迎,PC linux也欢迎!

3Q

1 个答案:

答案 0 :(得分:8)

我认为你正在混合两种不同的东西,即硬件检测和按需模块加载。

在某些情况下,内核明确地执行模块请求。但是,在大多数情况下,内核本身不会执行任何“按需加载”。

但等等,你必须弄错,如果我插上我闪亮的新网络摄像头,不是 模块是否自动加载?

是的,但不是内核。所有内核都调用一个用户空间程序,所谓的“hotplug event”或“uevent”作为参数。在Linux PC上,此用户空间程序通常是udev,但在嵌入式系统上,您可以使用例如mdev。您可以找到更详细的解释herehere

关于问题的第二部分,只有硬件可被发现时,内核才会进行硬件发现。可发现硬件的示例是USB和PCI。不可发现的harwdare总线的示例是SPI或I2C。

在后一种情况下,给定总线上特定设备的存在要么直接在内核中编码,要么由booloader提供给他。 Google将“设备树”作为后者的一个例子。

总结一下:硬件检测由内核完成,模块加载由用户空间完成,内核提供信息。

相关问题