Linux-Kernel-Treiber für die Videoaufnahme

1977
Stoopkid

Ich habe dieses EasyCap-Video-Capture-Ding mit einem USBTV007-Chip, und ich würde es wirklich gerne mit meinem kleinen Linux-Mint-17-Laptop zum Laufen bringen, damit ich Videos für mein RC-Zeug aufnehmen kann.

Aber ich weiß nicht, was ich mit diesem Linux-Kernel-Treiber machen soll. Ich weiß nicht mal, wie man diese Dateien bekommt, ich nehme an, es ist so etwas wie git. http://linuxtv.org/wiki/index.php/Easycap#USBTV007_EasyCAP

Ich bin auf der Suche nach einer anfängerfreundlichen Erklärung, was zu tun ist: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/media/usb/usbtv

0

2 Antworten auf die Frage

0
A. Bauani

Auf dem heutigen Markt sind verschiedene identische Modelle des Easy Cap-Videoaufnahmegeräts mit einem USBTV007-Chip mit unterschiedlichen Hersteller- / Produkt-IDs in der USB-Geräte-ID verfügbar. Vor dem Kompilieren anderer Treiber werden standardmäßig eingebaute "usbtv" -Module verwendet, die standardmäßig mit einem Linux-Image-Paket ausgestattet sind. Geben Sie den Befehl unten an einem Terminal aus

>sudo lsusb 

Sie würden wahrscheinlich so etwas bekommen:

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  

Suchen Sie nach ID 1d71: 3002 irgendwo in der Ausgabe des Befehls lsusb. Wenn Matchd Sie Glück haben, hat Ihr System möglicherweise Treiber für Ihr Gerät. Wenn nicht, sei nicht hoffnungslos. Mal sehen, welche eindeutige ID Sie haben?

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

Bei einem der Übereinstimmungen mit mehr als vier IDs ist in der Kernel-Version standardmäßig ein anderer deferenter Treiber verfügbar. Bitte lesen Sie die von Ihnen erwähnte Linux-TV-Seite sorgfältig durch.

Ich hatte früher ein sehr ungewöhnliches und neu veröffentlichtes Gerät (soweit meine Kenntnisse vom Markt stammen)

ID 1d71:3002 USB TV 

Was es brauchte, war das Hinzufügen einer einzelnen Zeile in den usbtv-Treiber-Souce-Dateinamen usbtv-core.c und das erneute Kompilieren im Flug. Dazu benötigen Sie einen usbtv-Quellcode mit verschiedenen Komponenten des v4l-Linux-Projekts. Ich würde Ihnen empfehlen, die vollständige Kernelquelle herunterzuladen und zu bearbeiten, aber erst die Modulquelle neu zu kompilieren, nachdem Sie eine einzelne Zeile hinzugefügt haben, um Ihre Geräte-ID auf der Treiberbasis hinzuzufügen. Ich gebe Schritt für Schritt den Befehl. Ich ignoriere die Beschreibung der Schritte für ein schnelles Ende. Lassen Sie mich wissen, wenn es Ihnen schwer fällt zu verstehen. Ich werde später bearbeiten, um Details hinzuzufügen.

Installieren Sie alle Hilfsprogramm- und Anwendungs- und Bibliotheksdateien für den Linux-Kernel-Kompilierungsprozess. Wenige paket sind

make, gcc, autoconf, binutils, build-essential, libncurses-dev zusammen mit der Header-Datei Ihres Kernels.

Nachdem Sie alle notwendigen Pakete installiert haben, versuchen Sie Folgendes:

>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 

Wenn die obigen Schritte ohne Fehler ausgeführt werden, gratulieren Sie. Die harte Zeit ist vorbei. Gehen Sie nun zur usbtv-Quelldatei über:

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

Dort finden Sie Dateinamen: Kconfig Makefile usbtv-audio.c usbtv-core.c usbtv.h usbtv-video.c

Öffnen Sie die Datei usbtv-core.c, um sie mit Ihrem bevorzugten Texteditor zu ändern, und ändern Sie den Code mit:

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

};

Mit Code, der unten angezeigt wird.

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

};

Mit der Zeile 0x1f71 als Hersteller-ID und 0x3301 als Produkt-ID weisen Sie Ihren Treiber an, sobald ein Gerät geladen werden soll, dessen ID-Tag am USB-Anschluss angebracht ist. Versuchen Sie, eine andere Produkt- / Lieferanten-ID zu ändern, wenn Sie einen UTV007-Chipsatz auf Ihrem Gerät haben. Der Punkt ist, dass Ihre eigene Produkt- / Lieferanten-ID mit den Treibern übereinstimmt. Versuchen Sie nun, Module zu kompilieren, indem Sie:

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

Wenn dieser Punkt ohne Fehler beendet ist, entladen Sie das usbtv-Modul mit dem Befehl

>sudo rmmod usbtv && sudo modprobe usbtv 

Versuchen Sie beim Anschließen Ihres Geräts an den USB-Port, die UDEV-Aktivität mit dem Befehl zu überwachen

 > udevadm monitor 

Wenn Sie das Laufwerk / dev / vedio0 direkt nach dem Einfügen des Geräts anzeigen, wird dies zum Erfolg. Wenn nicht, lassen Sie uns dies für weitere Diskussionen wissen.

Zusätzliche Quelle:

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- Modul https://askubuntu.com/questions/17944/was-is-der-minimale-anforderungs-zu -kompilieren- kernelmodule

So signieren Sie Ihr modifiziertes Modul mit einem selbstsignierten Zertifikat:

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

Kopiere und füge das ein:

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 .