我最近一直在研究linux驱动程序,正如我读到的那些文章所说的,设备驱动模块可能会根据内核的需求自动加载,因此我想知道内核是如何为特定设备(声卡、I2C/spi设备等)确定加载哪个模块的,我也无法完全想象内核是如何在启动时检测每个硬件设备的。
更喜欢与嵌入式linux相关的答案,也欢迎PC linux!
第三季度
发布于 2011-10-04 13:45:41
我认为您混合了两种不同的东西,即硬件检测和按需加载模块。
在某些情况下,内核可以解释地执行模块请求。然而,在大多数情况下,内核本身并不做任何“按需加载”。
但是等等,你一定弄错了,如果我插上我闪亮的新摄像头,这个模块不是自动加载的吗?
是的,但不是靠内核。内核所做的就是用所谓的“热插拔事件”或"uevent“作为参数来调用userspace程序。在Linux上,这个用户空间程序通常是udev,但是在嵌入式系统上,您可以使用例如mdev。您可以找到更详细的解释-- here和here
关于您问题的第二部分,内核只在硬件可发现的情况下才进行硬件发现。可发现硬件的例子是USB和PCI。不可发现的哈雷总线的例子是SPI或I2C。
在后一种情况下,给定总线上某个特定设备的存在要么直接在内核中编码,要么由booloader给他。谷歌的“设备树”就是后者的一个例子。
总而言之:硬件检测由内核完成,模块加载由用户空间完成,并由内核提供信息。
https://stackoverflow.com/questions/7648469
复制相似问题