我最近一直在学习Linux驱动程序,根据我所读的文章,设备驱动程序模块很可能会被内核按需自动加载,因此我想知道内核是如何确定为特定设备(声卡、I2C/spi设备等)加载哪个模块的配方,我也无法完全想象内核如何在启动时检测每个硬件设备。欢迎提供与嵌入式Linux相关的答案,也欢迎提供PC Linux相关的答案!谢谢!
我认为你混淆了两个不同的概念,即硬件检测和按需模块加载。
在某些情况下,内核会明确地进行模块请求。但是,在大多数情况下,内核本身不会进行任何“按需加载”。
但是等等,你一定弄错了,如果我插入我的新闪亮的网络摄像头,模块难道不会自动加载吗?
是的,但并非由内核完成。内核所做的只是使用所谓的“热插拔事件”或“uevent”作为参数调用用户空间程序。在Linux PC上,这个用户空间程序通常是udev,但在嵌入式系统上,您可以使用例如mdev。您可以在这里和这里找到更详细的解释。