LINUX.ORG.RU

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

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

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

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

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

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

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

// wbr

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

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

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

shild
() автор топика

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

Anoxemian ★★★★★
()

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

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

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

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

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

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

Deleted
()
Ответ на: комментарий от shild

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

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

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

Jini ★★
()

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

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

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