How to set up an IGEP-v2 with a DoubleSight DS-70U 7in USB DisplayLink LCD Panel

This document describes how to compile the kernel modules and libdlo software for an IGEP-v2, for use with a DoubleSight DS-70U LCD Screen and other DisplayLink USB products


Status:


Introduction

As part of evaluating products and components for the Home-brew Phone
Desktop PC Appliance project, DoubleSight's LCD panels and Plugable UD-160-A
Universal Docking Station products have been chosen for the reasonable cost and
features.

Whilst the software is still being tweaked to be user-friendly, it's still
worthwhile describing what's been achieved so far because one of the startling
findings is that the IGEP-v2 is capable of powering the DS-70U directly from
its USB2 Host port with no need for a powered USB hub!

IGEPv2 Software

You will need the Kernel Sources (registration required due to spam attacks).
Also you will need the u-boot sources, because ISEE have added IGEP-v2 as
a platform, but the code is not yet in the standard u-boot distribution.

On Debian, obtain the cross-compiler: you can stop at
apt-get install gcc-4.3-arm-linux-gnueabi because you will not need the g++
compiler (get it if you realllly want to).

Then, cross-compile up u-boot but follow these commands to do it:

    $ export CROSS_COMPILE=arm-linux-gnueabi-
    $ make
    $ make clean
    $ make omap3_igep0020b_config
    $ make -j2

What you then need to do is copy mkimage somewhere to an accessible location
under the PATH.  /usr/local/bin will do.  But, you also need to name it so
that the cross-compile process will pick it up - so try this:

    $ cp ./tools/mkimage /usr/local/bin/arm-linux-gnueabi-mkimage

Then, following the IGEPv2 Cross-Compile Instructions but remember to
modify the CROSS-COMPILE argument to say "CROSS_COMPILE=arm-linux-gnueabi-"
in order to use the Debian compiler, rather than something random.

Finally, to produce the uImage script, you can rely on the fact that
uImage support is now in the 2.6.28 and above kernel trees, and the fact
that the renamed u-boot mkimage program is now in the right place:

    $ make -j3 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage

This will happily run /usr/local/bin/arm-linux-gnueabi-mkimage (or wherever
you decided to put it) and create a suitable u-boot-able kernel.

Finally, copy everything onto the (Standard IGEP-v2 Ubuntu precompiled)
SD-Card (taking a backup first):

    $ mount /dev/mmcblk0p1 /mnt/card
    $ mount /dev/mmcblk0p2 /mnt/card2
    $ cd /mnt/card
    $ mkdir orig
    $ cp * orig
    $ cp {igep.2.6.28.10}/arch/arm/boot/uImage uImage-2.6.28.10-igep0020b-1.bin
    $ cd /mnt/card2
    $ cd lib/modules
    $ mv 2.6.28.10 2.6.28.10-orig
    $ cd {igep.2.6.28.10}
    $ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- modules_install \
           INSTALL_MOD_PATH=/mnt/card2
    $ sync
    $ umount /mnt/card
    $ umount /mnt/card2

Congratulations, you now have all-important precompiled kernel sources,
headers etc., and a properly-compiled and installed kernel.  Test it if
you like, and repeat until success.

Cross-Compiling udlfb

Key to making this successfully work is to modify the udlfb Makefile to
use the standard kernel CROSS_COMPILE environment variables, as well as
point it at the {igep.2.6.28.10} source code directory.  Modify the
obvious line to this:

    ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- $(MAKE) -C \
         {igep.2.6.28.10} SUBDIRS=$(PWD) modules

If you prefer, take a copy, call it Makefile.arm, and issue the command
make -f Makefile.arm instead of make.

But - and this is where it all goes a bit pear-shaped, you'll need to
ensure that the version of udlfb you're using can cope!  Here is a patch
which should help kick things along, but do check because Bernie is quite good
about adding things into the sources.

That should be it!  You should, after make, have the module compiled.
Boot the IGEP-v2, copy it to /lib/modules/2.6.28.10 somewhere, and run depmod -a

Compiling displaylink xf86 module

Cross-compiling has not been attempted, and will not be: the reader is on
their own, there.  It has been found that compiling the displayling xorg
module was perfectly fine actually on the 600mhz IGEP-v2 under the Ubuntu
Image; all that was required was "apt-get build-essential" and
"apt-get install xorg-dev" and the driver could then be built on the
actual IGEP-v2 as if this was a standard linux system (which, in fact, it is!)

Welcome to the days where embedded systems are catching up with technology
from 8 years ago, very very quickly...

As for the rest, you can now proceed from the standard libdlo wiki,
paying attention to "Device Quirks", "Multi-Seat" configuration etc. etc.

Independent Testing with libdlo

If you like, and/or if you get into difficulties, you can test whether
the device is working, without having to compile up a new kernel, by using
libdlo.  Under ubuntu on the IGEP-v2, simply run
"apt-get install build-essential" and "apt-get install libusb-dev",
and then you can compile libdlo directly on the device.  cd to the test
subdirectory and run the test1 application.