当同一硬件存在多个驱动程序时,如何选择一个版本的驱动程序在启动时加载?
How to choose one version of the drivers to be loaded on boot when multiple drivers for the same hardware exist?
我正在使用嵌入式 linux。
有两个 USB 小工具驱动程序构建为 LKM, g_ether.ko and g_file_storage.ko。
我做了 depmod
然后在 modprobe -l
两个驱动程序都出现在列表中。
kernel/drivers/usb/gadget/g_ether.ko
kernel/drivers/usb/gadget/g_file_storage.ko
问题是,内核不会在系统启动时加载它们中的任何一个。
目前我的解决方案是将引导脚本添加到 /etc/init.d
etc/rcX.d
以强制 g_ether.ko
作为默认驱动程序在引导时加载。
是否有其他(更好的)方法来制作 g_ether.ko
默认驱动程序?
一个可能的解决方案是,我将g_ether.ko
设为静态驱动,将g_file_storage.ko
设为LKM,但我不知道如何关闭静态驱动以释放硬件,以便可以加载另一个 LKM 驱动程序。
有什么建议吗?
将USB外设控制器用作以太网或存储是用户的选择。所以没有自动加载客户端驱动程序的相关硬件事件。
但是有一种方法可以通过 sysfs 在用户 space 中 bind/unbind 驱动程序。看这个: https://lwn.net/Articles/143397/
我正在使用嵌入式 linux。
有两个 USB 小工具驱动程序构建为 LKM, g_ether.ko and g_file_storage.ko。
我做了 depmod
然后在 modprobe -l
两个驱动程序都出现在列表中。
kernel/drivers/usb/gadget/g_ether.ko
kernel/drivers/usb/gadget/g_file_storage.ko
问题是,内核不会在系统启动时加载它们中的任何一个。
目前我的解决方案是将引导脚本添加到 /etc/init.d
etc/rcX.d
以强制 g_ether.ko
作为默认驱动程序在引导时加载。
是否有其他(更好的)方法来制作 g_ether.ko
默认驱动程序?
一个可能的解决方案是,我将g_ether.ko
设为静态驱动,将g_file_storage.ko
设为LKM,但我不知道如何关闭静态驱动以释放硬件,以便可以加载另一个 LKM 驱动程序。
有什么建议吗?
将USB外设控制器用作以太网或存储是用户的选择。所以没有自动加载客户端驱动程序的相关硬件事件。
但是有一种方法可以通过 sysfs 在用户 space 中 bind/unbind 驱动程序。看这个: https://lwn.net/Articles/143397/