Completed Projects

Booting Linux

Many thanks to Nikolay Petukhov ! Thanks to his TT2 kernel, I first booted Linux on my Palm. I downloaded his 'garux_usb.prc' kernel (also here), took my favorite binary editor to transform the TT2 hardware check into a TT1 check and it booted perfectly ! (find the 1st '0x00 0x32' sequence and replace '0x32' by '0x31')

The palm once in its cradle, the CDCEther module should load and you will ping the Palm on I then telneted to it and played a little as you can see on the logs below. The only difference between the TT1 and the TT2 seems to have been detected properly: 16MB of RAM instead of 32MB.

My kernel, initrd, and sources are available here.

Notes: root password = root, you can mount NFS FS with 'mount /mnt -o nolock,nfsvers=2'

~ # cat /proc/version 
Linux version 2.6.11-omap1-palmtt2 (root@red.localdomain) (gcc version 3.4.4 20041218 (prerelease) (Debian 3.4.3-1)) #19 Tue Nov 1 20:20:35 CET 2005

~ # free
total used free shared buffers
Mem: 14456 2272 12184 0 0
Swap: 0 0 0
Total: 14456 2272 12184

~ # ps
PID Uid VmSize Stat Command
1 root 172 S init
2 root SWN [ksoftirqd/0]
3 root SW< [events/0]
4 root SW< [khelper]
9 root SW< [kthread]
16 root SW< [kblockd/0]
43 root SW [pdflush]
44 root SW [pdflush]
46 root SW< [aio/0]
45 root SW [kswapd0]
710 root 208 S /bin/sh /etc/init.d/rcS
713 root 220 S /bin/sh /etc/init.d/rcS
727 root 156 S /sbin/getty -L ttyS2 57600
728 root 112 S /sbin/telnetd
729 root 248 S -sh
732 root 264 R -sh

