The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Поддержка устройств видео захвата на кодеках SAA713x в Linux (video v4l linux kernel patch driver hardware xawtv)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: video, v4l, linux, kernel, patch, driver, hardware, xawtv,  (найти похожие документы)
From: Богословский Виктор (THK) <bogovic at bk.ru> Newsgroups: Date: Mon, 21 Jan 2009 17:02:14 +0000 (UTC) Subject: Поддержка устройств видео захвата на кодеках SAA713x в Linux Поддержка устройств видео захвата на кодеках SAA713x в Linux, на примере карты Orient HW-504. Дело было так. Решил я сделать себе дома систему видео наблюдения и после долгих поисков и опытов с сетевыми камерами пришел к выводу, что наибольшим удобством и функциональностью будет обладать связка: компьютер + карта видео захвата + аналоговые камеры. Посмотрел прайсы, почитал характеристики и решил брать китайскую карту Orient HW-504 (клон Hawell HW-404M7). Плюсы этой карты: низкая цена, отсутствие коммутаторов входов, четыре кодека (по одному на каждый вход) и как следствие высокая скорость захвата видео. Минусы - полное отсутствие поддержки Linux и мягко говоря, не совсем стабильное программное обеспечение под Windows. Плюсы перевесили... Решено! Еду в магазин, привожу домой долгожданную железку. Устанавливаю ее в компьютер и вижу, что моя система (Debian Etch 4.0) её увидела, но не опознала. Вернее опознала как четыре UNKNOWN/GENERIC карты с кодеками SAA7130 от Philips (хотя во всех обзорах и прайсах писали о BT878A) и предложила мне выбрать модель карты из списка, в котором ничего похожего на Orient HW-504 я не обнаружил. Ну что ж, отчаиваться рано. Несколько дней проведённых в Google привел меня к мысли, что надо самому пробовать осуществить поддержку моей карты модулем SAA7134. Собственно эта статья о том, как это сделать. Для нормальной работы карты необходимо правильно инициализировать её регистры. Выяснить параметры инициализации можно с помощью программы flytest. Работает она под Windows, как и софт, который идет в комплекте с картой. И так. Устанавливаем карту в компьютер, загружаем Windows, инсталлируем драйвера и софт. Перед рестартом системы надо удалить запуск программы DVR из автозагрузки. Рестарт. Запускаем программу flytest, я использовал версию 1.5, далее надо выбрать чип из выпадающего списка и нажать кнопку "Dump SAA713x PCI registers" из полученной информации нам потребуется следующее: SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01) I2C slave devices found: No devices GPIO pins: Mode: 0x00389200 Value: 0x00010000 Video input: 3 Audio input: Analog Line1 Далее необходимо проделать тоже самое для остальных чипов платы. Получится следующее: SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01) I2C slave devices found: No devices GPIO pins: Mode : 0x00389200 Value: 0x0001FC00 Video input: 3 Audio input: Analog Line1 Для второго чипа. SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01) I2C slave devices found: No devices GPIO pins: Mode : 0x00389200 Value: 0x00010000 Video input: 3 Audio input: Analog Line1 Для третьего чипа. SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01) I2C slave devices found: No devices GPIO pins: Mode : 0x00389200 Value: 0x00010000 Video input: 3 Audio input: Analog Line1 Для четвертого чипа. Следующий шаг - это запуск родного софта, для того чтобы инициализировать плату, и повторение выше описанной процедуры, для получения параметров инициализации. Должно получиться следующее: SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01) I2C slave devices found: No devices GPIO pins: Mode : 0x00389C00 Value: 0x00016C00 Video input: 3 Audio input: Analog Line1 Для первого чипа. SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01) I2C slave devices found: No devices GPIO pins: Mode : 0x00389200 Value: 0x00010000 Video input: 3 Audio input: Analog Line1 Для второго чипа. SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01) I2C slave devices found: No devices GPIO pins: Mode : 0x00389200 Value: 0x00010000 Video input: 3 Audio input: Analog Line1 Для третьего чипа. SAA7130 (0x7130, SubVenID:1131, SubDevID:0000, Rev: 01) I2C slave devices found: No devices GPIO pins: Mode : 0x00389200 Value: 0x00010000 Video input: 3 Audio input: Analog Line1 Для четвертого чипа. Это вся информация, которую можно получить в Windows для удачной правки модуля SAA7134. Все дальнейшие действия надо проводить в Linux, я использую Debian Etch 4.0. Для получения дополнительной информации надо выполнить команду lspci -vn (утилита v4l-info входит в состав пакета xawtv). Интерес для нас представляет только та часть лога команды, где фигурирует Subsystem: 1131:0000 (Subsystem = SubVenID & SubDevID, которые берем из лога программы flytest). Вот часть лога, интересная для нас: 02:0c.0 0480: 1131:7130 (rev 01) Subsystem: 1131:0000 Flags: bus master, medium devsel, latency 64, IRQ 201 Memory at fe9ff000 (32-bit, non-prefetchable) [size=1K] Capabilities: [40] Power Management version 1 02:0d.0 0480: 1131:7130 (rev 01) Subsystem: 1131:0000 Flags: bus master, medium devsel, latency 64, IRQ 185 Memory at fe9ff400 (32-bit, non-prefetchable) [size=1K] Capabilities: [40] Power Management version 1 02:0e.0 0480: 1131:7130 (rev 01) Subsystem: 1131:0000 Flags: bus master, medium devsel, latency 64, IRQ 177 Memory at fe9ff800 (32-bit, non-prefetchable) [size=1K] Capabilities: [40] Power Management version 1 02:0f.0 0480: 1131:7130 (rev 01) Subsystem: 1131:0000 Flags: bus master, medium devsel, latency 64, IRQ 169 Memory at fe9ffc00 (32-bit, non-prefetchable) [size=1K] Capabilities: [40] Power Management version 1 Поля первой строки имеют следующие значения: PCI ID Device Class Vendor ID Device ID 02:0c.0 0480 1131 7130 Ну вот, теперь у нас имеются все необходимые данные, пора ковырять модуль SAA7134. Сначала надо установить исходные тексты ядра, запускаем aptitude и устанавливаем пакет linux-source-2.6.18 со всеми зависимостями. После этого в каталоге /usr/src/ появится архив с исходными текстами, распакуем их в каталог /usr/src/linux-source-2.6.18/. Я пользуюсь Midnight Commander'ом, поэтому не привожу здесь консольные команды. Переходим в каталог /usr/src/linux-source-2.6.18/drivers/media/video/ и на всякий случай делаем копию каталога ./saa7134/ в ./saa7134_orig/. Дальнейшие действия делаем в "родном" каталоге ./saa7134/. Открываем для редактирования файл saa7134.h, находим там список карт, из которого нам в самом начале предлагалось выбрать кару. В самый конец добавляем нашу карту, назовем ее SAA7134_BOARD_ORIENT_HW_504 и присваиваем ей следующий номер 96: #define SAA7134_BOARD_AVERMEDIA_A169_B1 92 #define SAA7134_BOARD_MD7134_BRIDGE_2 93 #define SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS 94 #define SAA7134_BOARD_FLYVIDEO3000_NTSC 95 #define SAA7134_BOARD_ORIENT_HW_504 96 #define SAA7134_MAXBOARDS 8 #define SAA7134_INPUT_MAX 8 /* ----------------------------------------------------------- */ Сохраняемся, закрываем файл. Открываем для редактирования файл saa7134-input.c, находим там вот такой участок кода и добавляем нашу карту: /* detect & configure */ switch (dev->board) { case SAA7134_BOARD_FLYVIDEO2000: case SAA7134_BOARD_FLYVIDEO3000: case SAA7134_BOARD_ORIENT_HW_504: case SAA7134_BOARD_FLYTVPLATINUM_FM: case SAA7134_BOARD_FLYTVPLATINUM_MINI2: ir_codes = ir_codes_flyvideo; mask_keycode = 0xEC00000; mask_keydown = 0x0040000; break; Больше в этом файле ничего писать не надо, т.к. пульта ДУ у карты нет. Сохраняемся, закрываем файл. Открываем для редактирования файл saa7134-cards.c, находим там вот такой участок кода и добавляем описание нашей карты: .radio = { .name = name_radio, .amux = LINE2, .gpio = 0x2000, }, .mute = { .name = name_mute, .amux = TV, .gpio = 0x8000, }, }, [SAA7134_BOARD_ORIENT_HW_504] = { /* Orient HW-504 (Возможно Orient HW-508 и Hawell HW-404M7) */ /* Богословский Виктор E-mail: bogovic at bk.ru */ .name = "Orient HW-504", .audio_clock = 0x00200000, .tuner_type = UNSET, .radio_type = UNSET, .tuner_addr = ADDR_UNSET, .radio_addr = ADDR_UNSET, .gpiomask = 0x01fc00, .inputs = {{ .name = name_comp1, /* название входа */ .vmux = 3, /* номер канала видео микшера */ .amux = LINE1, /* название канала аудио микшера */ .gpio = 0x389c00, /* битовая маска GPIO */ } }}, [SAA7134_BOARD_FLYVIDEO2000] = { /* "TC Wan" <tcwan@cs.usm.my.> */ .name = "LifeView/Typhoon FlyVIDEO2000", .audio_clock = 0x00200000, .tuner_type = TUNER_LG_PAL_NEW_TAPC, .radio_type = UNSET, .tuner_addr = ADDR_UNSET, .radio_addr = ADDR_UNSET, Думаю, будет уместно рассмотреть здесь поля структуры SAA7134_BOARD_ORIENT_HW_504 * .name - имя карты, которое будет присвоено ей после определения модулем, пишем "Orient HW-504" * .audio_clock - аудио частота (как правило, 2 варианта 0x00200000 или 0x00187de7) и хотя аудио наша плата не поддерживает, я написал 0x00200000 * .tuner_type - тип TV тюнера у нас, его нет, пишем UNSET * .radio_type - тип радио, и его у нас нет, пишем UNSET * .tuner_addr - адрес TV тюнера, пишем ADDR_UNSET * .radio_ addr - адрес радио, пишем ADDR_UNSET * .gpiomask - битовая маска GPIO оказывает самое важное влияет на работу платы в целом. Значение маски GPIO можно получить путем побитового сложения всех его значений (берем все значения GPIO Value из программы flytest), т.е. 0x00010000 | 0x0001FC00 | 0x00016C00 = 0x01fc00, пишем 0x01fc00 * .name - название входа, пишем name_comp1 * .vmux - номер канала видео микшера, смотрим лог программы flytest - Video input: 3, пишем 3 * .amux - название канала аудио микшера, пишем LINE1 (flytest - Audio input: Analog Line1), думаю можно вообще не описывать этот параметр, т.к. аудио наша плата не поддерживает * .gpio - Возможно надо формировать так же, как gpiomask , я полностью не разобрался и просто взял значение из первого чипа, после инициализации (flytest - GPIO Mode: 0x00389C00), тем более результат будет таким же, пишем 0x389c00 Далее в этом же файле ищем вот такой участок кода и добавляем описание нашей карты, как устройства в целом, для того, чтобы модуль смог сам опознать карту: .vendor = PCI_VENDOR_ID_PHILIPS, .device = PCI_DEVICE_ID_PHILIPS_SAA7134, .subvendor = 0x4e42, /* "Typhoon PCI Capture TV Card" Art.No. 50673 */ .subdevice = 0x0138, .driver_data = SAA7134_BOARD_FLYVIDEO3000, },{ .vendor = 0x1131, .device = 0x7130, .subvendor = 0x1131, .subdevice = 0x0000, .driver_data = SAA7134_BOARD_ORIENT_HW_504, },{ .vendor = PCI_VENDOR_ID_PHILIPS, .device = PCI_DEVICE_ID_PHILIPS_SAA7130, .subvendor = 0x5168, .subdevice = 0x0138, .driver_data = SAA7134_BOARD_FLYVIDEO2000, Здесь поля структуры имеют следующие значения: * .vendor - берем из лога команды lspci -vn Vendor ID, пишем 0x1131 (можно PCI_VENDOR_ID_PHILIPS) * .device - берем из лога команды lspci -vn Device ID, пишем 0x7130 (можно PCI_DEVICE_ID_PHILIPS_SAA7130) * .subvendor - берем из лога программы flytest - SubVenID, пишем 0x1131 * .subdevice - берем из лога программы flytest - SubDevID, пишем 0x0000 * .driver_data - то, как назвали карту в файле saa7134.h, пишем SAA7134_BOARD_ORIENT_HW_504 Сохраняемся, закрываем файл. Ну вот, все необходимые исправления сделаны, пора компилировать наш новый модуль. Переходим в каталог /usr/src/linux-source-2.6.18/ и выполняем следующие команды: make oldconfig - для сохранения текущей конфигурации и make modules - для компиляции модулей. Возможно, гуру поморщатся и предложат еще десяток <<самых правильных>> вариантов компиляции, но гуру почему-то таких статей не пишут и наверное не читают, так что все в порядке. После завершения компиляции копируем из каталога /usr/src/linux-source-2.6.18/drivers/media/video/ файлы saa6752hs.ko, saa7134.ko, saa7134-alsa.ko, saa7134-dvb.ko, saa7134-empress.ko, saa7134-oss.ko в каталог /lib/modules/2.6.18-4-686/kernel/drivers/media/video/saa7134/, предварительно сохранив оригинальные файлы. Теперь можно очистить исходные тексты, от результатов компиляции выполнив команду make clean и перезагрузить систему. Чтобы посмотреть загрузился ли наш модуль надо выполнить команду v4l-info /dev/video0 | head -n 9 (утилита v4l-info входит в состав пакета xawtv) вот результат ее работы: ### v4l2 device info [/dev/video0] ### general info VIDIOC_QUERYCAP driver : "saa7134" card : "Orient HW-504" bus_info : "PCI:0000:02:0c.0" version : 0.2.14 capabilities : 0x5000015 [VIDEO_CAPTURE,VIDEO_OVERLAY,VBI_CAPTURE,READWRITE,STREAMING] А чтобы посмотреть, как она работает надо выполнить команду xawtv -nodga -noxv -geometry 640x480 -c /dev/video0 естественно к карте должна быть подключена камера. Ну вот вроде бы и все. Надеюсь, что эта статья поможет, кому ни будь прикрутить свою карту к Linux и главное сэкономит время и силы.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, pazke, 12:51, 22/01/2009 [ответить] [смотреть все]
  • +/
    Отличная статья, поздравляю.

    Не интересует ли вас кстати включение поддержки вашей карты в основное ядро ?

     
     
  • 2.5, devcoder, 15:02, 22/01/2009 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    Хотя я не автор, но позволю заметить по этому поводу следующее Включить патч в ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.6, pazke, 16:27, 22/01/2009 [^] [ответить] [смотреть все]  
  • +/
    Все это совершенно не является проблемой Описываемые вами ужасы вовсе не являют... весь текст скрыт [показать]
     
     
  • 4.7, THK, 18:40, 22/01/2009 [^] [ответить] [смотреть все]  
  • +/
    2 pazke Согласен с тем, что мой патч не годится для помещения в стандартное ядро... весь текст скрыт [показать]
     
     
  • 5.8, pazke, 09:50, 23/01/2009 [^] [ответить] [смотреть все]  
  • +/
    В общем немного, 1 адаптировать ваши изменения к последней версии ядра, исключ... весь текст скрыт [показать]
     
     
  • 6.12, THK, 23:43, 23/01/2009 [^] [ответить] [смотреть все]  
  • +/
    2 pazke Вы писали 1 Как я понимаю для этого надо, как минимум, поставить после... весь текст скрыт [показать]
     
  • 5.10, devcoder, 12:30, 23/01/2009 [^] [ответить] [смотреть все]  
  • +/
    Правильно прислать патч ребятам, которые заведуют V4l-DVB драйверами для ядра ... весь текст скрыт [показать]
     
     
  • 6.11, THK, 23:02, 23/01/2009 [^] [ответить] [смотреть все]  
  • +/
    Спасибо за ссылку, но разве возможно включить в стандартное ядро поддержку устро... весь текст скрыт [показать]
     
     
  • 7.14, pazke, 09:14, 26/01/2009 [^] [ответить] [смотреть все]  
  • +/
    Да возможно, при этом автоматического опознавания конечно не будет, но можно буд... весь текст скрыт [показать]
     
  • 2.31, Алексей, 18:17, 03/06/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    ДА Получилось Огромный Thanks автору Читал у кого-то не заработали новые моду... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.32, THK, 16:44, 04/06/2009 [^] [ответить] [смотреть все]  
  • +/
    Тоже с ним мучался У zoneminder, как я понял, проблемы с V4L второй версии О... весь текст скрыт [показать]
     
     ....нить скрыта, показать (10)

  • 1.2, Аноним, 13:28, 22/01/2009 [ответить] [смотреть все]  
  • +/
    Респект. Молодец.
     
  • 1.3, eplumber, 13:30, 22/01/2009 [ответить] [смотреть все]  
  • +/
    хм, использую аналогичную плату на 8 каналов на убунте 8.04 без всякой компиляции. Конечно, не без бубна!
    Помогло следующее:
    http://www.zoneminder.com/forums/viewtopic.php?t=12758
     
     
  • 2.4, pazke, 14:44, 22/01/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Вы вот об этом I confirm that it works with Ubuntu 8 04 using kernel module aa7... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.13, eplumber, 14:37, 24/01/2009 [^] [ответить] [смотреть все]  
  • +/
    да, об этом ну и что как говорится Вам ехать или шашечки ... весь текст скрыт [показать]
     
  • 1.9, Ilnur, 12:05, 23/01/2009 [ответить] [смотреть все]  
  • +/
    спасибо за статью! то что надо. делаю драйвер для тв-тюнера AverTV Express Slim
     
     
  • 2.15, ALLex24, 19:59, 26/01/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    За статью спасибо Хотел бы принять участие в разработке драйвера для AverTV Exp... весь текст скрыт [показать] [показать ветку]
     
  • 1.16, THK, 01:23, 05/02/2009 [ответить] [смотреть все]  
  • +/
    Файлы к статье, можно найти па адресу: http://fsfnov.ru/forum/viewforum.php?f=18
     
  • 1.17, sp, 21:33, 26/02/2009 [ответить] [смотреть все]  
  • +/
    http://fsfnov.ru/forum/viewtopic.php?f=64&t=160&start=0
     
  • 1.18, Android, 13:20, 27/02/2009 [ответить] [смотреть все]  
  • +/
    Hello У меня тоже имеется плата видеозахвата на saa7134 с 4-мя входами вот... весь текст скрыт [показать]
     
     
  • 2.19, devcoder, 13:42, 27/02/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Вывод загрузки модуля saa7134 для безымянных плат без EEPROM в которых прошит ... весь текст скрыт [показать] [показать ветку]
     
  • 2.20, Аноним, 13:08, 28/02/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Ищите на http://linuxtv.org

     
  • 1.21, THK, 05:14, 01/03/2009 [ответить] [смотреть все]  
  • +/
    2 Android

    На плате один чип?
    Если да, то Вам необходимо в просмоторщике (например Xawtv) попробывать выбрать номер входа.
    Дайте вывод команды lspci -vn.

     
     
  • 2.22, Android, 17:31, 04/03/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    >2 Android
    >
    >На плате один чип?
    >Если да, то Вам необходимо в просмоторщике (например Xawtv) попробывать выбрать номер
    >входа.
    >Дайте вывод команды lspci -vn.

    2THK

    да, чип один, но входов 4. При GENERIC работает только первый, т.к. есть только /dev/video0
    lspci говорит

    #lspci
    ..
    01:01.0 Multimedia controller: Philips Semiconductors SAA7134/SAA7135HL Video Broadcast Decoder (rev 01)
    ...

    #lspci -vn
    ....
    01:01.0 0480: 1131:7134 (rev 01)
            Subsystem: 1131:0000
            Flags: bus master, medium devsel, latency 64, IRQ 21
            Memory at dfeffc00 (32-bit, non-prefetchable) [size=1K]
            Capabilities: [40] Power Management version 1
            Kernel driver in use: saa7134
            Kernel modules: saa7134
    ...

     
     
  • 3.24, eplumber, 14:32, 23/04/2009 [^] [ответить] [смотреть все]  
  • +/
    >[оверквотинг удален]
    >>
    >>На плате один чип?
    >>Если да, то Вам необходимо в просмоторщике (например Xawtv) попробывать выбрать номер
    >>входа.
    >>Дайте вывод команды lspci -vn.
    >
    >2THK
    >
    >да, чип один, но входов 4. При GENERIC работает только первый, т.к.
    >есть только /dev/video0

    в программе захвата указывайте номер канала - 0,1,2,3

     
  • 1.23, DMG, 00:14, 21/04/2009 [ответить] [смотреть все]  
  • +/
    А можно как нибудь задействовать видеовыход?
     
     
  • 2.25, eplumber, 14:33, 23/04/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    >А можно как нибудь задействовать видеовыход?

    хм, похоже никак?

     
     
  • 3.26, DMG, 20:34, 25/04/2009 [^] [ответить] [смотреть все]  
  • +/
    Как я понял он просто программно коммутируется на один из входов? Или можно вывести комбинацию нескольких входов?
     
  • 1.27, THK, 21:08, 06/05/2009 [ответить] [смотреть все]  
  • +/
    Сама статья, готовые модули с поддержкой Orient HW-504, HW-508, Howell HW-404M7 и других клонов находятся по адресу:
    Поддержка устройств видео захвата на кодеках SAA713x в Linux
    Здесь Вы найдете модули для Debian Etch 4.0 (ядро 2.6.18 ) и Debian Lenny 5.0 (ядро 2.6.26).

    PS Будут вопросы - заходите на форум...

     
     
  • 2.28, THK, 21:11, 06/05/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    http://slovensk.su/forum/viewtopic.php?f=29&t=74
     
  • 2.29, THK, 21:13, 06/05/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    http://slovensk.su/forum/viewtopic.php?f=29&t=74
     
     
  • 3.30, THK, 21:38, 02/06/2009 [^] [ответить] [смотреть все]  
  • +/
    В связи с реорганизацией сайта, изменилась ссылка на статью:
    http://forumnov.ru/viewtopic.php?f=29&t=74&sid=f432aef805260423c6a4127336ccc3


     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor