Я подключаю модем Gemalto (Cinterion) через USB к своему встроенному Linux (2.6.31), работающему с BusyBox и mdev.
Модем создает ttyACM [0-6], где '0' используется для pppd. Время от времени я получаю отказы и повторные подключения (1 час, 1 день...). Вся система сложнее - к модему по интерфейсу RS232 подключается другое встроенное устройство, бла-бла-бла.
Моя проблема:
Когда происходит отключение и повторное подключение, pppd не успевает завершить работу и освободить ttyACM0, поэтому создаются ttyACM [1-7]. В следующий раз это может быть [0, 2-7] или [3-8], без конкретного алгоритма.
Я пытался обновить симлинк (на /dev/ttyMyModem), но та же самая проблема "нет конкретного алгоритма"... все интерфейсы одинаковые - CDC-ACM (не так ли???) .
Мой текущий подход:
Сценарий bash, обертывающий pppd, с бесконечным циклом, ожидающим выхода из pppd (который остается на переднем плане, «nodetach» в моем файле параметров). Когда pppd умирает, я удаляю драйвер (modprobe -r cdc_acm), удаляю все узлы (rm /dev/ttyACM*), переустанавливаю драйвер (modprobe cdc_acm) и запускаю pppd. Я ставлю 1-2 секунды задержки между тем, что нужно.
Это решение требует 2-4 итераций для повторного подключения (не знаю, почему оно не работает на первом), но кажется стабильным.
Мой вопрос:
- Я изобретаю колесо?
- Является ли это решение стабильным? Подходит для производства?
- Я пропустил «модное слово» при поиске в Google?
Пожалуйста, не будь суров со мной...