我很难找到解决这个问题的好方法。我有两个运行 Buildroot Linux 的 SBC,除了 USB ACM 卡外几乎完全相同,我试图在启动时检测它并根据 SBC 动态加载服务(例如,如果卡有脚本“touch sbc1”检测到或“触摸 sbc2”,如果不是,然后使用此文件为网络加载不同的配置)。
我正在使用静态开发表、Busybox init 和 3.12.20 内核(USB CDC 被编译为内置驱动程序;我禁用了模块)。这就是问题所在:我编写了一个脚本(S00setup,因此它是 rcS 中应该运行的第一个脚本;这个脚本必须在网络脚本之前运行)来检查这张卡的存在。似乎 CDC ACM 驱动程序加载在两个板上,无论它是否存在,因此检查不起作用(缓冲区总是说 usbcore:注册的新接口驱动程序 cdc_acm 后跟 cdc_acm:USB 调制解调器和 ISDN 适配器的 USB 抽象控制模型驱动程序) . 此外,我的 dmesg 输出会在大约 2 秒后从脚本中调用它,并且只有在那之后它才会实际将 /dev/ttyACM0 分配给设备。如何在处理此初始化文件之前强制内核完成引导,以便正确检测到它?在这里“睡觉”有用吗?如果不是,那又如何?Bash/Linux 是否有某种类型的 DoEvents()?使用 lsusb 检测卡的情况相同,因为在处理脚本之前设备不会显示,这对我来说没有意义。所以要问一个类似的问题,我想另一种方法是强制轮询 USB 设备;有没有办法做到这一点?我想另一种方法是强制轮询 USB 设备;有没有办法做到这一点?我想另一种方法是强制轮询 USB 设备;有没有办法做到这一点?
我在这里发布了这个问题而不是 Unix&Linux,因为这里的你们似乎对此更有经验,如果有任何快速程序我可以编写来强制内核完成处理。当它实际将设备分配给 ttys 和诸如此类的东西时,我只错过了额外的 1-2 秒的内核缓冲区。这是我需要区分两个板的输出。显然,我这样做的原因是因为我想在两个系统上使用相同的操作系统映像;出于配置管理的目的,这种方式要容易得多。