там большая прога, вывод в ком-порт лишь малая часть её работы, а мне надо её на довольно большой срок оставить, плюс там могут быть обращения к порту из нескольких программ. В общем хотелось бы именно чистые данные с порта.
> там большая прога, вывод в ком-порт лишь малая часть её работы, а мне надо её на довольно большой срок оставить, плюс там могут быть обращения к порту из нескольких программ. В общем хотелось бы именно чистые данные с порта.
готового решения не подскажу, но можно или пропатчить существующий драйвер TTY или написать простенькую обёртку над open/close/read/write/etc под libc чтобы она отслеживала открытие /dev/ttyS*. результатом будет трассировка данных операций куда-нить в файл.
ps: скорее всего существуют и более простые пути, но IMHO и ручная трассировка реализуется за вечер-полтора.
> готового решения не подскажу, но можно или пропатчить существующий драйвер TTY или написать простенькую обёртку над open/close/read/write/etc под libc чтобы она отслеживала открытие /dev/ttyS*. результатом будет трассировка данных операций куда-нить в файл.
хм, что-то я не очень представляю как эту обёртку подключать... через LD_PRELOAD ? Ладно, сейчас попробую написать что-то типа этого. Но всё таки может есть уже готовый вариант ?
Как вариант в модуле serial_core.c заменить в структуре tty_operations uart_ops ф-ции стандартных операций своими которые будут писать в syslog через printk то что тебя интересует и потом вызывать стандартные.
->заменить в структуре tty_operations uart_ops ф-ции стандартных операций своими
Для этого нужно узнать диапозон адресов памяти где лежит модуль(заменить в структуре tty_operations uart_ops ф-ции стандартных операций своими, а как перехватывать?
>> ля этого нужно узнать диапозон адресов памяти где лежит модуль(заменить в структуре tty_operations uart_ops ф-ции стандартных операций своими, а как перехватывать?
Думаю что koTuk предлагал изменить исходники модуля, пересобрать выгрузить и снова загрузить его. А не в рантайме менять что-то прямо в памяти.
>> готового решения не подскажу, но можно или пропатчить существующий драйвер TTY или написать простенькую обёртку над open/close/read/write/etc под libc чтобы она отслеживала открытие /dev/ttyS*. результатом будет трассировка данных операций куда-нить в файл.
> хм, что-то я не очень представляю как эту обёртку подключать... через LD_PRELOAD ? Ладно, сейчас попробую написать что-то типа этого. Но всё таки может есть уже готовый вариант ?
Есть installwatch, там используется именно такая методика, но для других целей. Можно использовать в качестве образца.