linux新手对嵌入式linux设备驱动程序的质疑

linux新手对嵌入式linux设备驱动程序的质疑,linux,linux-kernel,Linux,Linux Kernel,我最近一直在学习linux驱动程序, 正如我读到的那些文章所说,设备驱动程序模块可能会根据内核的需求自动加载,因此我想知道内核是如何为特定设备(声卡、I2C/spi设备等)确定要加载哪个模块的,我也无法完全想象内核在启动时如何检测每个硬件设备 最好回答与嵌入式linux相关的问题,也欢迎使用PC linux 3Q我认为您混合了两种不同的东西,即硬件检测和按需模块加载 在某些情况下,内核明确地执行模块请求。然而,在大多数情况下,内核本身不执行任何“按需加载” 但是等等,你们一定搞错了,如果我插上我

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

最好回答与嵌入式linux相关的问题,也欢迎使用PC linux


3Q

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

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

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

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

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

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


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

详细解释,但是有这么多可加载的模块,linux如何选择合适的模块,我想知道linux如何与嵌入式硬件一起工作的更多细节,您能否提供更多相关文章/文档/书籍,请参见uevent信息中有关特定设备的信息。从那里,根据在哪个总线上发现设备,在用户空间表中查找设备。从那里,选择并加载相应的模块(同样,在用户空间中)。