我正在通过 USB 将 Gemalto (Cinterion) 调制解调器连接到运行 BusyBox 和 mdev 的嵌入式 Linux (2.6.31)。
调制解调器创建 ttyACM [0-6],其中“0”用于 pppd。我时不时地(1小时,1天......)得到dis和re-connections。整个系统更加复杂——另一个嵌入式设备通过 RS232 接口连接到调制解调器,bla-bla-bla。
我的问题:
当发生断开连接和重新连接时,pppd 不够快而无法终止并释放 ttyACM0,因此会创建 ttyACM [1-7]。下次可能是 [0, 2-7] 或 [3-8],没有具体的算法。
我尝试更新一个 simlink(到 /dev/ttyMyModem),但同样的“没有具体算法”问题......所有接口都是相同的 - CDC-ACM(不是吗???)。
我目前的做法:
一个包装 pppd 的 bash 脚本,带有无限循环,等待 pppd 的退出(它停留在前台,在我的选项文件中为“nodetach”)。当 pppd 死机时,我删除驱动程序 (modprobe -r cdc_acm),删除所有节点 (rm /dev/ttyACM*),重新安装驱动程序 (modprobe cdc_acm) 并运行 pppd。我在需要的内容之间延迟了 1-2 秒。
该解决方案需要 2-4 次迭代才能重新连接(不知道为什么它在第一次不起作用),但看起来很稳定。
我的问题:
- 我在发明轮子吗?
- 这个解决方案稳定吗?适合生产吗?
- 我是否在 Google 搜索中漏掉了一个“流行词”?
请不要对我苛刻...