toweroff 1 12 апреля, 2017 Опубликовано 12 апреля, 2017 · Жалоба Добрый день Ну не то, чтоб я ноль прям в Linux :) около того Но надо - значит надо. Есть задача такая: некий драйвер реализует в системе несколько виртуальных UART. Внешняя связь у него через один существующий - ttyS0 Драйвер от каждого виртуального UART собирает данные, заворачивает в обертку и отправляет в ttyS0 Оттуда же принимает завернутые данные и "рассовывает" по буферам соответствующих виртуальных UART Я так понимаю, мне не хватает знаний для: 1. Зарегистрировать имя в дереве устройств 2. Интерфейс драйвера UART для системы 3. Таймер для сбора данных из виртуальных портов Поможите примерами, люди добрые Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость nill 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба Поможите примерами, люди добрые Давайте, я Вам лучше удочку дам. Драйверы tty описаны в LDD, глава 18. В главе 7 есть про ядерные таймеры. Но если очень хочется примеров, то что-то дожно быть в дереве исходников в /drivers/tty. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба Есть задача такая: некий драйвер реализует в системе несколько виртуальных UART. Внешняя связь у него через один существующий - ttyS0 ... 1. Зарегистрировать имя в дереве устройств 2. Интерфейс драйвера UART для системы 3. Таймер для сбора данных из виртуальных портов Если вы заворачиваете все потоки в /dev/ttyS0, то вам сам интерфейс UART в ядре и не нужен... (это что-то типа самопального MODBUS?) Поможите примерами, люди добрые Я здесь рядом давал уже ссылку: Практикум по Linux Kernel. Там полно примеров и др. вещей вам нужных для этой затеи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба Проясните, пожалуйста, такой момент. Нашел я на просторах tiny_serial, взял за основу Компилируется, после пересборки ядра даже не ругается и загружается. Появляется новое tty-устройство так, как я его и обозвал Но! Понатыканные мной сообщения printk в dmesg не вижу. В частности, вот такая структура: static struct uart_ops tiny_ops = { .tx_empty = tiny_tx_empty, .set_mctrl = tiny_set_mctrl, .get_mctrl = tiny_get_mctrl, .stop_tx = tiny_stop_tx, .start_tx = tiny_start_tx, .stop_rx = tiny_stop_rx, .enable_ms = tiny_enable_ms, .break_ctl = tiny_break_ctl, .startup = tiny_startup, .shutdown = tiny_shutdown, .set_termios = tiny_set_termios, .type = tiny_type, .release_port = tiny_release_port, .request_port = tiny_request_port, .config_port = tiny_config_port, .verify_port = tiny_verify_port, }; в .startup занесен правильный адрес, но функция не вызывается. Наткнулся на упоминание http://stackoverflow.com/questions/3705814...-being-executed поправил .type, но все равно ноль реакции minicom запускается, но пишет offline Куда еще можно копнуть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gerber 8 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба Куда еще можно копнуть? В направлении udev rules. Вкратце - в современных линуксах сам по себе модуль ядра, загруженный в память, ещё ни к чему систему не обязывает (вызывать все его функции) - ОС должна "понять", что устройство, для которого загружен модуль ядра, есть (появилось) в системе. Вторая возможная причина, по которой может не работать ваш драйвер - для устройства уже есть драйвер в составе ядра или среди загруженных модулей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба Вкратце - в современных линуксах сам по себе модуль ядра, загруженный в память, ещё ни к чему систему не обязывает (вызывать все его функции) - ОС должна "понять", что устройство, для которого загружен модуль ядра, есть (появилось) в системе. Совершенно не обязательно - это всё зависит от того, как написан код самого модуля. udev/sysfs используется достаточно многими модулями ядра, но далеко не всеми, и это совсем не обязательно. Нашел я на просторах tiny_serial, взял за основу Компилируется, после пересборки ядра даже не ругается и загружается. Появляется новое tty-устройство так, как я его и обозвал Но! Понатыканные мной сообщения printk в dmesg не вижу. Какой уровень диагностики у вас указан в printk()? (нужно не на пальцах рассказывать, а хотя бы 2-3-5 строчек с этим свои printf() показывать) Вы выполняет загрузку в графическом терминале? - выполните её в текстовой консоли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба не надо никаких самописных модулей ядра. гуглите "socat virtual serial port" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба Значится так... Я тут нагуглил tty0tty - виртуальные порты, "соединенные" между собой. Вот уже и становится понятно, почему у меня "нихт" Нужно и управляющие сигналы нормально обрабатывать (похоже, не стоит надеяться на то, будут там всякие RTS/CTS, DSR/DTR использоваться или нет, программно лучше сделать) да и сам TTY драйвер явно приводится к TTY_DRIVER_TYPE_SERIAL и SERIAL_TYPE_NORMAL В общем пример абсолютно рабочий, буду путем выбрасывания лишнего вкорячивать свой функционал :) не надо никаких самописных модулей ядра. гуглите "socat virtual serial port" видел и как мне со всем этим городить обертки для работающего железа за малиной? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 18 апреля, 2017 Опубликовано 18 апреля, 2017 · Жалоба UPD Товарищи, вот какой вопрос возник. Правильно ли будет забирать из драйвера данные физического порта, обрабатывать и рассовывать по виртуальным системным таймером? Или для подобных действий нужен специальный механизм (драйвер-то сам по себе не дергается, по сути, его "теребят" пользовательские приложения, а забирать данные нужно) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gerber 8 19 апреля, 2017 Опубликовано 19 апреля, 2017 · Жалоба Товарищи, вот какой вопрос возник. Правильно ли будет забирать из драйвера данные физического порта, обрабатывать и рассовывать по виртуальным системным таймером? ИМХО, это неправильно, будить систему по каждому тику таймера, а не по приходу данных. Вообще, драйвер на уровне ядра тут лишний (как уже указывалось выше). Задача решается в userspace обычным демоном, который создает нужное вам количество char devices, после чего блокируется на read() из физического порта. Все пришедшие из "виртуальных" портов данные он пишет в физический порт, и наоборот, пришедшие из физического порта парсит, и рассовывает по "виртуальным". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 19 апреля, 2017 Опубликовано 19 апреля, 2017 · Жалоба ИМХО, это неправильно, будить систему по каждому тику таймера, а не по приходу данных. Вообще, драйвер на уровне ядра тут лишний (как уже указывалось выше). Задача решается в userspace обычным демоном, который создает нужное вам количество char devices, после чего блокируется на read() из физического порта. Все пришедшие из "виртуальных" портов данные он пишет в физический порт, и наоборот, пришедшие из физического порта парсит, и рассовывает по "виртуальным". не нашел, все примеры в kernel space :( или мой гугель сломался с другой стороны, если драйвер будет совершать по таймеру очень короткое действие раз эдак в 10мс, что с того? у меня ж еще вот какая загвоздка - создаваемые порты должны быть вполне себе полноценными, со всякими ioctl(), ибо на них будет садиться и звонилка модемная и еще вещи Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 19 апреля, 2017 Опубликовано 19 апреля, 2017 · Жалоба с другой стороны, если драйвер будет совершать по таймеру очень короткое действие раз эдак в 10мс, что с того? у меня ж еще вот какая загвоздка - создаваемые порты должны быть вполне себе полноценными, со всякими ioctl(), ибо на них будет садиться и звонилка модемная и еще вещи Как-то мне всё это видится: самомнения - полные штаны, а умений - кот наплакал :1111493779: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 19 апреля, 2017 Опубликовано 19 апреля, 2017 · Жалоба Как-то мне всё это видится: самомнения - полные штаны, а умений - кот наплакал :1111493779: В первом посте я обрисовал ситуацию. А самомнение у Вас, похоже Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 19 апреля, 2017 Опубликовано 19 апреля, 2017 · Жалоба я обрисовал Нужно больше читать, и меньше писать херни. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 20 апреля, 2017 Опубликовано 20 апреля, 2017 · Жалоба Нужно больше читать, и меньше писать херни. Подсказать советом религия не позволяет? Такое ощущение, что Вы со всеми знаниями родились сразу, вся нужная литература была при рождении сразу привязана к заднице и помощь и советы вообще не требовались, так? И речь была одномоментно поставлена правильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться