Die Box bekommt Augen

Erstellt am 18.02.2011

Warum viel Geld ausgeben...

...wenn man sich siene Netzwerkkamera doch ganz einfach aus ein wenig recycleter Elektronik zusammen basteln kann. Nach dem allseits beliebten Internetradio und dem IR-Empfänger für die Merlin-Tastatur, jetzt ein weiterer Beitrag zu den vielfältigen Nutzungsmöglichkeiten der VIP1710-Box. In meinem Fundus an Elektronik-Kram fand sich auch eine Logitech Quickcam Express II Webcam, die über USB an den Computer angeschlossen wird. Wie gut, dass die Box auch einen USB-Port hat! Mit den Tools aus dem Thread im Mikrocontroller.net ließ sich auch schnell verifizieren, dass die Kamera prinzipiell am USB-Port erkannt wird:

Bus 001 Device 003: ID 046d:0928 Logitech, Inc. QuickCam Express

Was fehlte war ein Kernelmodul mit dem man die Kamera ansprechen kann. Zunächst musste das videodev-Modul her, welches aus dem v4l-Projekt stammt und daher schon im Kernel enthalten ist. Also mit der Cross-Toolchain von Motorola dieses ausgewählt und kompilieren lassen (nähere Befehle und Erläuterungen im 2. Teil). Als nächstes noch der eigentliche Treiber für die Kamera, der auf dem v4l-Subsystem aufsetzt. Dabei bin ich zunächst über das http://qce-ga.sourceforge.net/-Projekt gestolpert. Nach einigen Anpassungen am Makefile und großzügiger Hilfe aus dem IRC, waren die richtigen Compilerflags gefunden, damit sich das Kernelmodul laden lässt. Leider zählt meine Quickcam II jedoch nicht zu den unterstützten Kameras dieses Treibers, sondern nur die älteren Modelle, weswegen sich leider erstmal nichts tat. Das Kernelmodul funktioniert aber, wie mir im Forum demonstriert wurde - daher gibts das auch unten zum Download.

Weiter suchen war angesagt und für die meisten Webcams ist inzwischen spca5xx (bzw. auf den neuen Kerneln gspca) zuständig. Mit etwa 150 Modellen sollte hier noch einiges mehr funktionieren als nur meine Quickcam. Also wieder in das Build-Environment von Werner Hilse und dort die neuesten der alten spca-Quellen geladen, Makefile angepasst und auch glatt durchkompiliert. Ergebnis ist das spca5xx-Kernelmodul mit dem nun die Kamera erkannt wird.

Unter /proc/spca50x/ finden sich die beiden Dateien control0 und video0 die nun schon einige Infos über die Kamera enthalten:

driver          : SPCA5XX USB Camera
driver_version  : 00.57.11
model           : Logitech QuickCam Express II
streaming       : yes
grabbing        : no
compress        : no
data_format     : BGR
brightness      : 106
colour          : 0
hue             : 0
contrast        : 11264
num_frames      : 2
curframe        : 1
lastFrameRead   : -1
Avg. luminance  : 0x0 0
frame           : 0
  sequence      : 156
  grabstate     : 0
  depth         : 12
  size          : 352 288
  format        : YUV420P
  data_buffer   : 0xc0496000
frame           : 1
  sequence      : 157
  grabstate     : 2
  depth         : 32
  size          : 352 288
  format        : YUV420P
  data_buffer   : 0xc05c2008
packet_size     : 1023
framebuffer     : 0xc0496000

Das passende Video-Device findet sich in /dev/v4l/video0. Um das Bild jetzt auf den Computer zu bekommen benötigen wir noch ein kleines weiteres Programm, welches sich ebenfalls in dem oldrelease-Ordner befindet. Nämlich spcaview, welches auch spcaserv mitbringt. Mit dem Server auf der Box und dem Viewer auf dem Desktop-Rechner kann man sich nun das Bild der Kamera mit ca. 3 FPS ansehen. In besagtem Archiv befindet sich außerdem noch spcacat mit dem man auch direkt Bilder auf der Festplatte speichern kann.

Runterladen und starten

Hier folgen jetzt alle benötigten Module und Programme, sowie die Anpassungen an den Makefiles. Anschließend beschreibe ich, wie ihr das ganze zum Laufen bekommt. Zunächst also die Kernelmodule:

Der PWC-Treiber ist direkt aus der Toolchain heraus kompiliert und daher schon recht alt. Damit lassen sich aber diverse Kameras von Philips und auch Logitech betreiben.

Desweiteren spcaview, spcacat und spcaserv kompiliert zum Ausführen direkt auf der Box und spcaview für x86_64- und i386-Computer:

Sollten die Programme auf eurem Rechner nicht laufen, dann müsst ihr wohl selber kompilieren - ist aber nicht weiter schwer ;-)

Makefiles

Damit die Kernelmodule mit dem Kernel zusammenarbeiten ist es essentiell, dass diese mit den gleichen Flags kompiliert werden, wie auch schon der Kernel. Wenn Ihr selber kompilieren wollt, müsst ihr also sicherstellen, dass folgende Flags beim Kompilieren gesetzt sind:

-fno-pic
-mno-abicalls
-G 0
-mlong-calls
-finline-limit=10000

Kernelmodule laden

Ok, jetzt endlich zum spannenden Teil. Die Module videodev.o sowie spca5xx.o (oder quickcam.o) müssen in /lib/modules liegen. Jetzt einfach zuerst mit insmod videodev das videodev-Modul laden und anschließend spca5xx, quickcam oder pwc. Wird die Kamera unterstützt wird das Device /dev/v4l/video0 angelegt. Nachdem spcaserv aber nach /dev/video0 sucht, muss noch ein Link dorthin erstellt werden: cd /dev; ln -s v4l/video0 .
Jetzt könnt ihr den Server z.B. nach /usr/bin/ laden und mit chmod +x /usr/bin/spcaserv ausführbar machen. Anschließend einfach mit spcaserv -w 7070 starten. Er sollte jetzt auf eingehende Verbindungen warten (es kann sein, dass spcaserv nicht mit dem quickcam- oder pwc-Modul zusammenarbeitet, da spcaserv, wie der Name schon sagt, vom spca-Projekt stammt).
Auf eurem Desktoprechner könnt ihr jetzt spcaview -w <IP-VIP1710>:7070 ausführen und es sollte ein Bild der Kamera angezeigt werden, hier z.B. mein Blick aus dem Fenster

Kamerabild

Es kann sein, dass spcaserv einen Fehler alla "ERROR opening V4L interface" ausspuckt, wenn ihr die Webcam über einen USB-Hub betreibt. In diesem Fall versucht es zunächst erstmal ohne einen Hub dazwischen. Darauf hat mich Holger S. hingewiesen und ich danke für die Info.

Um spcaview direkt auf der Box auszuführen, müsst ihr verhindern, dass das grafische System der Box startet, da die Anwendung direkt auf das Framebuffer-Device zugreifen möchte. Für meine ersten Experimente habe ich dafür auf das Build-Environment von Werne Hilse zurückgegriffen, der dort bereits ziemlich umfangreiche Vorkehrungen getroffen hat, dass dies nicht geschieht. Dann nur noch einen Link anlegen cd /dev; ln -s fb/0 fb0 damit SDL das Framebuffer-Device auch findet. Die libSDL muss nach /usr/lib, dann könnt ihr das Programm mit spcaview -m 720x576 -w <IP-VIP1710> starten, oder natürlich auch ohne den -w-Parameter, wenn ihr direkt die Ausgabe des /dev/video0 sehen wollt.

Seitenanfang