Что означает «консоль [ttyS0] включена»?

Я пытаюсь установить связь между одноплатным компьютером и ПК через COM-порты. На одноплатном компьютере я использую Debian Linux, и есть два UART, которые я могу использовать. На одном из UART (ttyS1) я могу общаться (отправлять и получать) без проблем. Когда я пытаюсь связаться с другим UART (ttyS0), отправка работает отлично, однако прием теряет 1-й байт (отправляет сообщение об ошибке на консоль ПК, говорящее что введенный символ не является командой), и тогда все будущие символы будут приниматься правильно.

Если я переключаюсь с приема на отправку, а затем обратно на получение, происходит то же самое. Если я остаюсь в режиме приема, я могу получать символы столько, сколько захочу, без потери данных. Похоже, что это происходит из-за перехода от отправки к получению.

Как я упоминал ранее, я не вижу этой проблемы на другом UART (ttyS1). Я начал искать причины, почему два порта разные. Я использовал одну и ту же программу для настройки отправки и получения для обоих UARTS, поэтому проблема не в настройке программы. Одна вещь, которую я обнаружил, когда я набрал команду dmesg |grep tty, я получаю следующее:

[    0.000000] Kernel command line: console=ttyS0,115200 root=/dev/mmcblk0p2 roo twait loglevel=8 panic=10
[    0.446780] sunxi-uart.1: ttyS0 at MMIO 0x1c28400 (irq = 2) is a U6_16550A
[    1.114996] console [ttyS0] enabled
[    1.154643] sunxi-uart.3: ttyS1 at MMIO 0x1c28c00 (irq = 4) is a U6_16550A

Я вижу, что ttyS0 имеет связанную с ним «консоль [ttyS0]», а ttyS1 — нет. Мне было интересно, что означает «консоль [ttyS0] включена»?

Кроме того, есть ли способ отключить его, чтобы увидеть, является ли это причиной моей «первой потери данных»? В моей настройке одноплатного компьютера я вижу, что ttyS0 обозначен как «порт отладки».

Мне также было интересно, является ли это аналогом консоли?

Может кто-нибудь объяснить, что означает включение консоли?


person mikenycz    schedule 09.05.2014    source источник
comment
Я предполагаю, что первый UART, вы имели в виду, что ttyS0 отлично работает при отправке и получении?   -  person Sunny Patel    schedule 10.05.2014
comment
На самом деле ttyS1 работает нормально, ttyS0 теряет первый байт.   -  person mikenycz    schedule 10.05.2014
comment
Оцените поправку.   -  person Sunny Patel    schedule 10.05.2014
comment
отправка работает отлично, однако при получении теряется 1-й байт -- это неоднозначно. Когда возникает проблема, какая сторона передает, а какая принимает? Похоже, что это происходит из-за перехода от отправки к получению. -- Нет режима Tx или Rx (он же полудуплекс). USART 16550A должен быть настроен на полнодуплексный режим и иметь возможность одновременной передачи и приема в любое время. Сообщение о включенной консоли не является причиной проблемы. Я использовал порты отладки в качестве консоли без каких-либо проблем. Какой эмулятор терминала используете?   -  person sawdust    schedule 10.05.2014
comment
однако при получении теряется 1-й байт -- похоже, это вывод с вашей стороны. Пожалуйста, предоставьте необработанные данные или доказательства, подтверждающие это (снимок экрана или программный код?)/   -  person sawdust    schedule 10.05.2014


Ответы (2)


Консоль — это tty, куда идут журналы ядра.

Конкретную выбираете через параметры ядра при загрузке, это видно в предоставленном вами логе, в строке "Командная строка ядра: console=ttyS0,115200 root=/dev/mmcblk0p2 roo twait loglevel= 8 паника = 10 дюймов

Вы можете выбрать другую консоль (если она доступна на вашей платформе), чтобы ttyS0 не получал никаких байтов при загрузке ядра.

person David Aparicio    schedule 22.01.2018

Я вижу, что с ttyS0 связана "консоль [ttyS0] включена", а с ttyS1 - нет. Мне интересно, что означает «консоль [ttyS0] включена»?

Я думаю, это из-за истории unix. Первоначально, как это хорошо объяснено в этом письме, два типа последовательных портов: /dev/tty* и /dev/cu*. Короче говоря, tty предназначены для входящих соединений через последовательный порт, а cu предназначены для исходящих соединений через последовательные порты. А на другом конце были unix-консоли, последовательные терминалы.

Поскольку ваш одноплатный компьютер обменивается данными с помощью консоли через последовательный порт и не имеет «настоящей» консоли (я имею в виду дисплей и клавиатуру), к которой можно привязать консоль как псевдо tty (/ dev/tty), есть вероятность, что ваш /dev/ttyS0 действительно используется ядром в качестве консоли для ввода и вывода, терпеливо ожидая подключения терминала и подтверждения строки DTR. Но там вы начинаете отправлять данные и не соблюдать этот 40-летний протокол.

Чтобы решить вашу ситуацию, скорее всего, вам нужно изменить строку загрузки ядра в загрузчике, чтобы вы изменили console=/dev/ttyS0. Вы также можете посмотреть на /dev/inittab и проверить строки getty.

person zmo    schedule 10.05.2014
comment
не имеет реальной консоли (я имею в виду дисплей и клавиатуру) -- Unix действительно использовал TTY в качестве консоли. Механические телетайпы были заменены ВДТ. Видеодисплей и клавиатура — это концепция домашнего компьютера и ПК. Порт отладки на многочисленных SBC, над которыми я работал, всегда был трехпроводным последовательным портом и не имел линии DTR. - person sawdust; 10.05.2014
comment
Именно об этом я и говорю, @sawdust. Я не понимаю, почему вы пытаетесь спорить со мной, говоря то же самое, что и я. И в последнем абзаце я рассматриваю обе проблемы: либо ядро ​​использует /dev/ttyS0 как консоль, либо getty использует его как есть. Если это getty, то, скорее всего, он ожидает поведения, подобного tty, в конфигурации порта. - person zmo; 10.05.2014
comment
Вы утверждаете, что настоящей консоли не существует. Не правда. TTY — это консоль. Ты не понимаешь; Я не согласен с тобой. Нет требований к дисплею и клавиатуре или сигналу DTR. Linux может нормально работать с 3-проводным последовательным портом в качестве консоли. Есть тысячи SoC со встроенным Linux, чтобы доказать это. OP до сих пор не предоставил никаких доказательств того, что SBC неправильно настроен. Все эти сообщения выглядят нормально. - person sawdust; 10.05.2014
comment
Слово «консоль» первоначально произошло от предмета мебели, за которым можно было сидеть, чтобы вводить данные и получать доступ к выходным данным компьютера. Когда я говорю о настоящей консоли — обратите внимание на кавычки, я говорю только о клавиатуре+мыши, привязанной к системе (как бы это ни было сделано), и я говорю, что по дизайну< /i>, в SBC такого нет. - person zmo; 10.05.2014
comment
Linux может прекрасно работать с 3-проводным последовательным портом, но это не значит, что так оно и есть. Если к последовательному порту привязан getty, то возможны проблемы. Если ядро ​​привязано к ttyS0 в качестве консоли ядра (т. е. куда ядро ​​отправляет журналы) и для него настроены ключи отладки, возможны другие проблемы. Тем не менее, строки ttyS специально привязаны к физическим устройствам, в отличие от исходных строк tty, которые были привязаны к виртуальным устройствам для эмуляции терминала. И чтобы положить этому конец, OP не представил доказательств того, что SBC настроен правильно. - person zmo; 10.05.2014