LINUX.ORG.RU

Возможно ли сделать интерфейс для программы?

 ,


0

2

Здравствуйте, прошу подсказки у опытных людей. Есть программа которая работает с внешним устройством которой в конфиге нужно указать интерфейс типа /dev/tty… Но общение с устройством возможно только через сервер который принимает данные через UNIX сокет или клиента этого сервера который принимает данные в виде аргумента при запуске. Подскажите, как организовать что то вроде двунаправленного моста /dev/myDev <> UNIX сокет? И возможно ли подобное вообще? mknod использовать можно, а вот netcat и socat недоступны, модули ядра тоже не подгрузить. Спасибо.


Python доступен? Если думать про bash, то там тоже может оказаться не всё доступно для работы с сокетами что unix что tcp. Есть /dev/tcp или /dev/udp? /dev/socket ?

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от Nikol

Мне удавалось в такие же экзотические окружения совать свои кросскомпилированные без среды сборки программы (не только ARM, но и прочая экзотика типа microblaze) собранные поверх лишь базовых библиотек и линковыных с либами из рантайма таргета, и там уже хоть сокеты хоть tcp

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

Всё зависит от того, насколько это критически важная задача, если надо для работы, то придется попыхтеть

I-Love-Microsoft ★★★★★
()

Создай тот самый сокет по пути /dev/что-там-нужно. Может быть прокатит, если прога tty-специфичные ioctl не делает.

Если делает - я бы пошёл по пути исправления проги скорее. Либо её саму пропатчить, либо через LD_PRELOAD ей подгрузить обёртку с нужными подменами функций.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 4)

по шагам - есть шелезко которое физически подключается в rs (232 или 485) и которое драйвером c такой-то матерью отражается как /dev/ttyX

протокол общения через этот /dev/ttyX вам неизвестен, от слова вообще совсем.

но есть приклад (сервер), который в свою очередь через файловый сокет предоставляет клиентам подключения.

протокол взаимодействия через этот unix-сокет вам также неизвестен.

зато есть софт-клиент который если вызвать с пачкой параметров правильно всё сделает. (однократно видимо, одно действие, и завершится)

внимание, вопрос: что именно вы хотите сделать ? 1) вскрыть протокол общения с железкой по /dev/ttyX 2) вскрыть протокол обмена с сервером по файл-сокету, или 3) написать UI для конечного юзера.

вот чтобы сделать пункт 3, у вас всё есть - просто на каждый чих будет `exec bank_bastard ...` :-)

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

Большое спасибо за ответ. Мне нужен третий вариант, причём интерфейс должен быть устройством вроде /dev/myDevice. Чтобы можно было выполнять echo «AT+COPS» > /dev/myDevice. А в другом терминале принять ответ cat /dev/myDevice. Да, железка это модем подключенный по usb к микроконтроллеру.

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

Чем дальше читал, тем меньше понимал, что у вас там такое.

модем подключенный по usb к микроконтроллеру

А юникс-сокет откуда взялся?

должен быть устройством вроде /dev/myDevice

Наверное, вам нужно делать это через PTY, но, если из функционала доступен только mknod, то вобще не понятно, как вы хотите решить эту задачу.

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

железка это модем подключенный по usb к микроконтроллеру

неужели на хост машине ничего нельзя скомпилировать в этот контроллер? религия не позволяет или препод не велит...

но интерфейс (или нечто) вы-же как-то собирались писать

и кстати на модем наверняка есть документация и спеки. Если не совсем отполированный чёрный ящик - на нём есть буквоки и цифирки - надо просто поискать. Может повести и сработает просто поиск по фотографии.

MKuznetsov ★★★★★
()