Каковы последствия установки скорости передачи терминала из пользовательского пространства?

  • Осиротевший индексный дескриптор - это индекс, который был отключен, но все еще открыт в другом процессе. Например, запустите tail -f {file} в одной оболочке, а затем rm {file} в другой. Файловая система отслеживает их, чтобы их можно было очистить после завершения процесса.

  • Это совершенно нормально, когда у вас нечистый соскок. Это просто файлы, которые были удалены, но все еще оставались открытыми, когда файловая система была перемонтирована только для чтения. Они не причина, а всего лишь симптомы.


  • Для проблемы с индексными дескрипторами запустите этот запрос, чтобы получить список того, сколько индексных дескрипторов используется во всех каталогах

    for i in `find . -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n
    

    Вы можете обратиться к this и this для получения дополнительных методов проверки .

3
29.08.2017, 16:11
1 ответ

Похоже, вы немного не понимаете, как все это работает.

Во-первых, /dev/ttyACM0не представляет канал USB или даже конечную точку USB для любого подключенного последовательного адаптера, он представляет собой UART внутри адаптера, который обрабатывает последовательную связь. Данные, которые вы читаете из него, не будут включать заголовки или кадры USB, точно так же, как данные, которые вы читаете из /dev/ttyS0, не будут включать заголовки или кадры PCI Express. Установка скорости передачи для них влияет на аппаратное обеспечение, которое они представляют, а не на шину, к которой они подключены, поэтому это ничего не сделает с USB-соединением.

Во-вторых, скорость передачи данных является аппаратной, а не программной настройкой. Когда вы вызываете stty, чтобы установить его на последовательный порт, это говорит ядру сообщить аппаратному обеспечению изменить скорость передачи данных, с которой оно пытается получить данные. Это означает, в частности, что любые данные, которые были получены до этого изменения, будут либо поддельными (, поскольку они не были правильно интерпретированы аппаратным обеспечением, иногда в случае, если скорости передачи близки друг к другу или точные гармоники )., либо совсем пропало (потому что железо его просто не восприняло, более вероятный случай на современном железе ).

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

Итак, чтобы уточнить, правильный способ получить данные из адаптера USB-последовательный порт без использования специального программного обеспечения:

  1. Установите скорость передачи данных при запуске системы. Для адаптера USB-последовательный порт это, вероятно, должно быть правилом udev, чтобы оно устанавливалось и при подключении устройства.
  2. Используйтеcat(или od, если вам нужны байтовые значения вместо текста )для чтения данных. Это вернет точные данные, полученные адаптером USB для последовательного порта (, при условии, что адаптер не выполняет специальную обработку ).
7
27.01.2020, 21:12

Теги

Похожие вопросы