LINUX.ORG.RU

установка скорости serial при загрузке

 ,


0

1

Всех приветствую.

Вопрос про ubuntu 18.04 lts. Где в ней задумывалась установка скорости последовательного порта?

Как установить руками, я знаю. Как сбацать свой сервис и туда прописать все что мне надо, тоже. Меня интересует как это задумывалось в ubuntu.

Причем, мне нужна не скорость ядерной консоли (ttyS0), а просто, еще одного последовательного порта (куда воткнут navis).

Для чего все это. Мне нужно чтобы при старте, gpsd сразу цеплялся к порту и получал координаты. В дистре старая версия gpsd, которая не понимает параметр –speed. Обновлять - не вариант.

UPD: так как установка скорости нужна исключительно для gpsd. То именно для него можно использовать скрипт /etc/gpsd/device-hook который gpsd вызывает перед стартом получения данных и перед завершением работы.

★★★★★

Последнее исправление: yax123 (всего исправлений: 1)

Ответ на: комментарий от yax123

а если записать ttyS1 в inittab, указать нужную скорость, но вместо getty или что там полагается, запускать gpsd? :)

Harald ★★★★★
()
Ответ на: комментарий от Harald

а если записать ttyS1 в inittab, указать нужную скорость, но вместо getty или что там полагается, запускать gpsd? :)

Чем это лучше своего «сервиса» который однократно запускает setserial 115200? Это, по крайней мере, соответствует духу дистра.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

Чем это лучше своего «сервиса» который однократно запускает setserial 115200? Это, по крайней мере, соответствует духу дистра.

Так вроде бы Ubuntu должна setserial запускать сама. В Debian есть /etc/init.d/setserial (у меня, да, sysv init еще :) и конфиг он берет из /etc/serial.conf. А что там было в 18.04? upstart или уже systemd?

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от yax123

Ничем. Не, ну в принципе всё логично, ОС инициализирует только то, что нужно для самой ОС, а всё остальное оборудование пусть своим сервисом инициализируется по необходимости.

Harald ★★★★★
()
Ответ на: комментарий от Zubok

что там было в 18.04? в 18.04 уже systemd.

Прогрепал всю систему на предмет stty/setserial/9600/115200 - ничего подходящего нет.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

Ну вроде написано, что пакет setserial в 18.04 ставит сервисы.

/etc/init.d/etc-setserial
/etc/init.d/setserial
/lib/systemd/system/etc-setserial.service
/lib/systemd/system/setserial.service

Если они запускаются (не выключены), то setserial берет конфигурацию из /etc/serial.conf. Если файла нет, то его надо создать.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Harald

только его же установить надо, из коробки его наверняка нету

Ну как бы да, но я не знаю, есть ли он из коробки уже после установки 18.04. Там большая система, много чего ставится. Я сам не помню, ставил ли я сам или уже было. Система с инсталятора была установлена в 2006 году (Debian) и просто обновляется до сих пор. :)

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Формат нашел. Но выяснилось такая хрень:

# cat /etc/serial.conf
/dev/ttyTHS1 baud_base 115200
/dev/ttyTHS2 baud_base 115200
# setserial -a /dev/ttyTHS1
/dev/ttyTHS1, Line 1, UART: undefined, Port: 0x0000, IRQ: 37
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal
# stty -F /dev/ttyTHS1
speed 9600 baud; line = 0;
...

это все после перезагрузки со всем установленными сервисами и конфигами.

как итог - нихрена не работает.

yax123 ★★★★★
() автор топика
Последнее исправление: yax123 (всего исправлений: 1)
Ответ на: комментарий от yax123

Посмотри в /usr/share/doc/setserial. Там пример. Еслиты руками при помощи setserial сможешь выставить что тебе надо, то нужную строчку сформировать можно, сверяясь по man setserial.conf. Как-то так. Ты не уточняешь, кстати, у тебя последовательный порт USB или какая-то мультипортовка? Вроде бы setserial запускается после udev, поэтому порты ttyUSB0 должны уже быть вроде как.

Zubok ★★★★★
()
Ответ на: комментарий от yax123

это arm-железка с нативными портами.

У-у-у, это сложнее. А если вручную через setserial, то работает? А через stty работает?

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от yax123

Через setserial совсем не работает. Только stty

Тут очень возможны какие-то харварные проблемы или драйверные. На nvidia это обсуждается, но мне совершенно ничего не понятно с ходу, я понятия не имею, про что они говорят, так как железные особенности вообще не знаю. То где-то dts править, то еще какие-то вещи. Еще может быть, что Hardware Flow Control какой-ниьудь включен после setsrial и поэтому не работает, а stty его, можетбыть, сбрасывает. Но, может быть, вообще не это. Я не сумею без железки понять.

Но раз работает stty, то лучше не морочить себе голову, а сделать через него. Три варианта есть:

1. Впендюрить в стартовые скрипты. Раньше было можно в rc.local, если без сервиса делать. Это так себе вариант был и тогда, когда sysvinit был. Вот как в Ubuntu 18.04 дела обстоят, я не знаю.

2. Тоже муторный - правило udev и параметр правила для устройства RUN+=«/bin/stty -F /dev/ttyTHS1 115200».

3. Тупо запускать программу из скрипта, где первая строчка stty, который конфигурирует порт, а потом gpsd эта. Имхо лучше всего.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Это все ясно и очевидно. Вопрос был про кошер в убунте. Но если там только setserial тогда придется свое лепить.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

Я не очень-то знаком с gpsd, но вот полюбопытствовал. Тут есть какой-то файл в man описанный: /etc/gpsd/device-hook

 /etc/gpsd/device-hook
           Optional file containing the device activation/deactivation script. Note that while
           /etc/gpsd is the default system configuration directory, it is possible to build the
           GPSD source code with different assumptions.

Вот тут какой-то пример. https://zedm.net/archives/tag/device-hook Я сразу не могу понять, но вот глянь, может, туда можно вписать изменение скорости stty? Я не совсем понимаю, в какой момент это все запускается. Я так понимаю по описанию, что когда udev праавила работают:

       On Linux systems supporting udev, gpsd is normally started automatically when a USB plugin
       event fires (if it is not already running) and is handed the name of the newly active
       device. In that case no invocation is required at all.

Вот сильно не факт, что твой этот /dev/ttyTHS1 вызовет ACTIVATE. Посмотри в ту сторону.

Zubok ★★★★★
()
Ответ на: комментарий от yax123

Вопрос был про кошер в убунте.

Ну обычно это setserial, но не рабоатет, как ты говоришь. Эта штука более низкоуровневая, чем stty, поэтому на хитрых платах вполне ожидаемы проблемы (поэтому и у-у-у моё). Те порты которые ядро инициализирует, можно через параметры ядра выставить, но эти порты не они. На developer nvidia по твою плату вопросы с setserial имеются, но я не могу понять, о чем там речь. Может, драйверные проблемы или в dts что-то подправить надо. Или это в принципе работать не будет.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Я не совсем понимаю, в какой момент это все запускается.

When a device is activated (i.e. a client requests data from it), gpsd attempts to execute a hook from /etc/gpsd/device-hook with first command line argument set to the pathname of the device and the second to ACTIVATE. On deactivation, it does the same passing DEACTIVATE for the second argument.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

А что там было в 18.04? upstart или уже systemd?

Не было а есть, она до 2023 г. поддерживается. Systemd. Последней Ubuntu без systemd была 14.04.

damix9 ★★★
()
Ответ на: комментарий от Zubok

Да, спасибо. Эта хрень работает.

yax123 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.