Существует множество терминальных программ для доступа к последовательной консоли, таких как minicom или screen to Putty. Но Вилли Тарро не очень понравились эти инструменты, поэтому он решил написать свой собственный: Bootterm.
Мне ужасно надоело текущее состояние последовательных терминалов, которые либо плохо справляются с ошибками, либо запускаются долго, из-за чего вы теряете первые символы, либо не поддерживают нестандартные скорости и т. д. Наконец я написал свою собственную программу, чтобы решить все это сразу, плюс поддержка автоматического определения порта (последний зарегистрированный по умолчанию является хорошим), ожидание готовности порта, а также поддержка фиксированных или синхронизированных захватов. А несколько переменных среды позволяют вообще не вводить аргумент, но при этом имеют ожидаемое поведение. Если вас это интересует, вы можете проверить это здесь:
https://github.com/wtarreau/bootterm
Программа еще молодая (нет поддержки автоматического переключения скорости и макросов), но довольно удобная, и я уже перешел на нее.
Так случилось, что у нас есть Комплект BBC Doctor Who “HiFive Inventor” , поэтому мы попробовали его в Ubuntu 20.04:
git clone https://github.com/wtarreau/bootterm cd bootterm make sudo make install
Обычно мы проверяем последовательный интерфейс, запустив dmesg сразу после подключения устройства:
[671497.372868] usb 1-1: new full-speed USB device number 69 using xhci_hcd [671497.547016] usb 1-1: New USB device found, idVendor=1366, idProduct=1061, bcdDevice= 1.00 [671497.547022] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [671497.547026] usb 1-1: Product: HiFive [671497.547029] usb 1-1: Manufacturer: SEGGER [671497.547031] usb 1-1: SerialNumber: 000979421764 [671497.578086] cdc_acm 1-1:1.0: ttyACM0: USB ACM device [671497.587098] cdc_acm 1-1:1.2: ttyACM1: USB ACM device [671497.599064] usb-storage 1-1:1.5: USB Mass Storage device detected [671497.599272] scsi host2: usb-storage 1-1:1.5 [671498.631385] scsi 2:0:0:0: Direct-Access SEGGER MSD Volume 1.00 PQ: 0 ANSI: 4 [671498.631728] sd 2:0:0:0: Attached scsi generic sg2 type 0 [671498.632163] sd 2:0:0:0: [sdc] 21829 512-byte logical blocks: (11.2 MB/10.7 MiB) [671498.633051] sd 2:0:0:0: [sdc] Write Protect is off [671498.633054] sd 2:0:0:0: [sdc] Mode Sense: 0b 00 00 08
Bootterm позволяет вам перечислить все последовательные устройства, подключенные к вашему хосту:
bt -l port | age (sec) | device | driver | model ------+------------+------------+------------------+---------------------- 0 | 0 | ttyACM0 | cdc_acm | CDC * 1 | 0 | ttyACM1 | cdc_acm | CDC
Значок * в списке означает, что это последнее подключенное USB-устройство, что в большинстве случаев означает последовательную консоль, к которой вы хотите получить доступ. Он будет выбран по умолчанию, если вы не введете устройство в командной строке. Это означает, что вам не нужно даже проверять использование устройства, просто запустите bt, чтобы подключиться к плате:
sudo bt No port specified, using ttyACM1 (last registered). Use -l to list ports. Trying port ttyACM1... Connected to ttyACM1 at 115200 bps. Escape character is 'Ctrl-]'. Use escape followed by '?' for help. at_setupCmdADC[151]: argc 2 eFuse Two Point: NOT supported eFuse Vref: Supported Characterized using eFuse Vref at_setupCmdA
Круто! Просто работает из коробки! Нет необходимости проверять устройство или скорость передачи данных.
Вероятно, вы захотите проверить вывод загрузчика, как только вы подключите устройство. Если вы используете отладочную плату USB в TTL, это нормально, но если вы используете одну из этих плат со встроенным последовательным интерфейсом, такую как плата HiFive, которую мы используем сейчас, это обычно включает в себя подключение платы к плате USB, узнав имя устройства, подключитесь к последовательному порту, а затем перезагрузите плату. Но с bootterm вы можете просто использовать параметр n, который означает «New»:
sudo bt -n
Программа будет ждать нового USB-устройства, а затем автоматически подключится к последовательной консоли. Давайте попробуем это с помощью платы HiFive Inventor.
0 ports found, waiting for a new one... port | age (sec) | device | driver | model ------+------------+------------+------------------+---------------------- 1 | 0 | ttyACM1 | cdc_acm | CDC Trying port ttyACM1... Connected to ttyACM1 at 115200 bps. Escape character is 'Ctrl-]'. Use escape followed by '?' for help. I (14) boot: ESP-IDF v3.3 2nd stage bootloader I (14) boot: compile time 15:55:21 I (14) boot: Enabling RNG early entropy source... D (17) boot: magic e9 D (20) boot: segments 04 D (22) boot: spi_mode 02 D (25) boot: spi_speed 00 D (27) boot: spi_size 02 I (30) boot: SPI Speed : 40MHz I (34) boot: SPI Mode : DIO I (38) boot: SPI Flash Size : 4MB D (42) bootloader_flash: mmu set paddr=00000000 count=1 size=c00 src_addr=8000 src_addr_aligned=0 D (51) boot: mapped partition table 0x8000 at 0x3f408000 D (57) flash_parts: partition table verified, 6 entries I (62) boot: Partition Table: I (66) boot: ## Label Usage Type ST Offset Length D (73) boot: load partition table entry 0x3f408000 D (78) boot: type=1 subtype=1 I (81) boot: 0 phy_init RF data 01 01 0000f000 00001000 D (88) boot: load partition table entry 0x3f408020 D (93) boot: type=1 subtype=0 I (96) boot: 1 otadata OTA data 01 00 00010000 00002000 D (104) boot: load partition table entry 0x3f408040 D (108) boot: type=1 subtype=2 I (112) boot: 2 nvs WiFi data 01 02 00012000 0000e000 D (119) boot: load partition table entry 0x3f408060 D (124) boot: type=40 subtype=0 ....
Он автоматически подключается к последовательной консоли от модуля ESP32 на нашей плате. Довольно аккуратно. Но есть также последовательная консоль для микроконтроллера SiFive Freedom E310, к которой мы можем получить доступ, указав устройство:
sudo bt /dev/ttyACM0 Trying port /dev/ttyACM0... Connected to /dev/ttyACM0 at 115200 bps. Escape character is 'Ctrl-]'. Use escape followed by '?' for help. Hardware: HiFive Inventor Board Bootloader Version: 2.40 09/10/2020 12:17:19 Mfg. Test Version: 1.81 09/10/2020 12:17:19 Mfg
Если мы нажмем кнопку сброса и плату, мы можем получить журнал загрузки с RISC-V MCU:
Bootloader version: 2.40 09/10/2020 12:17:19 Sleep BK1 0x00000000 BK15 0xbed0bed0 After BK1 0x00000000 BK15 0xbed0bed0 PMU IE 0x0000000b CAUSE 0x00000101 BK1 0x00000000 BK15 0xbed0bed0 Hardware: HiFive Inventor Board Bootloader Version: 2.40 09/10/2020 12:17:19 Mfg. Test Version: 1.81 09/10/2020 12:17:19 Mfg. Location: SX Board Assembly: HFB05 Board Version: 5 Board Revision: A Serial Number: 001331 Date Code (WW/YY): 32/20 WiFi MAC: 24:6F:28:6C:D0:44 BLE MAC: 24:6F:28:6C:D0:46 Board Status: PASS Checksum: 5581 Hardware - Default BLE serial Boot - Tynker VM Version: 1.4 Boot - Default Name: HiFive Boot - Default Passcode: 0x30303030 Boot - Allocated 49168 bytes of memory **** Tynker VM is ready ****
Его намного проще использовать по сравнению с minicom, где нам пришлось войти в режим настройки, ввести последовательную плату, выбрать скорость передачи и отключить аппаратное управление потоком перед доступом к последовательной консоли. Не будем забывать, как легко забыть и команду выхода из программы. Но подождите … как нам выйти из bootterm? Нам сообщают о команде каждый раз, когда мы запускаем программу:
Escape character is 'Ctrl-]'. Use escape followed by '?' for help.
Так что получить доступ к справке не так уж сложно:
BootTerm supports several single-character commands after the escape character: H h ? display this help Q q . quit P p show port status D d flip DTR pin R r flip RTS pin F f flip both DTR and RTS pins B b send break C c enable / disable capture Enter the escape character again after this menu to use these commands.

Будем надеяться, что использование правой квадратной скобки ‘]’ не вызовет проблем с некоторыми раскладками клавиатуры. Но Вилли, должно быть, уже подумал об этой потенциальной проблеме и предоставил способ изменить escape-символ …
Вы можете настроить escape-символ с помощью команды bt -exx с параметрами, перечисленными в таблице справа.
По умолчанию программа будет использовать скорость передачи 115 200 бит/с, но вы можете изменить ее:
bt -b 74880
Bootterm также может использоваться в качестве детектора последовательного порта в сочетании с другими сценариями, поскольку следующая командная строка сообщает о последнем подключенном USB-устройстве без каких-либо посторонних строк:
bt -npq ttyUSB2
Программа Bootterm C все еще находится в разработке, и Вилли планирует реализовать автоматическое переключение скорости и макросы. Он предлагает всем попробовать и сообщить о проблемах на Github.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.