Список форумов » Технический форум » Видеонаблюдение » Программные решения

 

Начать новую тему Ответить на тему
Автор Сообщение
Не в сети
 Заголовок сообщения: Поддержка устройств видео захвата на кодеках SAA713x в Linux
СообщениеДобавлено: 22 апр 2009, 21:59
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
Поддержка устройств видео захвата на кодеках SAA713x в Linux, на примере карты Orient HW-504.

Автор: Богословский Виктор (THK).

Дело было так. Решил я сделать себе дома систему видео наблюдения и после долгих поисков и опытов с сетевыми камерами пришел к выводу, что наибольшим удобством и функциональностью будет обладать связка: компьютер + карта видео захвата + аналоговые камеры. Посмотрел прайсы, почитал характеристики и решил брать китайскую карту 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 DeviceClass 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
[b]#define SAA7134_BOARD_ORIENT_HW_504 96[/b]

#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:
[b]case SAA7134_BOARD_ORIENT_HW_504:[/b]
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,
      },
   },
   [b][SAA7134_BOARD_ORIENT_HW_504] = {
   /* Orient HW-504 (Возможно Orient HW-508 и Hawell HW-404M7) */
   /* Богословский Виктор E-mail: bogovic@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 */
      }
   }},[/b]
   [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,
   },[b]{
      .vendor      = 0x1131,
      .device      = 0x7130,
      .subvendor   = 0x1131,                        .subdevice   = 0x0000,
      .driver_data  = SAA7134_BOARD_ORIENT_HW_504,
   },[/b]{
      .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 – для компиляции модулей.
Возможно, гуру поморщатся и предложат еще десяток «самых правильных» вариантов компиляции, но гуру почему-то таких статей не пишут и наверное не читают, так что все в порядке.

Дополнения для Debian Lenny:

Для удачной компиляции модулей мне пришлось собирать ядро целиком.
make oldconfig
make
Сборка длится ну оооочень долго!

Один из авторов этого форума (http://www.forumnov.ru) предложил другой вариант:
422 писал(а):
можно скомпилить отдельно модули, без всего ядра.
make oldconfig
make include/
make CONFIG_VIDEO_SAA7134=m M=drivers/media/video/saa7134/
в результате сборка проходит менее чем за минуту.

После завершения компиляции копируем из каталога
/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 и главное сэкономит время и силы.


          Вернуться к началу  
 
Не в сети
 Заголовок сообщения: Re: Поддержка устройств видео захвата на кодеках SAA713x в Linux
СообщениеДобавлено: 22 апр 2009, 22:41
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
Файлы к статье...


У вас нет доступа для просмотра вложений в этом сообщении.


Последний раз редактировалось THK 03 июн 2009, 19:48, всего редактировалось 1 раз.
Обнаружены "битые" файлы. Исправлено.


          Вернуться к началу  
 
 Заголовок сообщения: Re: Поддержка устройств видео захвата на кодеках SAA713x в Linux
СообщениеДобавлено: 22 апр 2009, 22:47
  

Аватара пользователя
Участник

Зарегистрирован: 21 апр 2009, 16:38
Сообщения: 1218
Откуда: СССР
THK писал(а):
Файлы к статье...

:good: :good: :good:

Правильно. Чаще всего, используя карты на чипах SAA713x без бубна и "... матери" трудно обойтись.
У меня две карты на этих чипах и с обеими были проблемы. Проблемы из-за желтых клоунов "Великой Поднебесной". Гы.... :yes3: :smile:


          Вернуться к началу  
 
Не в сети
 Заголовок сообщения: Re: Поддержка устройств видео захвата на кодеках SAA713x в Linux
СообщениеДобавлено: 01 май 2009, 16:31
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
Столкнулся с такой проблемой, после компиляции модулей в Debian Lenny командами:
Код:
make oldconfig
make modules

Модули получаются неработоспособными. :sad:
Компилировал так:
Код:
make oldconfig
make

Все ОК! :smile:


У вас нет доступа для просмотра вложений в этом сообщении.


Последний раз редактировалось THK 03 июн 2009, 20:14, всего редактировалось 2 раз(а).
Обнаружены "битые" файлы. Исправлено.


          Вернуться к началу  
 
 Заголовок сообщения: Re: Поддержка устройств видео захвата на кодеках SAA713x в Linux
СообщениеДобавлено: 02 май 2009, 08:09
  

Аватара пользователя
Участник

Зарегистрирован: 21 апр 2009, 16:38
Сообщения: 1218
Откуда: СССР
THK писал(а):
Столкнулся с такой проблемой, после компиляции модулей в Debian Lenny командами:
Код:
make oldconfig
make modules

Модули получаются неработоспособными. :sad:
Компилировал так:
Код:
make oldconfig
make

Все ОК! :smile:


Вижу, ты проблему решил. :smile: В чем было дело?


          Вернуться к началу  
 
Не в сети
 Заголовок сообщения: Re: Поддержка устройств видео захвата на кодеках SAA713x в Linux
СообщениеДобавлено: 02 май 2009, 10:40
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
Цитата:
Вижу, ты проблему решил. :smile: В чем было дело?

Точно не скажу, mdprobe ругалось на неверный формат модуля.
Поставил заголовочники ядра, попробовал make modules - не работает.
Посмотрел вывод команды make modules - осталось ощущение, что ей чего то не хватает...
Решил попробовать просто make - все заработало...
С ядром 2.6.18 таких проблем не было, а с 2.6.26 потребовалось компилить все.


          Вернуться к началу  
 
 Заголовок сообщения: Re: Поддержка устройств видео захвата на кодеках SAA713x в Linux
СообщениеДобавлено: 02 май 2009, 10:50
  

Аватара пользователя
Участник

Зарегистрирован: 21 апр 2009, 16:38
Сообщения: 1218
Откуда: СССР
Угу, ясно. :yes3:
А я уже у себя стал "рыть", но не "нарыл" ничего. Все пашет, все в полном порядке. :unknw: :biggrin:


          Вернуться к началу  
 
Не в сети
 Заголовок сообщения: Re: Поддержка устройств видео захвата на кодеках SAA713x в Linux
СообщениеДобавлено: 02 май 2009, 12:23
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
Vladimir писал(а):
Угу, ясно. :yes3:
А я уже у себя стал "рыть", но не "нарыл" ничего. Все пашет, все в полном порядке. :unknw: :biggrin:

А мысли есть, почему make modules компилирует модули, которые не работают (ошибка - неверный формат модуля)? На эксперименты жалко времени... make modules выполняется около часа!...

PS Система свежеустановленная, т.е. я накосячить не мог (не успел :smile: ).


          Вернуться к началу  
 
 Заголовок сообщения: Re: Поддержка устройств видео захвата на кодеках SAA713x в Linux
СообщениеДобавлено: 02 май 2009, 12:45
  

Аватара пользователя
Участник

Зарегистрирован: 21 апр 2009, 16:38
Сообщения: 1218
Откуда: СССР
THK писал(а):
А мысли есть, почему make modules компилирует модули, которые не работают (ошибка - неверный формат модуля)?

А хрен его знает, :unknw: может быть не хватает каких-либо библиотек, или установлены некорректные исходники ядра, а может быть ядро собиралось не тем компилятором, которым ты сейчас собираешь модуль ... :unknw: вариантов миллион. :mega_shok:


          Вернуться к началу  
 
Не в сети
 Заголовок сообщения: Re: Поддержка устройств видео захвата на кодеках SAA713x в Linux
СообщениеДобавлено: 11 июн 2009, 23:10
  

Аватара пользователя

Зарегистрирован: 21 апр 2009, 23:28
Сообщения: 285
Откуда: г. Серпухов, МО
По поводу компиляции...
Вот сообщение с OpenNet от Алексея:
Цитата:
ДА!

Получилось!

Огромный Thanks автору.

Читал у кого-то не заработали новые модули (modprob ругался на неверный формат)
У меня было тоже самое!
Я долго не эксперементировал.
Вообще говоря "make modules" - это старая как мир команда. Сейчас все
обходится только "make".
Возможно в этом проблема.

Я делал на Ubuntu 9.04 и просто заюзал "make-kpkg kernel_image"
/установил новое ядро как новый пакет и все заработало. бага была лишь в том
что initrd не прописался у GRUBa в menu.lst

vlc отлично показывает!

Родная прога из комплекта (под Windows) работала хуже!!! (по качеству картинки)

мучаюсь с zoneminder-ом, ругается на "shared memory not valid"
хотя все как по мануалам в /etc/syscntr.conf прописывал и так и сяк...


          Вернуться к началу  
 
 
Начать новую тему Ответить на тему



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Показать сообщения за:  Поле сортировки  
Перейти:  

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения


Яндекс цитирования Словенск