我们正在小型嵌入式设备上进行开发。该设备是一个运行 OpenEmbedded linux 的 gunstix overo 板。我们的开发几乎已经完成,并且遇到了我们无法弄清楚的最奇怪的错误。
我们有一个 USB 设备(分光光度计),它有一个 USB2.0 连接和一个用于光源的外部电源。典型的行为是插入电源,然后通过 USB 连接到主机。当设备检测到 USB 连接时,设备启动并启用光源和风扇。然后该设备可以被主机系统使用。
问题是,如果在我们打开 Gumstix 之前将设备插入 Gumstix,USB 设备显然没有被系统探测到(因此不会打开)。在正常情况下,当通过插入 USB 电缆初始化连接时,光谱会自行打开并可供系统使用(这通常可以通过“lsusb”看到)。这些事情都没有发生。没有通过“lsusb”检测到设备,也没有我们可以看到的任何类型的 dmesg 错误。 就好像设备没有插入一样。
如果我们拔下 USB 电缆并在系统启动后将其重新插入,该设备确实会显示并正常工作。它打开并显示在 USB 总线上,我们可以通过我们的驱动程序访问它。
在任何其他台式机或笔记本电脑上,当我们插入光谱仪时,主机系统是打开还是关闭都没有关系。这种行为是我认为是“正常的”——USB 系统在启动时被探测和初始化,并且 USB 设备上线。换句话说,只要我们在系统启动后插入 USB 设备,我们的系统就可以正常运行。不幸的是,这在我们的最终产品中是不可能的——一切都是同时发生的。
附加信息:1) 我们尝试在系统关闭时将闪存驱动器连接到系统。正如预期的那样,启动系统会使闪存驱动器联机 2) 没有关于光谱或 USB 设备的消息(使用 dmesg)。“lsusb”仅列出 USB 集线器/控制器。从字面上看,就好像设备不存在且未插入。 3) 我们尝试了来自gumstix 的全新图像和去年的旧图像。两张图都有这个问题。我们使用的所有 3 种 gunstix 设备都存在此问题。
有没有人有什么建议?据我所知,完全模拟 USB 设备的“拔出”和“重新插入”是不可能完全“重新启动”USB 系统的。我觉得正在发生的事情是 USB 总线上没有初始探测会触发 USB 握手,但这在某种程度上特定于光谱。这似乎是内核问题,或者至少是内核如何初始化 USB 子系统的问题。我不太确定。
我已经尝试过gumstix 邮件列表,但之前似乎没有人见过这个问题。关于从哪里开始寻找的任何建议或建议都会很棒。
谢谢!布莱恩
output etc.
$ uname -a
Linux overo 2.6.33 #1 Tue …Run Code Online (Sandbox Code Playgroud)