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



我最近一直在学习linux驱动程序,正如我读到的那些文章所说,设备驱动程序模块可能会根据内核的需求自动加载,因此我想知道内核如何确定为特定设备(声卡,I2C/spi设备等)加载哪个模块的方法,我也无法完全想象内核如何在引导时检测每个硬件设备。

与嵌入式linux相关的答案优先,PC linux也欢迎!

3 q

我认为你把两件不同的事情混在一起了,这是硬件检测,和按需模块加载。

在某些情况下,内核显式地执行模块请求。然而,在大多数情况下,内核本身并不做任何"按需加载"。

等等,你一定是搞错了,如果我插上我闪亮的新摄像头,不是吗模块自动加载?

是的,但不是内核。内核所做的就是用所谓的"热插拔事件"或"uevent"作为参数调用用户空间程序。在Linux PC上,这个用户空间程序通常是udev,但在嵌入式系统上,您可以使用例如mdev。你可以在这里和这里找到更详细的解释

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

在后一种情况下,在给定总线上存在的特定设备要么直接在内核中编码,要么由booloader提供给他。谷歌"设备树"是后者的一个例子。

总而言之:硬件检测由内核完成,模块加载由用户空间完成,内核提供信息

最新更新