~ # dmesg
Linux version 2.6.11-omap1-palmtt2 (root@red.localdomain) (gcc version 3.4.4 20041218 (prerelease) (Debian 3.4.3-1)) #19 Tue Nov 1 20:20:35 CET 2005
CPU: ARM925Tid(wt) [54029152] revision 2 (ARMv4T)
CPU0: D VIVT write-back cache
CPU0: I cache: 16384 bytes, associativity 2, 16 byte lines, 512 sets
CPU0: D cache: 8192 bytes, associativity 2, 16 byte lines, 256 sets
Machine: Generic OMAP1510/1610/1710
Warning: bad configuration page, trying to continue
Memory policy: ECC disabled, Data cache writethrough
OMAP_DIE_ID_0: 0x4f8d0b12
OMAP_DIE_ID_1: 0xb718c83c DIE_REV: 12
OMAP_PRODUCTION_ID_0: 0x00000000
OMAP_PRODUCTION_ID_1: 0x00000000 JTAG_ID: 0x0000
OMAP32_ID_0: 0x03310115
OMAP32_ID_1: 0x3b47002f
JTAG_ID: 0xb470 DIE_REV: 12
OMAP1510 revision 12 handled as 15xx id: b718c83c4f8d0b12
On node 0 totalpages: 4096
DMA zone: 4096 pages, LIFO batch:1
Normal zone: 0 pages, LIFO batch:1
HighMem zone: 0 pages, LIFO batch:1
Built 1 zonelists
Kernel command line: rw mem=16M console=tty0
Total of 64 interrupts in 2 interrupt banks
PID hash table entries: 128 (order: 7, 2048 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 16MB = 16MB total
Memory: 14184KB available (1401K code, 314K data, 248K init)
Calibrating delay loop... 59.80 BogoMIPS (lpj=299008)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
DMA support for OMAP1510 initialized
OMAP1510 GPIO hardware
Initializing OMAP McBSP system
USB: hmc 0, usb0 2 wires (dev)
NetWinder Floating Point Emulator V0.97 (double precision)
omapfb: configured for panel generic1510
OMAP LCD controller initialized.
Console: switching to colour frame buffer device 80x53
OMAP framebuffer initialized vram=262144
Serial: 8250/16550 driver : 1.90 $ 4 ports, IRQ sharing disabled
ttyS0 at MMIO 0xfffb0000 (irq = 46) is a ST16654
ttyS1 at MMIO 0xfffb0800 (irq = 47) is a ST16654
ttyS2 at MMIO 0xfffb9800 (irq = 15) is a ST16654
io scheduler noop registered
RAMDISK driver initialized: 8 RAM disks of 4096K size 1024 blocksize
udc: OMAP UDC driver, version: 4 October 2004 (iso) (dma)
udc: OMAP UDC rev 2.5
udc: hmc mode 0, transceiver (unknown)
udc: fifo mode 3, 648 bytes not used
usb0: Ethernet Gadget, version: Equinox 2004
usb0: using omap_udc, OUT ep2out-bulk IN ep1in-bulk STATUS ep3in-int
usb0: MAC de:61:02:71:63:02
usb0: HOST MAC 32:d9:25:6e:f8:53
mice: PS/2 mouse device common for all mice
NET: Registered protocol family 2
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
NET: Registered protocol family 1
NET: Registered protocol family 17
Freeing init memory: 248K
udc: USB reset done, gadget ether
usb0: full speed config #1: 100 mA, Ethernet Gadget, using CDC Ethernet

/proc # cat cpuinfo
Processor : ARM925Tid(wt) rev 2 (v4l)
BogoMIPS : 59.80
Features : swp half thumb
CPU implementer : 0x54
CPU architecture: 4T
CPU variant : 0x0
CPU part : 0x915
CPU revision : 2
Cache type : write-back
Cache clean : cp15 c7 ops
Cache lockdown : not supported
Cache format : Harvard
I size : 16384
I assoc : 2
I line length : 16
I sets : 512
D size : 8192
D assoc : 2
D line length : 16
D sets : 256

Hardware : Generic OMAP1510/1610/1710
Revision : 15100015
Serial : 4f82342342b718c83c

What's next ? Nothing :-( The Tungsten has not enough flash and RAM to be usable under Linux. So, wait for the next PalmOS/Linux device or buy a Zaurus!

TT Processor info

A TI OMAP 1510 was used for the Palm Tungsten T which has two processors inside: one ARM 925T CPU (300 MIPS at 144 MHz), and a TI C55x DSP with up to 400 MIPS at 200 Mhz !

Here are the details:

TMS320C55x DSP Core

  • Up to 200 MHz (maximum frequency)
  • One/two instructions executed per cycle
  • 32K x 16-bit on-chip dual-access RAM (DARAM) (64 KB)
  • 48K x 16-bit on-chip single-access RAM (SARAM) (96 KB)
  • 16 KB I-cache, 8 KB D-cache
  • Video hardware accelerators for DCT, iDCT, pixel interpolation, and motion estimation for video compression


  • Up to 175 MHz (maximum frequency)
  • 16KB I-cache; 8KB D-cache
  • 192-KB of shared internal SRAM - frame buffer
  • Support for 32-bit and 16-bit (Thumb mode) instruction sets for increased code density
  • Data and program MMUs
  • Two 64-entry translation look-aside buffers (TLBs) for MMUs
  • 17-word write buffer

Memory Traffic Controller (TC)

  • 16-bit EMIFS external memory interface
  • 16-bit EMIFF external memory interface

9-Channel System DMA Controller
Digital Phase-Locked Loop (DPLL) for MPU/DSP/TC Clocking Control
Comprehensive Power-Saving Modes for MPU/DSP/TC
IEEE Standard 1149.1 (JTAG) Boundary Scan Logic
Application Subsystem

  • Three 32-bit timers and watchdog timer 
  • 32-kHz timer
  • Level1/Level2 interrupt handlers
  • USB1.1 host interface with up to 3 ports
  • USB1.1 function interface
  • One integrated USB transceiver for either host or function
  • Multichannel buffered serial port (McBSP)
  • I2C master and slave interface
  • Micro-wure serial interface
  • MMC/SD interface
  • HDQ/1-wire interface
  • Camera interface for CMOS sensors
  • ETM9 trace module for TI925T debug
  • Keyboard matrix interface (6 x 5 or 8 x 8)
  • Up to 10 MPU general-purpose I/Os 
  • Pulse-width tone (PWT) interface
  • Pulse-width light (PWL) interface
  • Two LED pulse generators
  • Real-time clock
  • LCD controller with dedicated system DMA channel
  • Two multichannel buffered serial ports
  • Two multichannel serial interfaces
  • Three UARTs (one supporting SIR mode for IrDA)
  • Four interprocessor mailboxes
  • Up to 14 shared general-purpose I/Os


Gnome calendar on the TT

What's inside ?

You'll find nice take apart instructions here.


ARM 925T documentation :

TI C5xx DSP : ?

OMAP 1510 Peripherals : no real documentation found !

MontaVista has made Linux Kernel patches to run Linux on the OMAP1510. You can look at the source and learn at

Also the OMAP5910's datasheet can be useful. It can be downloaded here or there.

Another Linux OMAP Page: and a bitkeeper tree which seems to be active:

Linux on Tungsten project: