【发布时间】:2016-02-12 20:03:30
【问题描述】:
我创建了一个简单的模块,用于控制 USB 在主机模式下是否为设备供电。加载后,此模块会切断任何已连接设备的电源,除非另有说明。
还希望在启动时,系统会同时加载我的模块,并切断 USB 电源。为此,到目前为止我已经尝试过:
- 将我的模块设置为内置内核:没有效果,稍后加载的模块超出了我的配置;
-
创建 init.d 脚本:创建脚本,并将其设置为在 rc5 上运行。也没有运气,我在使用 USB 设备时遇到了多个问题(例如
usb 2-1: device descriptor read/64, error -110);
我在自定义板上运行 Kernel 3.12,并且我已经测试过,如果我在登录后手动(通过 modprobe)将其加载到系统中,该模块会按预期工作。
理想情况下,我希望在启动期间完成这些配置,而不需要登录等。
所以,我的问题是:如何将模块加载推迟到最后一分钟,以确保任何其他配置都已完成?另外,udev 是解决这类事情的好方法吗?根据我的阅读,我觉得这不是最合适的......
问候,
吉尔赫姆
【问题讨论】:
-
您的模块似乎缺少声明正确的依赖关系。
-
我正在使用 sysv init。另外,我犯了一个小错误:我将它添加到 rc5,而不是 rc6。修复它=]
-
@GuilhermeCosta 查看 chkconfig 实用程序。您可以配置一系列 rcN 初始化脚本,以便在引导周期稍后加载/启动您的模块。请注意,您的脚本将类似于 /etc/rc5.d/S80mystart,它将是指向您的真实脚本所在位置的符号链接。 S80 表示开始,80 是迟到的数字。
-
@GuilhermeCosta 内核中还有一个模块延迟加载选项。它是在其他模块之后加载的模块列表。
-
@PeterL。我正是这样做的,这就是我遇到我提到的那些奇怪的错误的时候。幸运的是,我发现可以通过解除绑定我想先关闭电源的 USB 设备来避免它们(这很奇怪,好像我自己加载了模块,没有必要,但我相信它有事可做使用 udev)。
标签: linux linux-kernel linux-device-driver