CaspaPX

From Gumstix User Wiki
Revision as of 14:38, 14 February 2011 by Neil (Talk | contribs) (Install Pre-built Kernel)

Jump to: navigation, search
{{#ifeq:|yes||{{#if:Test Infobox|}}{{#if:|{{#if:{{{above}}} |
|{{#if:
|{{#if: | }} }} }} }}{{#ifeq:|yes|{{#if:Test Infobox|Test Infobox}}}}{{#if:|{{#if: |
|{{#if:
|{{#if: | }} }} }}{{#if:|{{#if: |
|{{#if:{{{subheader2}}}
|{{#if: | }} }} }}{{#if:|{{#if: |
|{{#if:{{{image1}}} {{#if:|
{{{caption1}}}}}
|{{#if: | }} }} }}{{#if:|{{#if: |
|{{#if:{{{image2}}}{{#if:|
{{{caption2}}}}}
|{{#if: | }} }} }}{{#if: |
|{{#if:Data 1
|{{#if:Label 1 | }} }}{{#if: |
|{{#if:Data 2
|{{#if:Label 2 | }} }}{{#if: |
|{{#if:Data 3
|{{#if:Label 3 | }} }}{{#if:Header 4 |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:Data 5: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|{{#if:Label 5 | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if: |
|{{#if:
|{{#if: | }} }}{{#if:Below text|}}{{#if:Infobox/doc|}} {{#ifeq:|yes||
Test Infobox
{{{above}}}
{{{label}}} |
 }}
{{{data}}}
{{{header}}}
{{{label}}} |
 }}
{{{header}}}
{{{label}}} |
 }}
{{{subheader2}}}
{{{header}}}
{{{label}}} |
 }}
{{{image1}}} {{#if:|
{{{caption1}}}}}
{{{header}}}
{{{label}}} |
 }}
{{{image2}}}{{#if:|
{{{caption2}}}}}
Label 1 |
 }}
Data 1
Label 2 |
 }}
Data 2
Label 3 |
 }}
Data 3
Header 4
|
 }}
Label 5 |
 }}
Data 5: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
|
 }}
Below text
{{#if:1||This box: }}{{#if:|[}}[[{{#switch:
|#default = Infobox/doc 
| = 
   {{#ifeq:  | 
     | Template:Infobox/doc            
     | Infobox/doc      
   }}

}}|{{#if:1|v|view}}]] · [[|{{#if:1|d|talk}}]]{{#if:|| · [{{fullurl:{{#switch:

|#default = Infobox/doc 
| = 
   {{#ifeq:  | 
     | Template:Infobox/doc            
     | Infobox/doc      
   }}
}}|action=edit}} {{#if:1|e|edit}}]}}
{{#if:|]}}
}}{{#switch:¬
|¬|no       = 
||force|yes = Template:Italic title

}}


The MT9V032 sensor at the heart off the CaspaPX is not yet supported in the kernel, so a little work is necessary to get the camera up and running.

OMAP35x processors have dedicated hardware for capturing and processing data from image sensors. The CaspaPX camera sensor outputs raw 10-bit Bayer images which is transfered to the Image Signal Processor (ISP) via a parallel interface. The ISP contains various submodules that can be exported as Video for Linux (V4L2) devices in /dev. For additional hardware information see the external links section.

Error creating thumbnail: Unable to save thumbnail to destination

Quickstart

The first steps are important to verify your hardware setup and to test your customizations later. (TODO:what are you trying to say with this sentence?)

Install Pre-built Kernel

The easiest way to get started is to replace the kernel and modules of an existing image. This was tested on an Overo Fire with a Tobi expansion board using the desktop image available here.

Get the kernel and modules.

$ mkdir ~/caspakernel
$ cd ~/caspakernel
$ wget http://cumulus.gumstix.org/images/caspapx/uImage-2.6.34-r100-overo.bin
$ mv uImage-2.6.34-r100-overo.bin uImage
$ wget http://cumulus.gumstix.org/images/caspapx/modules-2.6.34-r100-overo.tgz

Extract the modules.

$ tar -xzf modules-2.6.34-r100-overo.tgz

Copy to a bootable microSD card.

$ cp -r lib /media/mmcblk0p2
$ cp uImage /media/mmcblk0p1/uImage
$ cp uImage /media/mmcblk0p2/boot/uImage

Alternatively, if you have a network connection, you can copy the files without removing the microSD.

$ scp -r lib root@overo:/
$ scp uImage root@overo:/boot/uImage
$ scp uImage root@overo:/media/mmcblk0p1/uImage
$ ssh root@overo 'depmod; shutdown -r now'

(should this be 'depmod -a'?)

Test

From the serial console:

# export DISPLAY=:0.0
# gst-launch v4l2src ! xvimagesink
or
# mplayer tv:// -tv driver=v4l2:device=/dev/video0

From the desktop:

<left-click> Applications > Multimedia > Cheese

If video0 doesn't appear in /dev you might have to load the driver manually.

# depmod
# modprobe omap34xxcam
# modprobe mt9v032

Bitbake

You can build the kernel and modules using bitbake. This allows you to incorporate the kernel with camera drivers into an image of your design.

$ bitbake linux-omap3-caspapx

The kernel and modules will appear in ~/overo-oe/tmp/deploy/glibc/images/overo

Customization

This section describes how to customize the camera driver and kernel for your needs.

2.6.34

Get the kernel source that is used in the Gumstix kernel recipe (~/overo-oe/org.openmebedded.dev/recipes/linux/linux-omap3_2.6.34.bb) and create a new branch from the recipe SRCREV.

$ cd ~
$ git clone git://www.sakoman.com/git/linux-omap-2.6.git
$ cd linux-omap-2.6
$ git checkout -b 2.6.34 cb89736af28f583598e49a05249334a194d00f1d

Get the patch and defconfig

$ wget http://cumulus.gumstix.org/sources/mt9v032-2.6.34.patch
$ wget http://cumulus.gumstix.org/sources/mt9v032-2.6.34.defconfig
$ patch -p1 < mt9v032-2.6.34.patch
$ cp mt9v032-2.6.34.defconfig .config

(Why make people patch? Just provide the good defconfig.)

Add the cross compiler to your path and configure the kernel. The cross compiler location depends on the architecture of your build machine. If you haven't done so yet, you'll need to set up your build environment.

Build the console image. This will ensure that the cross compiler, binutils, and libraries need to compile the kernel are installed.

$ bitbake omap3-console-image

Add the cross tools to your path.

32-bit processors
$ export PATH=/home/<username>/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin:${PATH} 
64-bit processors $ export PATH=/home/<username>/overo-oe/tmp/sysroots/x86_64-linux/usr/armv7a/bin:${PATH}

Ensure that the following modules are enabled

$ make ARCH=arm menuconfig
-> System Type
 -> OMAP34xx Based System 
-> Device Drivers
 -> Multimedia support (must be built-in)
  -> Video For Linux (must be built-in)
  -> Video capture adapters (must be built-in)
   -> SoC camera support
    -> OMAP 3 Camera support
    -> mt9v032 support

(Please list the 'CONFIG_' options that are changed.)

Build kernel and modules

$ make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage
$ make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- modules

Install modules

$ mkdir ~/linux-omap-2.6/modules
$ make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- INSTALL_MOD_PATH=./modules modules_install

Other Kernel Versions

The ISP code used for the 2.6.34 patch came from the arago-project. This is the OMAP3 PSP kernel integration/staging tree

$ git remote add git://arago-project.org/git/projects/linux-omap3.git aragoOMAP3 PSP kernel integration/staging tree
$ git fetch arago
$ git checkout -b arago

The V4L2 subdevice framework offers a way to configure the Image Signal Processor pipeline from userspace. This is currently under active development and users wishing to make use of this should visit the Media controller development repository here. This contains the bleeding edge Video for Linux media framework, ISP, and MT9V032 drivers.

MT9V032 Driver

If you want to take advantage of an unimplemented sensor feature, change defaults, etc., you need to modify the driver source. First, make sure that you change your kernel configuration to build the MT9V032 as a module unless you're only making a minor change. This will allow you to test your changes

Here is a convenient script for updating the driver after you've made a change:

#! /bin/bash 
target_overo="root@10.0.1.15" make -j8 ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- modules ssh $target_overo 'rmmod mt9v032' scp drivers/media/video/mt9v032.ko $target_overo:/lib/modules/2.6.34/kernel/drivers/media/video/ ssh $target_overo 'modprobe mt9v032'

Image Signal Processor

There is some code that you can't modularize and modifying means rebuilding the kernel. Such is the case for the ISP code which is used by board-overo.c for hardware configuration. Another script like that in the previous section can be very useful.

This script rebuilds the kernel, copies it to the COM, and resets:

#! /bin/bash 
target_overo="root@10.0.1.15" make -j8 ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage; scp arch/arm/boot/uImage $target_overo:/boot/uImage; scp arch/arm/boot/uImage $target_overo:/media/mmcblk0p1/uImage ssh $target_overo 'shutdown -r now'

($TARGET_OVERO may be clearer than $target_overo) This is useful for adjusting the filters, white balance, and color blending coefficients used by the ISP preview module. The preview module is used for doing hardware conversion from 10-bit Bayer to YUV. If you are having color problems - especially under certain lighting conditions but not others - look at isppreview.c and the gamma correction tables in drivers/media/video/isp/

External Links

OMAP35x Technical Reference Manual

MT9V032 Datasheet

CaspaPX CAD files