SH3 Embedded Linux Development

Late in 2003, I bought a full-featured SH3 embedded development kit, a pair of LCD panels for salvage on eBay, a $3 shelf from IKEA, and a handful of power connectors at Radio Shack.

The vendor company claimed to offer Linux support for the device and peripherals, but, that claim turned out to be untrue, so I've been working on getting the Linux kernel compiled and running. I've started tooling around with a specific configuration fork of the latest Linux kernel and will hopefully be able to fully flesh out support for all of the devices on the board.

One great tool that has helped immensely in getting started is Dan Kegel's Crosstool, which removes a lot of the difficulties in getting a working GNU cross compiler toolchain (compiler, assembler, linker) set up for your target embedded system.

Another resource I'm using is the LinuxSH mailing list, which is hosted at Sourceforge.

As I've been working on the framebuffer driver, I've been jotting down development notes which can be read here. It mostly documents my paper chase through a half dozen tech reference manuals and snippets of kernel source.

To Do
Write framebuffer driver for on-chip LCD controller.
Write SMSC 91C111 ethernet chip driver
Set up NFS root.
Write OHCI-compliant USB driver
Write CompactFlash MTD interface driver
Have the kernel recognize more than 4MB of memory (should be 32MB).

Kernel Boot: 06/10/04 - 18:58:28

jumping to: 8c800000...
Linux version 2.6.6 (vilimpoc@vilimpoc.local) (gcc version 3.3.2) #2 Thu Jun 10 18:54:51 EDT 2004
initrd extends beyond end of memory (0x60f89ed9 > 0x0c400000)
disabling initrd
On node 0 totalpages: 1024
  DMA zone: 1024 pages, LIFO batch:1
  Normal zone: 0 pages, LIFO batch:1
  HighMem zone: 0 pages, LIFO batch:1
Built 1 zonelists
Kernel command line: console=ttySC1,115200
PID hash table entries: 16 (order 4: 128 bytes)
SH RTC: invalid value, resetting to 1 Jan 2000
CPU clock: 309.60MHz
Bus clock: 51.60MHz
Module clock: 51.60MHz
Interval = 129000
Console: colour dummy device 80x25
Memory: 2960k/4096k available (816k kernel code, 1112k reserved, 118k data, 44k init)
Calibrating delay loop... 77.20 BogoMIPS
Dentry cache hash table entries: 1024 (order: 0, 4096 bytes)
Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
CPU: SH7729
POSIX conformance testing by UNIFIX
Linux NoNET1.0 for Linux 2.6
fb0: Hitachi HD64461 frame buffer device
SH Virtual Bus initialized
HD64461 configured at 0xb0000000 on irq 36(mapped into 80 to 95)
devfs: 2004-01-31 Richard Gooch (
devfs: boot_options: 0x1
Console: switching to colour frame buffer device 80x25
SuperH SCI(F) driver initialized
ttySC0 at MMIO 0xfffffe80 (irq = 25) is a sci
ttySC1 at MMIO 0xa4000150 (irq = 59) is a scif
ttySC2 at MMIO 0xa4000140 (irq = 55) is a irda
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
ide: SuperH generic IDE interface
ide-sh: Attempting to register ide2 when only 1 interfaces are available.
mice: PS/2 mouse device common for all mice

On the first boot, the system didn't output this message, which it has done on a number of subsequent occasions: "Kernel panic: VFS: Unable to mount root fs on ram0" This is a good sign. I'm putting together a initial ramdisk (initrd) and will see if I can get the kernel to boot properly into it.

©2004, research, mv