For the very latest details, please look at the Mission Technolgies website - for low cost JTAG programming and ARM development boards.
This page contains;
1. My system introductionIf you email me please expect me not to answer. If I do you are lucky, if I don't you won't feel disappointed.
2. What I did (and who to thank for it)
3. Other info such as system sizes
4. Clickable links leading to pages showing how I did what I did...
Specs:
Hardware | Parts used |
Intel SA1100 processor (up to 206MHz) | FADES1100DF |
1MByte Atmel FLASH | 2 x AT49BV4096A devices |
16MBytes EDO DRAM | 2 x MT4LC4M16RTG-6 devices |
16bit stereo ADC (up to fs=48kHz) | CS4330 |
16bit stereo DAC (up to fs=48kHz) | CS5330A |
3.6v power supply (av. 200mA peak 350mA) | 2 x MAX1658 devices |
64-way expansion bus | 2 serial ports, 32-bit data bus, nCS, nOE, nWE & GPIO |
5 x 9cm 6-layer 0.007" design rule pcb | Done on OrCAD!! |
Software | Versions |
Bootloader in flash boot block | Heavily based on blob2.02 |
Linux kernel 2.4.4 | With patch-2.4.4-rmk3 & diff-2.4.4-rmk3-np1 |
Ramdisk | Busybox 0.51 |
TinyLogin 0.80 | |
Both statically linked against uClibc snapshot of 18/6/2001 |
I really am indebted to the LART people and others in the embedded/ARM Linux community in the following ways;
1. When designing my pcb I got stuck with the DRAM design (I'd never done DRAM before, only SRAM). Looking for a solution I found the LART pages, and 'borrowed' part of their DRAM interface circuit!
2. Once my pcb was built, I found that my ARM Multi-ICE JTAG emulator
wouldn't work.....so I downloaded the Jflash
JTAG driver, modified the code for my hardware layout, and for Atmel
PEROM flash.
CLICK HERE FOR MY JFLASH PAGE
3. The GNU toolchain (GCC 2.95.2) works absolutely perfectly for me when cross compiling under Linux Mandrake 2.4.3-20mdk, thanks to Russell King, the LART people, and others.
4. blob. After playing with
my own bootloader for a while, I grabbed blob2.02 and again modified
it for my hardware (memory locations and flash device type) - it works
fine for me!
CLICK HERE FOR MY BLOB PAGE
5. When I designed my pcb I definitely wanted to run linux on it,
but had no idea how to get started. What did I need? Well a
quick look at the LART website showed me exactly how to compile my own
linux kernel. I just needed to
change some memory and other hardcoded definitions in the kernel source,
and compile as if I had a LART (it was far easier starting from a
known point - the LART - that was close to my system, than starting from
scratch).
CLICK HERE FOR MY KERNEL PAGE
6. Finally a RAM disc. Luckily those wonderful people at Lineo
have been sponsoring the development of Busybox
(a single executable that can perform the function of, and hence replace,
a whole bunch of other programs). Also TinyLogin
(similar) and uClibc. In
my system with 1MByte of flash storage, there's no way I could link
against Glibc.
Here are some sizes;
CLICK HERE FOR MY RAMDISK PAGE
Program (compiled for SA1100) | Dynamically linked | Statically linked |
libc-2.1.2.so | n/p | 950k to 1,050k |
libm-2.1.2.so | n/p | 160k to 200k |
ld-2.1.2.so | n/p | 90k to 105k |
libuClibc-0.9.5.so | n/p | 240k |
Busybox 0.51 | 150k (to uClibc) | 205k (against uClibc) |
150k (to glibc) | unknown | |
Tinylogin 0.80 | 34k (to uClibc) | 70k (against uClibc) |
38k (to glibc) | unknown |
So what did I end up with? Here are the sizes of the kernel and
working RAM disc;
raw filesize | gzipped | uuencoded | |
kernel 2.4.4 (zImage) | n/a | 452,656 | 623,687 |
initrd-ivm-20.6.2001 | 1,228,800 | 114,525 | 157,813 |
Big disclaimer - I can't really do much with this setup since the ramdisk lacks lots of things like sz, rz, bash (I'm using the lash shell built in to busybox), but at least it boots, and it's very stable.