Драйвер ядра Linux для захвата видео

1895
Stoopkid

У меня есть эта функция захвата видео EasyCap с чипом USBTV007, и я действительно хотел бы, чтобы она работала на моем маленьком ноутбуке linux mint 17, чтобы я мог снимать видео для своих RC-устройств.

Но я не знаю, что делать с этим драйвером ядра Linux. Я даже не знаю, как получить эти файлы, я предполагаю, что это что-то вроде git. http://linuxtv.org/wiki/index.php/Easycap#USBTV007_EasyCAP

Я ищу начинающее дружеское объяснение того, что делать с этим: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/media/usb/usbtv

0

2 ответа на вопрос

0
A. Bauani

На текущем рынке доступны различные идентичные модели устройства видеозахвата Easy Cap с микросхемой USBTV007 с различными идентификаторами поставщика / продукта, указанными внутри идентификатора устройства USB. Поэтому, прежде чем приступить к компиляции другого драйвера, использующего встроенные модули 'usbtv', по умолчанию поставляется пакет изображений linux. Выполните команду ниже на терминале

>sudo lsusb 

Вы, вероятно, получите что-то вроде:

Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 006 Device 001: ID 1d71:3002 USB TV  

Найдите идентификатор 1d71: 3002 где-нибудь в выходных данных команды lsusb, если он совпадает, вам повезло, в вашей системе может быть драйвер для вашего устройства. Если нет, не будь безнадежным. Посмотрим, какой у вас уникальный идентификатор?

ID eb1a:2861 eMPIA Technology, Inc. ID 1c88:0007 Somagic, Inc.  ID 1c88:003c Somagic, Inc.  ID 1c88:003f Somagic, Inc. 

Любой из вышеуказанных четырех идентификаторов будет иметь другой защищенный драйвер, уже доступный по умолчанию в вашей версии ядра. Пожалуйста, внимательно прочитайте на странице Linux TV, которую вы упоминаете.

Раньше у меня было очень необычное и недавно выпущенное устройство (насколько я знаю из рыночного источника)

ID 1d71:3002 USB TV 

Для этого нужно было добавить одну строку в файл с именем драйвера usbtv usbtv-core.c и перекомпилировать его на лету. Для этого вам нужно иметь исходный код usbtv с различным компонентом проекта Linux v4l. Я бы порекомендовал вам загружать и работать с полным исходным кодом ядра, но перекомпилировать исходный код модуля только после добавления одной строки для добавления идентификатора вашего устройства в базе драйверов. Я даю ниже шаг за шагом команду. Я игнорирую описание шагов для быстрого завершения. Дайте мне знать, если вам трудно понять. Я отредактирую, чтобы добавить детали позже.

Установите все утилиты, файлы приложений и библиотек для процесса компиляции ядра Linux. Мало что из пакета

make, gcc, autoconf, binutils, build-essential, libncurses-dev вместе с файлом заголовков вашего ядра.

После установки всех необходимых пакетов попробуйте:

>cd /usr/src/linux-source-X.XX.X >sudo cp /usr/src/linux-headers-`uname -r`/Module.symvers . >sudo make -C /usr/src/linux-headers-`uname -r`/ oldconfig >sudo cp /boot/config-X.xx.x-xx-YYYY .config >sudo make -C /usr/src/linux-headers-`uname -r`/ prepare 

Если вышеуказанные шаги выполнены без ошибок, поздравляю. Трудное время прошло. Теперь перейдите к исходному файлу usbtv:

cd /usr/src/linux-source-X.XX.X/drivers/media/usb/usbtv/ 

Там вы найдете имя файла: Kconfig Makefile usbtv-audio.c usbtv-core.c usbtv.h usbtv-video.c

Откройте файл usbtv-core.c для модификации в вашем любимом текстовом редакторе и измените код, имеющий:

static struct usb_device_id usbtv_id_table[] = { { USB_DEVICE(0x1b71, 0x3002) }, {} 

};

С кодом, показанным ниже.

static struct usb_device_id usbtv_id_table[] = { { USB_DEVICE(0x1b71, 0x3002) }, { USB_DEVICE(0x1f71, 0x3301) }, {} 

};

Используя строку 0x1f71 в качестве идентификатора поставщика и 0x3301 в качестве идентификатора продукта, вы указываете драйверу, что нужно как можно быстрее загрузить любое устройство с соответствующим тегом ID, вставленным в порт USB. Попробуйте изменить другой идентификатор продукта / поставщика, если вы уверены в наличии набора микросхем UTV007 на вашем устройстве. Суть в том, чтобы ваш собственный идентификатор продукта / поставщика совпадал с драйвером. Теперь попробуйте скомпилировать модули:

>sudo make -C /usr/src/linux-headers-`uname -r`/ M=$PWD prepare modules install  >sudo depmod -a 

Если эта точка завершается без ошибок, выгрузите / перезагрузите модуль usbtv с помощью команды

>sudo rmmod usbtv && sudo modprobe usbtv 

при подключении устройства через USB-порт попробуйте отслеживать активность UDEV с помощью команды

 > udevadm monitor 

Показ диска / dev / vedio0 сразу после установки устройства приведет к успеху. Если нет, дайте нам знать для дальнейшего обсуждения.

Дополнительный источник:

https://linuxtv.org/wiki/index.php/Gadmei_USB_TVBox_UTV382_(id_0x1f71:0x3301) https://askubuntu.com/questions/168279/how-do-i-build-a-single-in-tree-kernel- модуль https://askubuntu.com/questions/17944/what-is-the-minimum-requirement-to-compile-kernel-modules

Чтобы подписать ваш измененный модуль самозаверяющим сертификатом:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-signing-kernel-modules-for-secure-boot.html

-1
Dario

Скопируйте и вставьте это:

p=`pwd` git clone https://github.com/simon3z/usbtv.git cd usbtv/ cd /usr/src/linux-headers-`uname -r` make SUBDIRS=/root/usbtv modules cd /usr/src/linux-headers-`uname -r` cd /lib/modules/`uname -r`/kernel/drivers/media/usb/usbtv/ cp $p/usbtv/usbtv.ko . 

Похожие вопросы