Linux on the Glyn Tonga2 (Toshiba TMPA900, ARM9)

From Random Projects
Jump to: navigation, search

This is a short HOWTO for using Linux on the Glyn Tonga2 SO-DIMM CPU Module, which features a Toshiba TMPA900 (ARM9) microcontroller/CPU and additional chips for Ethernet, DDR SDRAM, and NAND flash.

Hardware specs

Glyn Tonga2 SO-DIMM CPU module

  • CPU: Toshiba TMPA900CMXBG (ARM9, 32-bit RISC with MMU, ARM926EJ-S, little endian, max. 200MHz, built-in RAM/ROM: 32/16kB)
    • Integrated TFT controller (max. 800x480 with hardware acceleration, max. 1024x1024 without hardware acceleration)
    • High-speed USB 2.0 device (480Mbps), full-speed USB 2.0 host (12Mbps, OHCI 1.0a)
    • 3x UART, 2x SPI, SD card (SD host), 2x I2C, timer (16 bit, 6 channels), PWM, keypad, 2x I2S (digital audio), 4/5 wire touch screen, ADC (10-bit, 8 channels), RTC/melody, watchdog, JTAG, CMOS camera interface (CMSI)
  • DDR SDRAM: Hynix H5MS5162DFR-J3M (64Mbyte, x16, 1.8V, 166/83MHz at CL3/2)
  • NAND flash: Samsung K9F2G08U0B-PIB0 (256M x 8 Bit, 3.3V)
  • Ethernet: SMSC LAN9221I-ABZJ (10/100Mbps, MAC+PHY, 16 bit interface, non-PCI)
  • Form factor: SO-DIMM (144 pins)

Glyn Graphic Base Board

This is Glyn's reference development board, where the SO-DIMM CPU module can be inserted.

  • Ethernet connector
  • USB host and USB device connector
  • RS232 connector
  • SD card connectors (1x SD host, 1x connected via SPI)
  • 20pin standard ARM JTAG connector
  • Wolfson WM8983 audio codec
  • Glyn TFT concept connector for 3.5"—7" TFTs
  • Various pin headers / breakouts where you can attach external hardware

Photos

TODO

Building an arm-linux toolchain and root filesystem using buildroot

First install some requirements, in case you don't have them already:

$ apt-get install build-essential bison flex gettext libncurses-dev git-core subversion

Then get the buildroot source code from the git repo:

$ cd $HOME
$ git clone git://git.buildroot.net/buildroot buildroot-git
$ cd buildroot-git

Configure buildroot, select the target architecture, toolchain, and packages you want to build:

$ make menuconfig

