关于嵌入式Linux设备驱动的问题(Linux新手提问)

3
我最近一直在学习Linux驱动程序,根据我所读的文章,设备驱动程序模块很可能会被内核按需自动加载,因此我想知道内核是如何确定为特定设备(声卡、I2C/spi设备等)加载哪个模块的配方,我也无法完全想象内核如何在启动时检测每个硬件设备。欢迎提供与嵌入式Linux相关的答案,也欢迎提供PC Linux相关的答案!谢谢!
1个回答

9

我认为你混淆了两个不同的概念,即硬件检测和按需模块加载。

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

但是等等,你一定弄错了,如果我插入我的新闪亮的网络摄像头,模块难道不会自动加载吗?

是的,但并非由内核完成。内核所做的只是使用所谓的“热插拔事件”或“uevent”作为参数调用用户空间程序。在Linux PC上,这个用户空间程序通常是udev,但在嵌入式系统上,您可以使用例如mdev。您可以在这里这里找到更详细的解释。
关于您问题的第二部分,内核仅在硬件可发现时进行硬件发现。可发现硬件的例子包括USB和PCI。不可发现硬件总线的例子是SPI或I2C。
在后一种情况下,给定总线上特定设备的存在要么直接编码在内核中,要么由引导加载程序提供。搜索“设备树”以获取后一种情况的示例。
总之:硬件检测由内核完成,模块加载由用户空间完成,并由内核提供信息。

详细地解释了,但是有这么多可加载的模块,Linux如何选择合适的模块,我想更详细地了解Linux如何与嵌入式硬件配合工作,您能提供更多相关的文章/文档/书籍吗?谢谢:p - user718146
特定设备的信息在uevent信息中。从那里,根据设备发现的总线,查找用户空间表中的设备。然后,在用户空间中选择并加载适当的模块。 - Julie in Austin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接