Задача:
для линукс хочу написать драйвер к тв-тюнеру avertv express slim
линукс не поддерживает данный тюнер
Элементная база тюнера:
АЦП cx23885
ВЧ xc3028
За основу используется драйвер для cx23885 в линуксе.
можно посмотреть что за это драйвер, вот
начал разбираться с написанием драйвера к тюнеру.
Что сделано:
1) распечатал все модули относящиеся к cx23885, определил что нужно будет изменять в модулях: cx23885-cards.c, cx23885-dvb.c (еще не определил конкретно что нужно дописать)
2) определил связи между модулями
3) разобрался что такое загружаемые модули ядра линукса (как их подгрузить и выгрузить)
В данный момент пытаюсь скомпилить сам отдельно модуль cx23885 без пересборки самого ядра.
Необходимо найти спецификацию по тюнеру. Думаю что можно использовать снятые регистры тюнера со страницы
Народ, посоветуйте это поможет при написании драйвера и вообще присоединяйтесь пользователи этого тюнера!
с компиляцией модуля без пересборки я сделал.
Это делается следующей командой в каталоге исходных кодов ядра:
make -C<путьдоисходников> SUBDIRS=$PWD modules
после компиляции появится модуль в моем случае, cx23885.ko , который можно загружать.
Поделюсь со своими успехами:
внес исправления в cx23885.h и cx23885-cards.c сделал так чтобы у меня определялся тюнер и после определения создается устройство video1, которое должно транслировать видеопоток аналогового телевидения, но mplayer выводит только зеленый экран. (Хотя бы)) )
Буду делать так чтобы хотя бы можно было смотреть аналоговое телевидение.
Исправленные исходные коды выложу позже.
при загрузки исправленного модуля cx23885.ko в dmesg выводится следующие сообщения
cx23885 driver version 0.0.1 loaded
cx23885 0000:02:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
CORE cx23885[0]: subsystem: 1461 939, board: AverTV Hybrid Express Slim [card=11,autodetected]
cx23885[0]: i2c bus 0 registered
cx23885[0]: i2c bus 1 registered
cx23885[0]: i2c bus 2 registered
Tuner Input 0
Tuner type 0
Tuner Addr 0
cx23885[0]/0: registered device video1 [v4l2]
cx23885_dev_checkrevision() Hardware revision = 0xb0
cx23885[0]/0: found at 0000:02:00.0, rev: 2, irq: 16, latency: 0, mmio: 0x53000000
cx23885 0000:02:00.0: setting latency timer to 64
PS Весь заинтересованный народ давайте объединимся в работе над драйвером. Мое видение таковое, что основа уже есть в виде исходного драйвера, я его подправил чтобы определялось устройство аналогового телевидения. Необходимо разобраться, что делать дальше.
Исходные коды на сегодня в Моих файлах. Если не можете их скачать я вышлю по мылу.
У меня с такими же чипами и не пашет. Подсказать по написанию драйвера наврядли смогу, т.к. не знаю о драйверах в линуксе (у меня UBUNTU 8.10 64 bit) абсолютно ничего. А так кое-что интересное нашел:
Вышло новое ядро (это ссылка на внесённые изменения файл весит 5,7 Mb) может в нём поддержку включили вроде бы.
Кстати попробуй прогу TVtime, может с ней твой драйвер заработает. Она вроде бы специально для этих целей написана.
Я тут подумал и вот что:
-- твоя карта имеет в своем наименовании express, значит интерфейс у неё PCIexpress, следовательно, в драйвере ввод/вывод сигнала (точнее потока сигнала) можно взять из драйвера на карту имеющую ту же интерфейсную микросхему.
-- Например, для своей я нашел ссылку на драйвера (Софт и драйверы > Linux там в разделе /releases/video4linux есть дрова на TV тюнеры моей фирмы, но на более урезанные по функциональности модели. Посмотри может что-то подойдет и для твоей.
спасибо за совет!
почти недельное затишье и снова в бой!
Выкладываю немного переработанные драйвера для тв-тюнера. ДРАЙВЕР СКАЧАТЬ
они пока не показывают картинку. но все же кому интересно, то будет от чего отталкиваться.
Уважаемый V_Oz, не сообщите в какой кодировке ваше сообщение #59500. Спасибо.
добавлено спустя 3 ч. 19 минут
Решил я попробовать поправить эти файлы из твоего последнего релиза драйвера, но что-то у меня не хочет компилироваться:
/usr/src/linux-headers-2.6.27-11$ make -C"/home/anton/Leadtek WinFast PxDVR3200H" SUBDIRS=$PWD modules
make: Вход в каталог `/home/anton/Leadtek WinFast PxDVR3200H'
make: *** Нет правила для сборки цели `modules'. Останов.
make: Выход из каталога `/home/anton/Leadtek WinFast PxDVR3200H'
Может я что-то не так делаю?
Ещё вопрос: в файле cx23885.h это ты дописал строки или они там были? Как-то странно они выглядят:
extern struct list_head cx23885_devlist;
.......
#define SRAM_CH14 13 /* MOE Vid */
#define SRAM_CH15 14 /* MOE RSLT */
........
А в файле cx23885-cards.c в самом его окончании:
case CX23885_BOARD_AVERTV_SLIM:
request_module("tuner-xc2028");
break;
Ты вроде указал что у тебя тюнер xc3028, хотя может это и не столь важно, во всяком случае из-за этого может быть зеленый экран (нет настройки на канал).
Отвечаю на вопросы:
1) для компиляции попробуй просто сделать в каталоге /usr/src/linux-headers-2.6.27-11 написать команду
make modules
2)
> #define SRAM_CH14 13 /* MOE Vid */
> #define SRAM_CH15 14 /* MOE RSLT */
эти строки были уже
3)
> case CX23885_BOARD_AVERTV_SLIM:
> request_module("tuner-xc2028");
> break;
как я понял из описания этот модуль подходит и для x3028
Пока не совсем понимаю как можно использовать дамп регистров тв-тюнера в написании драйвера.
Хотя в моей последней версии которую я еще не выложил я понаитию их применил внекоторых частях программы.
кодировка .. кто ее знает? :) прокатило если поставить кои8-р и запостить. потом переключить в ср1251, чтобы прочитать. прошу обратить внимание разработчика сайта.
покопался на linuxtv.org. тамошний софт наверняка автор уже попробовал? однако не вижу тут упоминания о том, что у Вас есть взятая оттуда прошивка тюнера (она там как-то хитро изымается из виндюжного файла.
и тамошний драйвер не понимает (пока) тюнера хс3028. Ваш, как я понял из форума, понимает.
Самое интересное, что там пишут также то, что тюнер и Multimedia video controller CX23885 будут (или уже) внесены в ядро 2.6.26 (или 27, не помню)
конечно лопатить новое ядро и устанавливать это слишком муторно и зачастую без надобности, подумал я, и таки созрел, чтобы начать тыкать палкой в Ваш модуль :)
2 Антоха: tuner-xc2028 по сути аналог 3018 (как пишут на том же сайте) и как видно на сайте производителя отличается от 3028 в поддержке DVB-T. вопрос в том, какую прошивку заливает драйвер (или вышеуказанный модуль) в тюнер. в нашем случае это должна быть именно 3028.
-----------------------------------------------
Опера 9.63
Сборка:
2474
Платформа:
Linux
Система:
i686, 2.6.22.17-0.1-default
Qt library
3.3.8
Кстати я поставил ядро 2.6.28.6-generic из репозитория Ubuntu 9.04 Jaunty. Всё определилось: по dmesg определяются cx23885 и xc3028. Оригинальную прошивку я вынул как там написано.Создались устройства в /dev/dvb/adapter0: frontend0, demux0, dvr0, net0. Totem видит устройство цифрового телевидения, но поскольку у меня нет его, проверить работоспособность этого режима не могу. Все программы не видят в этом устройстве ни приёмника аналогового ТВ, ни радио.
И еще к автору . на V4L сайте есть репа где кто-то работает над тюнером. может это как-то поспособствует написанию? Хотя как я понял суть сводится к связке драйвера контроллера и драйвера тюнера, что практически уже произошло.
To:Ilnursoft Я выше писал (6-ой пост).
Я сейчас попробую скомпилировать модуль из исходников от ядра 2.6.28.2, новее не нашел, надеюсь к моему установленному (2.6.28.6) подойдет. Также выкладываю часть исходников ядра 2.6.28.2 (папку /usr/src/linux-2.6.28.2/drivers/media/video/cx23885) с исправлениями для моего ТВ-тюнера Ссылка.
Напиши пожалуйста поподробнее как скомпилировать этот модуль? При выполнении команды make modules где должна быть папка CX23885?
Исходные тексты ядра 2.6.28.2 я скачал с kernel.org, хотел откомпилировать и поставить, но оно начало ругаться на отсутствие целей при компиляции Xen. Это Xen - нововведение в ядре 2.6.28, по крйней мере в Ubuntu. Поэтому я начал искать в гугле как его можно поставить и нашел решение в виде подключение репозитория Ubuntu 9.04 Jaunty. Оно (2.6.28) там есть только 2.6.28-5 и 2.6.28-6. Установив последнее тв-тюнер определился (вывод dmesg):
[ 14.677166] Linux video capture interface: v2.00
[ 14.731735] cx23885 driver version 0.0.1 loaded
[ 14.731785] cx23885 0000:02:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19
[ 14.731940] CORE cx23885[0]: subsystem: 107d:6681, board: Leadtek Winfast PxDVR3200 H [card=12,autodetected]
[ 15.029981] cx25840' 3-0044: cx25 0-21 found @ 0x88 (cx23885[0])
[ 15.032763] cx23885_dvb_register() allocating 1 frontend(s)
[ 15.032767] cx23885[0]: cx23885 based dvb card
[ 15.296938] xc2028 2-0061: creating new instance
[ 15.296941] xc2028 2-0061: type set to XCeive xc2028/xc3028 tuner
[ 15.296946] DVB: registering new adapter (cx23885[0])
[ 15.296950] DVB: registering adapter 0 frontend 0 (Zarlink ZL10353 DVB-T)...
[ 15.297215] cx23885_dev_checkrevision() Hardware revision = 0xb0
[ 15.297223] cx23885[0]/0: found at 0000:02:00.0, rev: 2, irq: 19, latency: 0, mmio: 0xfd800000
[ 15.297230] cx23885 0000:02:00.0: setting latency timer to 64
[ 4863.053864] i2c-adapter i2c-2: firmware: requesting xc3028-v27.fw
[ 4863.099629] xc2028 2-0061: Loading 80 firmware images from xc3028-v27.fw, type: xc2028 firmware, ver 2.7
[ 4863.298176] xc2028 2-0061: Loading firmware for type=BASE F8MHZ (3), id 0000000000000000.
[ 4864.454043] xc2028 2-0061: Loading firmware for type=D2633 DTV7 (90), id 0000000000000000.
[ 4864.467989] xc2028 2-0061: Loading SCODE for type=DTV6 QAM DTV7 DTV78 DTV8 ZARLINK456 SCODE HAS_IF_4760 (620003e0), id 0000000000000000.
[ 4868.683693] xc2028 2-0061: Loading firmware for type=D2633 DTV78 (110), id 0000000000000000.
[ 4868.697861] xc2028 2-0061: Loading SCODE for type=DTV6 QAM DTV7 DTV78 DTV8 ZARLINK456 SCODE HAS_IF_4760 (620003e0), id 0000000000000000.
Остальное касательно тв-тюнера я описал. А насчет поведения ядра быстрее грузиться система, но иногда притормаживает музон в ритмбоксе.
добавлено спустя 3 ч. 4 минут
Ilnursoft:с компиляцией модуля без пересборки я сделал.
Это делается следующей командой в каталоге исходных кодов ядра:
make -C<путьдоисходников> SUBDIRS=$PWD modules
после компиляции появится модуль в моем случае, cx23885.ko , который можно загружать.
Ilnursoft, а можно теперь рассказать не догнавшему поезд как можно зарядить Ваш модуль вместе с подключением тюнера?
Или Вы взяли исходник из сырцов ядра и отдельно скомпилировали? Напишите инструкцию, плз. Очень не хочется новое ядро ставить - боюсь зависимостей много посыплется.
А то смотрю как вы тут переписываетесь и аж завидки берут :)
Привет всем. Очень рад что нашёл эту тему. Уже пол года мучаюсь без дров для своего тюнера.
Автор, как у тебя успехи в этом направлении? Сам программить не умею, но готов активно тестировать то что есть. Напиши где взять последний вариант модулей и что с ними делать
P.S. А почему в теме не упоминается демодулятор AF9013? Вроде как для него модуль тоже нужен. И какую прошивку для тюнера использовать? Я пробовал как на написано её делать.
Я чесно говоря не шарю в программировании.Поэтому возможно немного глупое предложении,но все таки.
Для тюнера AVerTV DVB-T Express X E568E есть драйвера под линукс
Может их как то можно приспособить к express slim?По характеристикам тюнера вроде похожи.
А то жалко,у меня этот тюнер а на линуксе он бесполезен.
dontpanic, мне кажется это чисто DVB тюнер. Цифровую часть у нашего скорее всего и так можно заставить работать, только зачем это надо? Ilnursoft Правильным делом занялся, но видимо решил поставить винду в итоге