I used the following settings (some are required, others are optional, depends a lot on your needs):

  • Target arch: arm
  • Target arch variant: arm926t
  • Target ABI: EABI (this is the default anyway)
  • Toolchain:
    • Toolchain type: Buildroot toolchain (this is the default anyway)
    • Kernel Headers: Linux 2.6.38.x kernel headers (the version here must match the kernel version you'll use on the board, otherwise stuff could break, e.g. tslib)
    • GCC compiler Version: gcc 4.6.x (default is gcc 4.3.x, but the newer 4.6.x version works fine too)
    • Purge unwanted locales (leave only "C en_US" selected, this saves a lot of space)
    • Enable large file (files > 2 GB) support (needed for some packages)
    • Enable IPv6 support (needed for some packages)
    • Enable WCHAR support (needed for some packages)
    • Enable C++ support
  • Package selection:
    • BusyBox (already selected, this is the bare minimum you need)
    • Graphic libraries and applications (graphic/text) / Libraries:
      • directfb, SDL, Qt, cairo, gdk-pixbuf, gtk2, others (if you want to write graphical programs for the board)
    • Hardware handling:
      • mtd/jffs2 utilities (useful for NAND utilities in the Linux system later)
      • u-boot tools (for fw_printenv)
    • Networking applications:
      • lrzsz (I'm using the zx tool from this package to transfer files to the target via serial console + minicom; you can also use other means though, e.g. USB, SD card, ethernet/TFTP/scp/whatever)
  • Filesystem images:
    • jffs2 root filesystem
      • Flash Type: NAND flash with 2kB Page and 128 kB erasesize (the default is incorrect for this board)
      • Pad output (otherwise the respective nand write command in U-Boot will fail later on)
      • Produce a summarized JFFS2 image (apparently this speeds up boot time a bit, if your kernel supports "summarized" JFFS2 images, which it will).
    • You can un-select tar the root filesystem, it's not needed if you just write JFFS2 images to NAND flash, like I do.
    • ubifs root filesystem is another option you might want to look into, it's the successor to JFFS2 and has some advantages; I haven't tested it yet, though.
  • Do not select anything in "Bootloaders" or "Kernel", we'll build those independently later.

Save the settings and exit menuconfig, then build all the stuff:

$ make

The resulting rootfs.jffs2 file is what you can write to NAND flash later; it's located in the output/images directory.

The arm-linux toolchain which was built, is located in output/host/usr/bin etc.

Random hints and notes

  • If you get build errors for "microperl", this fix should help (wasn't needed in the latest git version of buildroot anymore, though).
  • If you get a strange build error in ftl_format (part of mtd-utils), this is likely a binutils/ld bug (PR ld/13195), which was fixed in current Debian unstable as of binutils 2.21.90.20111004-1. For easier googling, here's the error message:

/usr/bin/ld: /home/uwe/buildroot-2011.08/output/build/host-mtd-1.4.6/ftl_format: local symbol `_dl_argv@@GLIBC_PRIVATE' in /lib/i386-linux-gnu/ld-linux.so.2 is referenced by DSO
/usr/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status
make[1]: *** [/home/uwe/buildroot-2011.08/output/build/host-mtd-1.4.6/ftl_format] Error 1

Building U-Boot

Add the bin directory (where the toolchain you built above resides) to your $PATH:

$ export PATH=$PATH:~/buildroot-git/output/host/usr/bin

Get the U-Boot source code (a patched version for tmpa9xx) via git:

$ git clone git://git.labs.kernelconcepts.de/u-boot-tmpa9xx.git
$ cd u-boot-tmpa9xx

Configure and build U-Boot:

$ make tonga2_config
$ make CROSS_COMPILE=arm-linux-
[...]
arm-linux-objcopy -O srec u-boot u-boot.srec
arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
Generating Tonga2 board NAND Flash image
all done

Building the Linux kernel

Add the bin directory (where the toolchain you built above resides) to your $PATH (if you haven't done so already):

$ export PATH=$PATH:~/buildroot-git/output/host/usr/bin

Install some more required packages:

$ apt-get install lzop u-boot-tools

Grab the Linux source code from the respective repository:

$ git clone git://git.labs.kernelconcepts.de/topas.git
$ cd topas

Configure and build the kernel (you'll build a uImage for use with U-Boot):

$ make tonga_defconfig ARCH=arm
$ make menuconfig ARCH=arm
$ make uImage ARCH=arm CROSS_COMPILE=arm-linux-
[...]
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-2.6.38+
Created:      Thu Oct  6 11:13:21 2011
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2444056 Bytes = 2386.77 kB = 2.33 MB
Load Address: 40008000
Entry Point:  40008000

At the "menuconfig" stage you can configure the kernel to your needs as you see fit.

The resulting arch/arm/boot/uImage file will be written to NAND flash later on.

Using U-Boot via serial/TFTP to flash a kernel/uImage to NAND

In order to transfer files into the board's (DDR) RAM via U-Boot, and using TFTP (i.e., via the Ethernet connector), you'll need to setup a TFTP server on your host first:

$ apt-get install tftpd
$ mkdir /src/tftp

Every file located in /src/tftp will be accessible via TFTP. For now, copy the uImage file you built above into that directory.

Assuming you already have a U-Boot bootloader installed on the target board, you can attach a null-modem cable to the serial port and use a terminal program (e.g. minicom) on the host to connect to U-Boot. The terminal settings are 115200 8n1 per default. The minicom config file can look something like this:

$ cat /etc/minicom/minirc.tonga2
pu port             /dev/ttyS0
pu baudrate         115200
pu rtscts           No

Start minicom via:

$ minicom -o tonga2

Reset the board and then press a key in the serial terminal to prevent U-Boot from booting a kernel; instead you'll be shown the U-Boot prompt.

On the target, we'll first setup the board's IP address (192.168.0.34 here) and the IP address of your TFTP server (192.168.0.32 here), and save those settings:

U-Boot> setenv ipaddr 192.168.0.34
U-Boot> setenv serverip 192.168.0.32
U-Boot> saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x60000 -- 100% complete.
Writing to Nand... done

Then, get the Linux kernel (uImage) via TFTP:

U-Boot> tftp uImage
smc911x: detected LAN9221 controller
smc911x: phy initialized
smc911x: MAC 00:11:22:44:55:66
Using smc911x-0 device
TFTP from server 192.168.0.32; our IP address is 192.168.0.34
Filename 'uImage'.
Load address: 0x40600000
Loading: #################################################################
         #################################################################
         [...]
         #######################
Bytes transferred = 2061008 (1f72d0 hex)

Then erase the "kernel" partition in the NAND flash:

U-Boot> nand erase.part kernel
NAND erase.part: device 0 offset 0x3a0000, size 0x300000
Erasing at 0x680000 -- 100% complete.
OK

Finally, write the uImage from RAM into the "kernel" partition in the NAND flash:

U-Boot> nand write ${fileaddr} kernel
NAND write: device 0 offset 0x3a0000, size 0x300000
 3145728 bytes written: OK

Note: Do not replace "${fileaddr}" with a number here, that's a U-Boot environment variable which gets automatically set to the correct value after the TFTP file transfer.

Using U-Boot via serial/TFTP to flash a root filesystem to NAND

We're assuming that you already setup a TFTP server and configured the server/client IP addresses in U-Boot (and saved them via saveenv), see above.

Now, get the root filesystem via TFTP:

U-Boot> tftp rootfs.jffs2
smc911x: detected LAN9221 controller
smc911x: phy initialized
smc911x: MAC 00:11:22:44:55:66
Using smc911x-0 device
TFTP from server 192.168.0.32; our IP address is 192.168.0.34
Filename 'rootfs.jffs2'.
Load address: 0x40600000
Loading: T #################################################################
         #################################################################
         [...]
         #################################
done
Bytes transferred = 32112640 (1ea0000 hex)

Erase the "rootfs" partition in the NAND flash:

U-Boot> nand erase.part rootfs
NAND erase.part: device 0 offset 0x6a0000, size 0xf960000
Skipping bad block at  0x05280000                                          
Skipping bad block at  0x09040000                                          
Skipping bad block at  0x0ad40000                                          
Skipping bad block at  0x0b080000                                          
Skipping bad block at  0x0caa0000                                          
Skipping bad block at  0x0ff80000                                          
Skipping bad block at  0x0ffa0000                                          
Skipping bad block at  0x0ffc0000                                          
Skipping bad block at  0x0ffe0000                                          
OK

Finally, write the rootfs.jffs2 file from RAM into the "rootfs" partition in the NAND flash:

U-Boot> nand write ${fileaddr} rootfs ${filesize}
NAND write: device 0 offset 0x6a0000, size 0x1ea0000
 32112640 bytes written: OK

Note: Do not replace "${fileaddr}" or "${filesize}" with a number here, those are U-Boot environment variables which get automatically set to the correct value after the TFTP file transfer.

Note: The root filesystem file must be smaller than roughly 60 MB (DDR RAM size is 64MB, and some of it is used by U-Boot itself).

Using U-Boot via serial/TFTP to flash an updated U-Boot to NAND

Assuming you already have a U-Boot bootloader installed on the target board, you can upgrade to another version of U-Boot like this:

First, on the host, make the U-Boot image (u-boot_nand_tonga2.bin) accessible via TFTP:

$ cp u-boot_nand_tonga2.bin /srv/tftp

Then, on the target, get the U-Boot image via TFTP:

U-Boot> tftp u-boot_nand_tonga2.bin
smc911x: detected LAN9221 controller
smc911x: phy initialized
smc911x: MAC 00:11:22:44:55:66
Using smc911x-0 device
TFTP from server 192.168.0.32; our IP address is 192.168.0.34
Filename 'u-boot_nand_tonga2.bin'.
Load address: 0x40600000
Loading: T #################################################################
         ##########
done
Bytes transferred = 379012 (5c884 hex)

Erase the "u-boot" partition in the NAND flash:

U-Boot> nand erase.part u-boot
NAND erase.part: device 0 offset 0x0, size 0x80000
Erasing at 0x60000 -- 100% complete.
OK

Finally, write the new U-Boot image from RAM into the "u-boot" partition in the NAND flash:

U-Boot> nand write ${fileaddr} u-boot
NAND write: device 0 offset 0x0, size 0x80000
 524288 bytes written: OK

Note: Do not replace "${fileaddr}" with a number here, that's a U-Boot environment variable which gets automatically set to the correct value after the TFTP file transfer.

You can now reset the board and the new U-Boot will be started from NAND flash (press a key to get into the U-Boot console):

U-Boot 2011.03 (Oct 15 2011 - 23:41:04)

DRAM:  64 MiB
NAND:  256 MiB
No dynamic environment marker in OOB block 0
Bad block table found at page 131008, version 0x01
Bad block table found at page 130944, version 0x01
nand_read_bbt: Bad block at 0x000005280000
nand_read_bbt: Bad block at 0x000009040000
nand_read_bbt: Bad block at 0x00000ad40000
nand_read_bbt: Bad block at 0x00000b080000
nand_read_bbt: Bad block at 0x00000caa0000
Net:   smc911x-0
Hit any key to stop autoboot:  0 
U-Boot>

JTAG

JTAG/OpenOCD setup

If you don't already have a U-Boot installed in NAND flash (or you "bricked" it), you can flash a new U-Boot to NAND via JTAG, e.g. using the OpenOCD tool. Replace myjtag.cfg below with whatever interface config file is the correct one for your (OpenOCD-supported) JTAG adapter.

Note: You need a pretty recent OpenOCD version, the Glyn Tonga2 board config file I submitted was merged Oct 14, 2011.

$ openocd -f interface/myjtag.cfg -f board/glyn_tonga2.cfg -c 'adapter_khz 3000'
Open On-Chip Debugger 0.6.0-dev-00118-g2d4bdb9 (2011-10-16-23:04)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
adapter_nsrst_delay: 20
jtag_ntrst_delay: 20
tonga2_init
3000 kHz
Info : max TCK change to: 30000 kHz
Info : clock speed 3000 kHz
Info : JTAG tap: tmpa900.cpu tap/device found: 0x07926031 (mfg: 0x018, part: 0x7926, ver: 0x0)
Info : Embedded ICE version 6
Info : tmpa900.cpu: hardware has 2 breakpoint/watchpoint units
Info : accepting 'telnet' connection from 4444
Info : JTAG tap: tmpa900.cpu tap/device found: 0x07926031 (mfg: 0x018, part: 0x7926, ver: 0x0)

In another xterm/console you can now use e.g. telnet to issue OpenOCD commands, starting with reset halt to reset and stop the CPU:

$ telnet 127.0.0.1 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> reset halt
JTAG tap: tmpa900.cpu tap/device found: 0x07926031 (mfg: 0x018, part: 0x7926, ver: 0x0)
target state: halted
target halted in ARM state due to breakpoint, current mode: Supervisor
cpsr: 0x000000d3 pc: 0x00000000
MMU: disabled, D-Cache: disabled, I-Cache: disabled
NOTE! DCC downloads have not been enabled, defaulting to slow memory writes. Type 'help dcc'.
NOTE! Severe performance degradation without fast memory access enabled. Type 'help fast'.

A few other commands you can run to test the JTAG connection:

> scan_chain
   TapName             Enabled  IdCode     Expected   IrLen IrCap IrMask
-- ------------------- -------- ---------- ---------- ----- ----- ------
 0 tmpa900.cpu            Y     0x07926031 0x07926031     4 0x01  0x0f

> targets
    TargetName         Type       Endian TapName            State
--  ------------------ ---------- ------ ------------------ ------------
 0* tmpa900.cpu        arm926ejs  little tmpa900.cpu        halted

> tmpa900.cpu curstate
halted

> arm926ejs cache_info
cache type: 0xe, separate caches
D-Cache: linelen 32, associativity 4, nsets 128, cachesize 0x4000
I-Cache: linelen 32, associativity 4, nsets 128, cachesize 0x4000

JTAG/OpenOCD performance

Here's a quick comparison of the speed of a load_image command in OpenOCD with various JTAG adapters, adapter_khz values, and other settings.

TODO.

Using JTAG/OpenOCD to flash U-Boot to NAND

You can now run the tonga2_init code/function which will set up the PLL/clocks, SRAM, and DDR SDRAM.

> tonga2_init

After that, you can load a U-Boot RAM image (u-boot.bin, the u-boot_nand_tonga2.bin image will not work!) to address 0x43f00000 in the DDR SDRAM and run it from there:

> load_image u-boot.bin 0x43f00000
259384 bytes written at address 0x43f00000
downloaded 259384 bytes in 9.265533s (27.338 KiB/s)
> resume 0x43f00000

At this point you should see the usual serial output of U-Boot on the serial console. Press a key to get into the U-Boot console.

Note: It's important to load the U-Boot image to 0x43f00000, you cannot load it to arbitrary addresses and run it from there, that will not work. The address may or may not always be the same, but you can check what the correct address is after you built U-Boot from the sources:

$ grep " _start$" u-boot.map
0x0000000043f00000                _start

As soon as you have a U-Boot running in RAM you can use that to grab a U-Boot NAND image (e.g. via TFTP or via YMODEM or Kermit) and write that to NAND flash (see above for details):

U-Boot> tftp u-boot_nand_tonga2.bin
U-Boot> nand erase.part u-boot
U-Boot> nand write ${fileaddr} u-boot

Reset the board by pressing the reset button (or typing reset in the U-Boot console) to start with the new U-Boot from NAND.

Note: If the NAND flash (or at least the U-Boot environment part) is empty, the U-Boot in RAM will run a series of "setup" commands on the first run (nand bad; dynpart; nand env.oob set u-boot_env; setenv setup; setenv preboot; saveenv; reset), and then reset the board. However, as we didn't get a chance to write a U-Boot NAND image to NAND flash during that first run, we have to do the above JTAG/OpenOCD procedure again to init the SDRAM, write u-boot.bin to SDRAM and start it. In this second run, u-boot_env is already set up correctly, thus we can enter the U-Boot console normally as described above.

Resetting the U-Boot environment

U-Boot stores its configuration in the u-boot_env part of the NAND flash. In order to erase that (which will revert to the built-in defaults) run this command:

U-Boot> nand erase.part u-boot_env
NAND erase.part: device 0 offset 0x80000, size 0x20000
Erasing at 0x80000 -- 100% complete.
OK

Configuring the U-Boot environment and display settings

You can set the Ethernet MAC address via:

U-Boot> setenv ethaddr 11:11:11:11:11:11
U-Boot> saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x80000 -- 100% complete.
Writing to Nand... done

Depending on the TFT you use, you have to set up the correct videoparams environment variable. You can use the online display-settings calculator from kernel-concepts to calculate the correct values. In my specific case the correct settings are:

U-Boot> setenv videoparams video=tmpa9xxfb:4b3580c4:210a09df:031f2802:0x00010828
U-Boot> saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x80000 -- 100% complete.
Writing to Nand... done

Note: The calculator is a bit outdated at the moment, it only outputs three values instead of the four values required for recent Linux kernels. For a 16bit display from the Glyn TFT family you can use 0x00010828 as the fourth value (see above).

Alternatively, newer kernels also support pre-defined values such as qvga (320x240), wqvga (480x272), vga (640x480), or wvga (800x480):

U-Boot> setenv videoparams video=tmpa9xxfb:wvga
U-Boot> saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x80000 -- 100% complete.
Writing to Nand... done

Use the arm-linux toolchain for writing/cross-compiling programs

Add the bin directory (where the toolchain you built above resides) to your $PATH (if you haven't done so already):

$ export PATH=$PATH:~/buildroot-git/output/host/usr/bin

If you want to cross-compile other programs you need to tell the respective build system to use the arm-linux-* cross-toolchain, not the standard host gcc/g++/ld.

For example, you can build/cross-compile simple C programs by hand like this:

$ arm-linux-gcc helloworld.c -o helloworld

The resulting binary file is correctly cross-compiled for the ARM platform:

$ file helloworld
helloworld: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

Most Makefile based C programs can probably be built like this:

$ make CC=arm-linux-gcc

Most autoconf/automake/libtool based programs can be built like this:

$ ./configure --host=arm-linux CC=arm-linux-gcc && make

Board info

U-Boot

U-Boot> version
U-Boot 2011.03 (Oct 15 2011 - 23:41:04)
arm-linux-gcc (Buildroot 2011.11-git-00241-gbde4564) 4.6.1
GNU ld (GNU Binutils) 2.21.1
U-Boot> printenv
baudrate=115200
bootargs=console=ttyS0,115200n8 consoleblank=0 root=/dev/mtdblock4 rootfstype=jffs2 mtdparts=tmpa9xx-nand:0x00080000(u-boot), \
         0x00020000(u-boot_env),0x00300000(splash),0x00300000(kernel),0x0f960000(rootfs) \
         video=tmpa9xxfb:19211e4c:10040cef:013f380d:00010828 ethaddr=00:11:22:44:55:66
bootargs_base=setenv bootargs console=ttyS0,115200n8 consoleblank=0 ${rootfs} ${mtdparts} ${videoparams} ethaddr=${ethaddr}
bootcmd=run rootfs_base;run bootargs_base; nboot kernel; bootm
bootdelay=1
ethact=smc911x-0
ethaddr=00:11:22:44:55:66
ipaddr=192.168.0.34
mtddevname=u-boot
mtddevnum=0
mtdids=nand0=tmpa9xx-nand
mtdparts=mtdparts=tmpa9xx-nand:0x00080000(u-boot),0x00020000(u-boot_env),0x00300000(splash),0x00300000(kernel),0x0f960000(rootfs)
partition=nand0,0
rootfs=root=/dev/mtdblock4 rootfstype=jffs2
rootfs_base=setenv rootfs ${rootfs_jffs2}
rootfs_jffs2=root=/dev/mtdblock4 rootfstype=jffs2
rootfs_ubifs=ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs
serverip=192.168.0.32 
stderr=serial
stdin=serial
stdout=serial
update_kernel_dhcp=dhcp uImage-tonga2; nand erase.part kernel; nand write ${fileaddr} kernel
update_kernel_tftp=tftp uImage-tonga2; nand erase.part kernel; nand write ${fileaddr} kernel
update_rootfs_dhcp=dhcp rootfs       ; nand erase.part rootfs; nand write ${fileaddr} rootfs ${filesize}
update_rootfs_tftp=tftp rootfs       ; nand erase.part rootfs; nand write ${fileaddr} rootfs ${filesize}
verify=n
videoparams=video=tmpa9xxfb:4b3580c4:210a09df:031f2802

Environment size: 1603/131068 bytes
U-Boot> mtdparts
device nand0 <tmpa9xx-nand>, # parts = 5                                        
 #: name                size            offset          mask_flags              
 0: u-boot              0x00080000      0x00000000      0                       
 1: u-boot_env          0x00020000      0x00080000      0                       
 2: splash              0x00300000      0x000a0000      0                       
 3: kernel              0x00300000      0x003a0000      0                       
 4: rootfs              0x0f960000      0x006a0000      0                       
                                                                                
active partition: nand0,0 - (u-boot) 0x00080000 @ 0x00000000                    
                                                                                
defaults:                                                                       
mtdids  : nand0=tmpa9xx-nand                                                    
mtdparts: none

Bootlog

Here's a bootlog of the device, including U-Boot and Linux kernel output.

U-Boot 2011.03 (Oct 15 2011 - 23:41:04)

DRAM:  64 MiB
NAND:  256 MiB
Found Environment offset in OOB..
Bad block table found at page 131008, version 0x01
Bad block table found at page 130944, version 0x01
nand_read_bbt: Bad block at 0x000005280000
nand_read_bbt: Bad block at 0x000009040000
nand_read_bbt: Bad block at 0x00000ad40000
nand_read_bbt: Bad block at 0x00000b080000
nand_read_bbt: Bad block at 0x00000caa0000
Net:   smc911x-0
Hit any key to stop autoboot:

Loading from nand0, offset 0x3a0000
   Image Name:   Linux-2.6.38+
   Created:      2011-10-15  23:14:51 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2043340 Bytes = 1.9 MiB
   Load Address: 40008000
   Entry Point:  40008000
## Booting kernel from Legacy Image at 40600000 ...
   Image Name:   Linux-2.6.38+
   Created:      2011-10-15  23:14:51 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2043340 Bytes = 1.9 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
[    0.000000] Linux version 2.6.38+ (uwe@limejuice) (gcc version 4.6.1 (Buildroot 2011.11-git-00241-gbde4564) ) #3 PREEMPT Sun Oct 16 01:14:47 CEST 2011
[    0.000000] CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
[    0.000000] CPU: VIVT data cache, VIVT instruction cache
[    0.000000] Machine: Tonga 2
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
[    0.000000] Kernel command line: console=ttyS0,115200n8 consoleblank=0 root=/dev/mtdblock4 rootfstype=jffs2 mtdparts=tmpa9xx-nand:0x00080000(u-boot),0x00020000(u-boot_env),0x00300000(splash),0x00300000(kernel),0x0f960000(rootfs) video=tmpa9xxfb:4b3580c4:210a09df:031f2802:0x00010828 ethaddr=00:11:22:44:55:66
[    0.000000] PID hash table entries: 256 (order: -2, 1024 bytes)
[    0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Memory: 64MB = 64MB total
[    0.000000] Memory: 61000k/61000k available, 4536k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     DMA     : 0xff600000 - 0xffe00000   (   8 MB)
[    0.000000]     vmalloc : 0xc4800000 - 0xe0000000   ( 440 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .init : 0xc0008000 - 0xc0026000   ( 120 kB)
[    0.000000]       .text : 0xc0026000 - 0xc039f000   (3556 kB)
[    0.000000]       .data : 0xc03a0000 - 0xc03c15a0   ( 134 kB)
[    0.000000] SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] Preemptable hierarchical RCU implementation.
[    0.000000] 	RCU-based detection of stalled CPUs is disabled.
[    0.000000] 	Verbose stalled-CPUs detection is disabled.
[    0.000000] NR_IRQS:45
[    0.000000] VIC @f4000000: id 0x00041192, vendor 0x41
[    0.000000] Console: colour dummy device 80x30
[    0.000000] Calibrating delay loop... 95.84 BogoMIPS (lpj=479232)
[    0.200000] pid_max: default: 32768 minimum: 301
[    0.200000] Mount-cache hash table entries: 512
[    0.200000] CPU: Testing write buffer coherency: ok
[    0.200000] devtmpfs: initialized
[    0.200000] decode_fpclk(): clock gear set to fc/1
[    0.210000] NET: Registered protocol family 16
[    0.250000] Serial: AMBA PL011 UART driver
[    0.250000] uart0: ttyS0 at MMIO 0xf2000000 (irq = 10) is a PL011 rev2
[    0.260000] console [ttyS0] enabled
[    0.260000] uart1: ttyS1 at MMIO 0xf2001000 (irq = 11) is a PL011 rev2
[    0.370000] bio: create slab <bio-0> at 0
[    0.380000] SCSI subsystem initialized
[    0.390000] ssp-pl022 tmpa9xx-spi0: ARM PL022 driver, device ID: 0x00041022
[    0.400000] pl022: mapped registers from 0xf2002000 to c482c000
[    0.400000] ssp-pl022 tmpa9xx-spi1: ARM PL022 driver, device ID: 0x00041022
[    0.410000] pl022: mapped registers from 0xf2003000 to c4830000
[    0.430000] usbcore: registered new interface driver usbfs
[    0.430000] usbcore: registered new interface driver hub
[    0.440000] usbcore: registered new device driver usb
[    0.450000] Advanced Linux Sound Architecture Driver Version 1.0.23.
[    0.580000] NET: Registered protocol family 2
[    0.590000] IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.600000] TCP established hash table entries: 2048 (order: 2, 16384 bytes)
[    0.600000] TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
[    0.610000] TCP: Hash tables configured (established 2048 bind 2048)
[    0.620000] TCP reno registered
[    0.620000] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    0.630000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    0.630000] NET: Registered protocol family 1
[    0.640000] RPC: Registered udp transport module.
[    0.640000] RPC: Registered tcp transport module.
[    0.650000] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.660000] tmpa9xx-adc tmpa9xx-adc: tmpa9xx adc driver registered, prescaler set to 2
[    0.780000] JFFS2 version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
[    0.790000] msgmni has been set to 119
[    0.800000] io scheduler noop registered
[    0.810000] io scheduler deadline registered
[    0.810000] io scheduler cfq registered (default)
[    0.820000] tmpa9xx-pwm tmpa9xx-pwm.1: channel 1, clk speed 32000 kHz
[    0.830000] tmpa9xx-clcd tmpa9xx-clcd: options from cmdline: 
[    0.830000] LCDTiming0: 0x4b3580c4
[    0.830000] LCDTiming1: 0x210a09df
[    0.830000] LCDTiming2: 0x031f2802
[    0.830000] LCDControl: 0x00010828
[    0.840000] tmpa9xx-clcd tmpa9xx-clcd: lcd_power @ 97, lcd_reset @ 96
[    0.870000] CLCD: tmpa9xx fb hardware, tmpa9xx-panel display
[    0.960000] Console: switching to colour frame buffer device 200x80
[    1.010000] tmpa9xx-lcdda tmpa9xx-lcdda: ready
[    1.020000] tmpa900-lcdcop tmpa900-lcdcop: default configuration activated
[    1.350000] loop: module loaded
[    1.360000] tmpa9xx-mldalm tmpa9xx-mldalm: TMPA9xx Melody/Alarm driver ready
[    1.370000] NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)
[    1.390000] 5 cmdlinepart partitions found on MTD device tmpa9xx-nand
[    1.400000] Creating 5 MTD partitions on "tmpa9xx-nand":
[    1.400000] 0x000000000000-0x000000080000 : "u-boot"
[    1.410000] 0x000000080000-0x0000000a0000 : "u-boot_env"
[    1.430000] 0x0000000a0000-0x0000003a0000 : "splash"
[    1.440000] 0x0000003a0000-0x0000006a0000 : "kernel"
[    1.460000] 0x0000006a0000-0x000010000000 : "rootfs"
[    1.480000] smsc911x: Driver version 2008-10-21.
[    1.490000] smsc911x-mdio: probed
[    1.500000] eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ffffffff:01, irq=-1)
[    1.510000] net eth0: MAC Address: 00:11:22:44:55:66
[    1.510000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    1.520000] tmpa9xx-usb tmpa9xx-usb: tmpa9xx OHCI
[    1.520000] tmpa9xx-usb tmpa9xx-usb: new USB bus registered, assigned bus number 1
[    1.530000] tmpa9xx-usb tmpa9xx-usb: irq 27, io mem 0xf4500000
[    1.600000] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[    1.610000] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.610000] usb usb1: Product: tmpa9xx OHCI
[    1.620000] usb usb1: Manufacturer: Linux 2.6.38+ ohci_hcd
[    1.620000] usb usb1: SerialNumber: tmpa9xx
[    1.630000] hub 1-0:1.0: USB hub found
[    1.640000] hub 1-0:1.0: 1 port detected
[    1.650000] Initializing USB Mass Storage driver...
[    1.650000] usbcore: registered new interface driver usb-storage
[    1.660000] USB Mass Storage support registered.
[    1.670000] tmpa9xx-udc version 10 Sep 2010
[    1.680000] g_ether gadget: using random self ethernet address
[    1.680000] g_ether gadget: using random host ethernet address
[    1.690000] usb0: MAC ca:ec:00:05:37:e6
[    1.690000] usb0: HOST MAC b2:bb:d2:19:0c:60
[    1.700000] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
[    1.710000] g_ether gadget: g_ether ready
[    1.710000] mousedev: PS/2 mouse device common for all mice
[    1.720000] input: TMPA9xx touchscreen driver as /devices/virtual/input/input0
[    1.730000] tmpa9xx-ts tmpa9xx-ts: TMPA9xx touchscreen driver ready, fuzz 16
[    1.750000] tmpa9xx-rtc tmpa9xx-rtc: rtc core: registered rtc_tmpa9xx as rtc0
[    1.750000] tmpa9xx-rtc tmpa9xx-rtc: ready, io @ c48e8000/c48ec200, irq 1
[    1.760000] i2c /dev entries driver
[    1.770000] tmpa9xx-i2c tmpa9xx-i2c.1: channel 1, irq 7, io @ c48f0000, speed 100 kHz
[    1.780000] sp805-wdt tmpa9xx-wdt: registration successful
[    1.790000] mmc_spi spi0.0: SD/MMC host mmc0, no WP, no poweroff, cd polling
[    1.800000] usbcore: registered new interface driver usbhid
[    1.810000] usbhid: USB HID core driver
[    1.820000] ALSA device list:
[    1.820000]   No soundcards found.
[    1.830000] IPv4 over IPv4 tunneling driver
[    1.850000] TCP cubic registered
[    1.850000] NET: Registered protocol family 17
[    1.890000] tmpa9xx-rtc tmpa9xx-rtc: setting system clock to 1982-07-11 15:48:57 UTC (395250537)
[    2.510000] Empty flash at 0x01e93420 ends at 0x01e93800
[    4.680000] VFS: Mounted root (jffs2 filesystem) on device 31:4.
[    4.700000] devtmpfs: mounted
[    4.710000] Freeing init memory: 120K
Starting logging: OK
Initializing random number generator... done.
Starting network...
Starting dropbear sshd: OK

Welcome to Buildroot
buildroot login:

Linux

$ uname -a
Linux buildroot 2.6.38+ #2 PREEMPT Sun Oct 16 01:00:02 CEST 2011 armv5tejl GNU/Linux
$ cat /proc/cpuinfo
Processor       : ARM926EJ-S rev 5 (v5l)
BogoMIPS        : 95.84
Features        : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 5

Hardware        : Tonga 2
Revision        : 0000
Serial          : 0000000000000000
$ lsusb
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
$ mount
rootfs on / type rootfs (rw)
/dev/root on / type jffs2 (rw,relatime)
devtmpfs on /dev type devtmpfs (rw,relatime,size=30500k,nr_inodes=7625,mode=755)
proc on /proc type proc (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,relatime,mode=777)
tmpfs on /tmp type tmpfs (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
$ cat /proc/fb
0 CLCD FB
$ cat /proc/interrupts
           CPU0
  1:          0         VIC  tmpa9xx_rtc
  4:      58636         VIC  TMPA9xx Timer Tick
  5:          1         VIC  tmpa9xx-ts-irq
  7:          0         VIC  tmpa9xx-i2c
  8:          0         VIC  tmpa9xx-adc
 10:       8179         VIC  uart-pl011
 12:     470936         VIC  pl022
 13:          0         VIC  pl022
 16:          0         VIC  DMA
 17:     157376         VIC  DMA
 18:          0         VIC  CLCD FB
 20:          0         VIC  tmpa9xx_lcdda
 21:          1         VIC  tmpa9xx-udc
 26:          0         VIC  gpio_r
 27:          1         VIC  ohci_hcd:usb1
 28:          0         VIC  gpio_n
 29:          0         VIC  gpio_f
 30:          0         VIC  gpio_c
 31:          0         VIC  gpio_a
 44:          0        gpio  eth0
Err:          0
$ cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00080000 00020000 "u-boot"
mtd1: 00020000 00020000 "u-boot_env"
mtd2: 00300000 00020000 "splash"
mtd3: 00300000 00020000 "kernel"
mtd4: 0f960000 00020000 "rootfs"
$ cat /proc/bus/input/devices
I: Bus=0019 Vendor=0000 Product=0000 Version=0100
N: Name="TMPA9xx touchscreen driver"
P: Phys=
S: Sysfs=/devices/virtual/input/input0
U: Uniq=
H: Handlers=mouse0 event0 
B: PROP=0
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=1000003

Resources