Webcam Support für MK802: Kernel selbst kompelieren

Geschrieben von Eric Scheibler am 24.06.2013

In diesem früheren Tutorial habe ich die Installation von Ubuntu auf den MK802 beschrieben. Nun wollte ich an den Rechner eine Webcam anschließen. Leider fehlt das Modul “UVCVideo”, welches für die Erkennung von USB Webcams zwingend erforderlich ist. Im Folgenden beschreibe ich daher den Kompeliervorgang für einen eigenen Kernel, in welchem das betreffende Modul integriert wurde.

Das Bauen eines eigenen Kernels besteht im wesentlichen aus vier Teilschritten:

  • Source Code holen
  • Kernel Config anpassen
  • Kompelieren (Cross-Compile)
  • Kernel und Module auf die SD Karte kopieren

Cross-Compile bedeutet, dass der Kompeliervorgang nicht auf dem Zielgerät selbst, sondern auf einem anderen Rechner durchgeführt wird. In meinem Fall wars ein Debian Wheezy (AMD64). Der MK802 verwendet hingegen die ARM Architektur. Somit muss man zunächst einen Cross-Compiler installieren, um unter AMD64/I386 auch ARM Programme kompelieren zu können.

Dazu folgendes in die Sources Datei eintragen:

sudo vim /etc/apt/sources.list
...
deb http://www.emdebian.org/debian testing main

Den öffentlichen Schlüssel des Repos hinzufügen, aktualisieren und den Cross-Compiler installieren (für GCC Version 4.7):

sudo aptitude install emdebian-archive-keyring
sudo aptitude update
sudo aptitude install gcc-4.7-arm-linux-gnueabi build-essential git uboot-mkimage libncurses5-dev git

Dann brauchts noch diesen Symlink:

sudo ln -s /usr/bin/arm-linux-gnueabi-gcc-4.7 /usr/bin/arm-linux-gnueabi-gcc
  1. Source via Git holen:
git clone git://github.com/linux-sunxi/linux-sunxi

In den erstellten Ordner wechseln und den Branch für den MK802 von Tobi auschecken:

cd linux-sunxi
git checkout 23e5456879db0175f571dec43095c49e181e0b10
  1. Als nächstes braucht man die Kernel Config Datei, in welcher festgelegt wird, welche Module in den Kernel reinkompeliert werden sollen. Die Config kann man aus dem bestehenden Kernel auf der SD Karte des MK802 extrahieren. Dazu zunächst die Partition 1 (Boot) der SD Karte mounten und anschließend das Export-Skript aufrufen:
sudo /dev/sdb1 /media/image
./scripts/extract-ikconfig /media/image/uImage > .config

Jetzt das Config Menü aufrufen, die gerade erstellte .config wird eingelesen:

make ARCH=arm menuconfig

Das UVC Modul auswählen, siehe folgende Übersicht:

Device Drivers  --->
<*> Multimedia support  --->
<*>   Video For Linux
[*]   Video capture adapters (NEW)  --->
[*]   V4L USB devices (NEW)  --->
<*>   USB Video Class (UVC)
  1. Kernel und Module kompelieren:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j3 uImage
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j3 INSTALL_MOD_PATH=output modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j3 INSTALL_MOD_PATH=output modules_install
  1. Wenn alles fehlerfrei durchgelaufen ist, wurde ein neuer Kernel und ein Ordner mit allen nötigen Modulen erstellt. Diese müssen nun auf die SD Karte kopiert werden.

Kernel auf sdb1 (Boot):

mv /media/image/uImage original_kernel_image
cp arch/arm/boot/uImage /media/image/uImage
sudo umount /media/image

Modules Ordner auf sdb2:

sudo mount /dev/sdb2 /media/image
mv /media/image/lib/modules/3.0.36-t3+ 3.0.36-t3+.original_modules
cp -R output/lib/modules/3.0.36-t3+ /media/image/lib/modules/3.0.36-t3+
sudo umount /media/image

SD Karte wieder in den MK802 einstecken und booten. Schließt man jetzt eine Webcam an, so ist diese unter /dev/video0 zu finden, getestet mit einer Logitech C270.

Quelle: https://wiki.linaro.org/Resources/HowTo/PackageYourOwnKernel