Требуемый бинарный файл патча можно также получить и при помощи Unix/Linux команды "dd". Для этого ей нужно передать такие параметры, как имя файла на входе, размер блока, смещение, количество блоков и имя выходного файла.
Но я не стал тратить время на подсчёт смещения, а просто сохранил нужный кусок hex редактором в отдельный файл. :-)
and2, ты уже приготовил нужный бинарник размером 25360 байт. Теперь его нужно перевести в hex формат.
В этом деле нам здорово поможет открытая утилита "
Swiss
File
Knife" - "швейцарский файловый нож".
На её сайте доступны для загрузки уже собранные версии почти под все популярные ОС, а также, исходники для самостоятельной сборки.
Если захочешь, можешь потом собрать или загрузить бинарник под Linux. Я же приведу пример, как в нашем случае применить её под Windows.
Загрузи утилиту sfk с её родного сайта
http://stahlworks.com/dev/sfk/sfk.exe в любой свободный каталог.
В этот же каталог скопируй ранее сделанный тобой бинарник.
Открой командную строку.
Перейди в этот каталог командой cd.
Выполни команду "sfk hexdump -nofile -hexsrc -recsize 8 имя_сделанного_бинарного_файла > si2168_30_ROM3_Patch_3_0b20.h" без кавычек.
Открой появившийся файл si2168_30_ROM3_Patch_3_0b20.h с помощью "блокнота".
В самом начале этого файла, перед hex-кодами, вставь следующие строки (как описано в первом посте):
Код:
#ifndef _Si2168_PATCH_3_0b20_TABLE_H_
#define _Si2168_PATCH_3_0b20_TABLE_H_
#define Si2168_PATCH_3_0b20_PART 68
#define Si2168_PATCH_3_0b20_ROM 3
#define Si2168_PATCH_3_0b20_PMAJOR '3'
#define Si2168_PATCH_3_0b20_PMINOR '0'
#define Si2168_PATCH_3_0b20_PBUILD 2
unsigned char Si2168_Patch_3_0b20[] = {
а в самом конце файла вставь:
Код:
};
#define Si2168_Patch_3_0b20_LINES (sizeof(Si2168_Patch_3_0b20)/(8*sizeof(unsigned char)))
#endif /* _Si2168_PATCH_3_0b20_TABLE_H_ */
Сохрани файл и выполни команду "sfk crlf-to-lf si2168_30_ROM3_Patch_3_0b20.h" без кавычек.
Теперь, в файле si2168_30_ROM3_Patch_3_0b20.h уже "unix" переводы строк. Больше его под Windows не редактируй.
Потом, уже под Linux, не забудь убедиться, что его содержимое не "поплыло" и выглядит в редакторе также, как и под Windows.
Перезагрузись в Linux.
Загрузи, если ещё не загрузил, архив с нужными исходниками демодулятора из
http://members.quicknet.nl/pe63/dvbsky-v4l.tar.gzРаспакуй этот архив в любом свободном каталоге.
Скопируй из него файлы, лежащие по пути ./dvbsky/media_build/linux/drivers/media/dvb-frontends/ , и начинающиеся на si215 и si216 (всего 12 файлов) в аналогичный каталог ./media_build/linux/drivers/media/dvb-frontends/ собранного тобой сегодня media_build от 18 февраля 2014.
В этот же каталог ./media_build/linux/drivers/media/dvb-frontends/(в media_build от 18 февраля 2014) скопируй 4 файла, начинающиеся на si2168, из скачанного тобой архива diffs.tgz Сюда же скопируй сделанный тобой файл с патчем микропрограммы - si2168_30_ROM3_Patch_3_0b20.h
Файл xc5000c.diff из архива diffs.tgz положи в каталог ./media_build/linux/drivers/media/tuners (media_build от 18 февраля 2014)
Оставшиеся 4 файла, начинающиеся на saa7134, из архива diffs.tgz, положи в каталог ./media_build/linux/drivers/media/pci/saa7134 (media_build от 18 февраля 2014)
Далее работаем с файлами исключительно в каталоге media_build от 18 февраля 2014
Этап применения патчей:
зайди в каталог ./media_build/linux/drivers/media/dvb-frontends/
Находясь в этом каталоге выполни следующие команды:
patch --verbose -u si2168_demod.c < si2168_demod.c.diff
patch --verbose -u si2168_drv.c < si2168_drv.c.diff
patch --verbose -u si2168_priv.h < si2168_priv.h.diff
patch --verbose -u si2168_si2158.c < si2168_si2158.c.diff
зайди в каталог ./media_build/linux/drivers/media/tuners/
Находясь в этом каталоге выполни следующую команду:
patch --verbose -u xc5000.c < xc5000.c.diff
зайди в каталог ./media_build/linux/drivers/media/pci/saa7134/
Находясь в этом каталоге выполни следующие команды:
patch --verbose -u saa7134-cards.c < saa7134-cards.c.diff
patch --verbose -u saa7134-dvb.c < saa7134-dvb.c.diff
patch --verbose -u saa7134-input.c < saa7134-input.c.diff
patch --verbose -u saa7134.h < saa7134.h.diff
Если в процессе возникнут ошибки, то сохрани и сообщи их.
Этап подключения нового драйвера к media_build. Дублирую то, что описано в первом посте. Если будут вопросы, спрашивай.
В конец файла ./media_build/v4l/.myconfig нужно добавить строку:
Код:
CONFIG_DVB_SI2168 := m
В файле ./media_build/linux/drivers/media/dvb-frontends/Kconfig найти строку
config DVB_SI21X и добавить перед ней
Код:
config DVB_SI2168
tristate "Si2168 based"
depends on DVB_CORE && I2C
default m if !MEDIA_SUBDRV_AUTOSELECT
help
A DVB-T2/T/C tuner module. Say Y when you want to support this frontend.
В файле ./media_build/linux/drivers/media/dvb-frontends/Makefile найти строку
drxk-objs := drxk_hard.o и после неё добавить
Код:
si2168-objs := si2168_demod.o si2168_si2158.o si2168_drv.o
и в самом конце этого же файла добавить строку:
Код:
obj-$(CONFIG_DVB_SI2168) += si2168.o
Этап сборки.
Перейди в каталог media_build, и выполни команду
makeВозникшие ошибки запости.
Если ошибок не будет, то можешь выполнить установку этой версии драйвера командой
make installPS: когда дойдёт до проверки приёма, если с ним возникнут проблемы, то переключи антенну на другой вход тюнера.
Оставь антенну в том гнезде, где качество аналоговой картинки будет выше. В драйвере задействован только один вход тюнера, и я не помню, какой.