LINUX.ORG.RU

Ответ на: Re: Перехват данных в ttyS от klalafuda

Re: Перехват данных в ttyS

> а если тупо напустить на неё strace?

там большая прога, вывод в ком-порт лишь малая часть её работы, а мне надо её на довольно большой срок оставить, плюс там могут быть обращения к порту из нескольких программ. В общем хотелось бы именно чистые данные с порта.

shild ()
Ответ на: Re: Перехват данных в ttyS от shild

Re: Перехват данных в ttyS

> там большая прога, вывод в ком-порт лишь малая часть её работы, а мне надо её на довольно большой срок оставить, плюс там могут быть обращения к порту из нескольких программ. В общем хотелось бы именно чистые данные с порта.

готового решения не подскажу, но можно или пропатчить существующий драйвер TTY или написать простенькую обёртку над open/close/read/write/etc под libc чтобы она отслеживала открытие /dev/ttyS*. результатом будет трассировка данных операций куда-нить в файл.

ps: скорее всего существуют и более простые пути, но IMHO и ручная трассировка реализуется за вечер-полтора.

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Перехват данных в ttyS от klalafuda

Re: Перехват данных в ttyS

> готового решения не подскажу, но можно или пропатчить существующий драйвер TTY или написать простенькую обёртку над open/close/read/write/etc под libc чтобы она отслеживала открытие /dev/ttyS*. результатом будет трассировка данных операций куда-нить в файл.

хм, что-то я не очень представляю как эту обёртку подключать... через LD_PRELOAD ? Ладно, сейчас попробую написать что-то типа этого. Но всё таки может есть уже готовый вариант ?

shild ()

Re: Перехват данных в ttyS

старый hasp ломать вздумал? :-)

Anoxemian ★★★★★ ()

Re: Перехват данных в ttyS

Как вариант в модуле serial_core.c заменить в структуре tty_operations uart_ops ф-ции стандартных операций своими которые будут писать в syslog через printk то что тебя интересует и потом вызывать стандартные.

koTuk ()
Ответ на: Re: Перехват данных в ttyS от koTuk

Re: Перехват данных в ttyS

->заменить в структуре tty_operations uart_ops ф-ции стандартных операций своими
Для этого нужно узнать диапозон адресов памяти где лежит модуль(заменить в структуре tty_operations uart_ops ф-ции стандартных операций своими, а как перехватывать?

anonymous ()
Ответ на: Re: Перехват данных в ttyS от anonymous

Re: Перехват данных в ttyS

>> ля этого нужно узнать диапозон адресов памяти где лежит модуль(заменить в структуре tty_operations uart_ops ф-ции стандартных операций своими, а как перехватывать?

Думаю что koTuk предлагал изменить исходники модуля, пересобрать выгрузить и снова загрузить его. А не в рантайме менять что-то прямо в памяти.

Deleted ()
Ответ на: Re: Перехват данных в ttyS от shild

Re: Перехват данных в ttyS

>> готового решения не подскажу, но можно или пропатчить существующий драйвер TTY или написать простенькую обёртку над open/close/read/write/etc под libc чтобы она отслеживала открытие /dev/ttyS*. результатом будет трассировка данных операций куда-нить в файл.

> хм, что-то я не очень представляю как эту обёртку подключать... через LD_PRELOAD ? Ладно, сейчас попробую написать что-то типа этого. Но всё таки может есть уже готовый вариант ?

Есть installwatch, там используется именно такая методика, но для других целей. Можно использовать в качестве образца.

Jini ★★ ()

Re: Перехват данных в ttyS

Так, написал небольшую библиотечку, вроде всё работает - осталось только несколько мелочей.

Отсюда вопрос - как в контексте функции библиотеки узнать из какого процесса она вызвана (интересует имя процесса) ?

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