Сейчас на форуме: vsv1, Rio, site-pro, -Sanchez-, artyavmu (+6 невидимых)

 eXeL@B —› Софт, инструменты —› Трейсер READ_REGISTER/WRITE_REGISTER
Посл.ответ Сообщение

Ранг: 0.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 ноября 2011 01:31
· Личное сообщение · #1

Хочу добавить поддержку своего ТВ тюнера в linux, драйвер тюнера/демодулятора/декодера есть, но нужны точные данные об i2c, gpio, ...

Разобрал драйвер последней доступной IDA PRO 6.1: драйвер написан на С++ с классами и виртуальными функциями В общем трудно проследить порядок вызовов READ_REGISTER/WRITE_REGISTER.

Подскажите пожалуста программу/драйвер или библиотеку(?) которая умеет ставить хук на эти функции ядра.



Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 04 ноября 2011 04:59
· Личное сообщение · #2

А что такое "REGISTER" в данном случае?



Ранг: 0.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 ноября 2011 11:46
· Личное сообщение · #3

Ratinsh пишет:

А что такое "REGISTER" в данном случае?

Ну регистры тв тюнера, они замаплены в адресное пространство CPU через PCI DMA



Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 04 ноября 2011 14:23
· Личное сообщение · #4

На выбор
http://www.tssc.de/download/prods/
PCIScope и IRPTrace
мануалы поискать на чипы или близкие по функциям,
родственные драйвера в линуксе глянуть
Или
если не новый синовал с буткитом пишешь
начитаться книжек всяких и сайтов типа
http://www.thehackademy.net/madchat/vxdevl/avtech/
разобрать по косточкам hal.dll ~80kb
и вот такое написать - оно тебе надо?
http://code.google.com/p/ngdbg/source/browse/trunk/halipi.cpp



Ранг: 0.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 ноября 2011 14:29 · Поправил: Oleg_Kaa
· Личное сообщение · #5

Ratinsh пишет:
родственные драйвера в линуксе глянуть

Повторюсь В linux есть драйвера для всего: brindge, тюнер, демодулятор и декодер.

Нужно всего лишь прописать правильные значения в регистры, сказать linux'у по какому адресу на i2c шине лежит тюнер и т.д. Потому как каждый производитель совмещает эти чипы по "своему".

P.S. Спасибо за IRPTrace, PCIScope гляну



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 04 ноября 2011 14:39 · Поправил: Hexxx
· Личное сообщение · #6

Oleg_Kaa пишет:
P.S. Спасибо за IRPTrace, PCIScope гляну

Они для винды.

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 04 ноября 2011 15:13 · Поправил: Ratinsh
· Личное сообщение · #7

Для линукса штоль
100 лет не смотрел
там вроде с HAL на DevKit какой-то переход был
краем глаза где-то видел...

не совсем, но пригодится
http://linuxfirmwarekit.org/download.php

думаю искать подобные файлы надоть
http://www.kraxel.org/releases/video4linux/



Ранг: 0.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 ноября 2011 00:30 · Поправил: Oleg_Kaa
· Личное сообщение · #8

Hexxx пишет:
Они для винды.

Или вы меня не правильно поняли, или я неправильно написал
Попытка №2
Есть Express Card ТВ тюнер AVerTV Hybrid Express Slim HC81R который замечательно работает под Windows.
Мне очень хочется что бы он также хорошо работал и под Linux, для этого понятное дело нужно написать драйвер.

После некоторых исследований драйвера под Windows стало понятно что ТВ тюнер построен на базе вот этих трех чипов: CX23885, XC3028L, AF9013. Также на сайте linuxtv.org были прочитаны все how to, wiki и т.д. И стало понятно что в Linux есть(!) драйвера для всех этих чипов, им нужно только указать какие GPIO дергать допустим что бы ресетнуть чип декодер, или указать какой GPIO нужно дернуть что бы его перевести в режим powersave(то есть тупо выключить :D). Чип CX23885 выполняет функции моста (и еще чето там), и ему нужно указать в его регистры(!1) что на порт A заведен порт SVIDEO или на порт B заведено DVB-T

Далее в течении недели был декомпилирован драйвер (A885VCap.sys)ТВ тюнера под Windows, стало понятно что драйвер написан на языке C++ и под разные модели тюнеров. То есть пару базовых классов(виртуальных/абстрактных) и все остальное, из всего этого безобразия мне очень трудно найти вызов WRITE_REGISTER который допустим инициализирует чипы XC3028L и AF9013. Для того что бы вычислить правильный порядок вызовов этих виртуальных функций, ИМХО нужно протрейсить вызовы WRITE_REGISTER/READ_REGISTER.

Вот я и спрашиваю Какой софт под Windows может мне в этом помочь?
Потому как Syser, SoftIce у меня на компе не работают(падают в BSOD)



Ранг: 0.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 ноября 2011 00:39
· Личное сообщение · #9

Oleg_Kaa пишет:
IRPTrace, PCIScope гляну

Глянул, не показывают




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 ноября 2011 01:07
· Личное сообщение · #10

http://linuxtv.org/wiki/index.php/AVerMedia_AVerTV_Hybrid_Express_Slim_HC81R
но если нечем занятся то да.. можно диассемблировать
опыт это всегда полезно



Ранг: 0.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 ноября 2011 01:13 · Поправил: Oleg_Kaa
· Личное сообщение · #11

reversecode пишет:
http://linuxtv.org/wiki/index.php/AVerMedia_AVerTV_Hybrid_Express_Slim_HC81R
но если нечем занятся то да.. можно диассемблировать
опыт это всегда полезно

Эту страницу я видел еще в 2007 году когда купил этот тюнер. Там есть только "слепки" значений регистров, но трейса нету




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 ноября 2011 01:19 · Поправил: reversecode
· Личное сообщение · #12

Oleg_Kaa пишет:
Далее в течении недели был декомпилирован драйвер (A885VCap.sys)ТВ тюнера под Windows, стало понятно что драйвер написан на языке C++ и под разные модели тюнеров

в студию
Oleg_Kaa пишет:
CX23885, XC3028L, AF9013

спецификации в pdf уже достали?
Oleg_Kaa пишет:
Для того что бы вычислить правильный порядок вызовов этих виртуальных функций, ИМХО нужно протрейсить вызовы WRITE_REGISTER/READ_REGISTER.

пишите двайвер хукер
который будет хучить нужные функции и писать обращения в лог

параметры WRITE_REGISTER/READ_REGISTER. вам слабо помогут
потому что их будет за сотню
как вы угадаете какое значение куда пишется? точнее адресс то вы узнаете
но наверняка по тому адрессу будет за десяток обращений
угадать в какой последовательности и что включилось не реально

лучше уж реверсите весь драйвер до уровня понимания



Ранг: 0.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 ноября 2011 01:20
· Личное сообщение · #13

Ладно, завтра пойду куплю firewire кабель и сделаю удаленную отладку как написано http://msdn.microsoft.com/en-us/windows/hardware/ff556866%28v=VS.85%29

И тупо поставлю бряки




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 ноября 2011 01:23 · Поправил: reversecode
· Личное сообщение · #14

Oleg_Kaa пишет:
И тупо поставлю бряки

и тупо не будет работать))
а знаете по чему?
потому есть еще такая штука как задержки и скорость чтения/записи в регистры
вообщем когда наиграетесь в эту игру, сами поймете



Ранг: 0.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 ноября 2011 01:32
· Личное сообщение · #15

reversecode пишет:
и тупо не будет работать))
а знаете по чему?
потому есть еще такая штука как задержки и скорость чтения/записи в регистры
вообщем когда наиграетесь в эту игру, сами поймете

Дык! Почему же? На ARM'ах с JTAG'ом очень даже хорошо работает




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 ноября 2011 01:42 · Поправил: reversecode
· Личное сообщение · #16

ну мы ж не армы с jtag обсуждаем, правда?

видимо с ситацией когда отлаживаемые в дебаге по степу, значения другие чем в рабочем логвебоусе, вы никогда не сталкивались?)
а особенно такая ситуация критична на i2c шине
когда нужны определенные задержки, и если они больше или меньше значения уже читаются пишутся совершенно другие

поэтому 100% работает только вариант драйвер хука на нужные функции
причем иногда приходилось не на прямую скидывать в лог
а набивать в память, что бы задержки в запись лога сократить, которые влияли на работу самого драйвера с железом
а потом уже по особому сигналу в драйвер хука, говорить - "запиши с буффера в лог файл"

ну раз вы такой умный)) играйтесь с чем хотите



Ранг: 0.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 ноября 2011 01:56
· Личное сообщение · #17

reversecode пишет:
ну раз вы такой умный)) играйтесь с чем хотите

Извините, не хотел вас обидеть.
reversecode пишет:
поэтому 100% работает только вариант драйвер хука на нужные функции

Воот Есть ли у кого какие то наработки по этому поводу?
reversecode пишет:
видимо с ситацией когда отлаживаемые в дебаге по степу значения другие чем в рабочем лорвебоусе, вы никогда не сталкивались?)
а особенно такая ситуация критична на i2c шине
когда нужны определенные задержки, и если они больше или меньше значения уже читаются пишутся совершенно другие

Ну мне нужны значения только на этапе инициализации, там судя по RegSpy for CX23885 не очень активная запись. Да в самом драйвере эти места обильно снабжены Sleep'ами.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 ноября 2011 02:02
· Личное сообщение · #18

дык я не обижаюсь) вы ж себя ногой в грудь бьете и говорите что будете отлаживать - ну отлаживайте)
Oleg_Kaa пишет:
Воот Есть ли у кого какие то наработки по этому поводу?

я себе для подобного дела когда то писал такой драйвер, сложного там ничего нет,
драйвер увы не сохранился


 eXeL@B —› Софт, инструменты —› Трейсер READ_REGISTER/WRITE_REGISTER
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати