Вопрос или проблема
Я пытаюсь использовать USB-кабель от Raspberry (в режиме периферии, серийный CDC ACM) к ПК для доступа к серийной консоли GRUB2 (на ПК).
Мне удалось это сделать с адаптером pl2303 usb ttl, модуль usbserial_pl2303 в grub работает нормально.
Но что я хочу, так это использовать непосредственно USB-кабель в том, что называется “usb gadget”. Я правильно настроил Raspberry для работы как периферийное устройство, как с модулем g_serial, так и с модулем libcomposite. После запуска ПК он видит Raspberry как “CDC Abstract Control Model”, и я могу использовать “серийное” соединение на /dev/ttyACM0. Это работает как с g_serial, так и с libcomposite. Но только ПОСЛЕ запуска ПК.
Это не работает в GRUB.
Я попытался включить все 3 модуля usbserial для grub (usbserial_pl2303, usbserial_ftdi, usbserial_usbdebug), но terminfo и terminal_output не показывают никаких новых терминалов. Команда grub “usb” показывает подключенное usb “устройство” (например, Raspberry) как “CDC Abstract Control Model”, но очевидно, что он не может использовать его как серийный терминал.
Снова, если я подключаю usb адаптер pl2303 к ПК, grub видит его, и я могу подключиться к серийной консоли grub.
Так что мой вопрос: как я могу убедить GRUB2 видеть “серийный” порт CDC ACM и использовать его как терминал?
Ответ или решение
Настройка последовательного терминала GRUB2 через USB ACM является весьма специфической задачей и может представлять определенные сложности. Важно понимать, как GRUB2 взаимодействует с USB-устройствами и какие дополнительные настройки может потребоваться выполнить для успешного подключения.
Теория
GRUB2 может работать с последовательными портами, однако его поддержка USB менее гибка по сравнению с поддержкой аппаратных UART интерфейсов. В случае использования CDC ACM (англ. Communication Device Class Abstract Control Model), основная задача — заставить GRUB2 распознать это USB устройство как последовательный порт. CDC ACM является стандартом USB, позволяющим устройствам эмулировать последовательный порт, однако GRUB2, видимо, не имеет встроенной поддержки для работы с такими типами устройств. На уровне операционной системы, драйверы ядра Linux, такие как usb_cdc_acm
, позволяют работать с такими устройствами через /dev/ttyACM*
интерфейсы. Однако, в GRUB2 задействовать такие устройства может быть проблематично из-за отсутствия поддержки специфических драйверов USB ACM.
Пример
Ваш опыт с использованием адаптера PL2303 продемонстрировал, что при наличии соответствующего модуля, GRUB2 может успешно работать с последовательными устройствами, представленными по USB. Однако это возможно благодаря непосредственной поддержке PL2303 в виде модуля usbserial_pl2303
, который GRUB2 может распознать и использовать.
Применение
Чтобы установить соединение через CDC ACM с использованием Raspberry Pi в режиме USB Gadget, необходимо предпринять некоторые шаги:
-
Проверка конфигурации Raspberry Pi:
- Убедитесь, что Raspberry Pi правильно настроен для работы в режиме периферийного устройства, используя модули
g_serial
илиlibcomposite
. - Обеспечьте корректное распознавание Raspberry в системе как устройство CDC ACM, что уже выполнено успешно после запуска операционной системы.
- Убедитесь, что Raspberry Pi правильно настроен для работы в режиме периферийного устройства, используя модули
-
Оценка возможностей GRUB2:
- На текущий момент GRUB2 может быть несовместимым напрямую с устройствами типа CDC ACM из-за отсутствия соответствующих модулей. Это значит, что необходимо либо модифицировать загрузочное окружение GRUB2, либо попытаться внедрить поддержку таких устройств на уровне его исходных кодов, что может быть непрактичным для конечного пользователя.
- Проверка выходных данных команды
usb
в GRUB2 подтверждает, что устройство обнаружено, но отсутствует соответствующая поддержка.
-
Пути обхода:
- Использование существующих USB-тех интерфейсов: Если непосредственная поддержка невозможна, подумайте о возможности использования совместимых отличных USB-серийных адаптеров, таких как PL2303, который вы ранее упоминали.
- Обновление GRUB2: Проверьте наличие обновлений для GRUB2 или его модулей, возможно, в будущих релизах появится поддержка USB CDC ACM или возможность разгрузки дополнительных модулей из системы.
- Пересборка GRUB2 с поддержкой дополнительных модулей: Если требуется критически, можно попытаться разработать пользовательский модуль для GRUB2, поддерживающий CDC ACM, однако это требует значительных знаний в области программирования на C и работы с низкоуровневыми API.
В текущих реалиях, обеспечение совместимости CDC ACM устройств с GRUB2 может требовать использования обходных решений или решений со стороны ядра операционной системы. Рассмотрите возможность взаимодействия с сообществом разработчиков GRUB2 для уточнения текущего состояния поддержки таких устройств и возможно внесения предложений по доработке кода. Это может стать полезным не только для вашего проекта, но и для более широкой аудитории, сталкивающейся с подобной необходимостью.