Both power consumption and imminent cease of Debian security updates for the sparc32 platform (I was running a trusty SparcStation 10 still) made me look for a worthy replacement. Some requirements: three or more ethernet ports, very low power consumption, must run Linux (platform with all-open drivers gives extra points), and a RS232/RS485 jack for the solar power inverter read-outs.
I settled for GlobalScale’s openRD-client box, an ARM kirkwood-based design, which typically takes about 6 watts, has ample interface connectors, including two gigabit ethernet ports (yeah, I wanted three. well, turns out that brings you into a completely different price range – so I’ll simply use an USB-based NIC for my 3rd). Hardware arrived some 6 weeks ago, but there was no pressing need yet.
Well, while staying at the GSoC mentor summit, things suddenly went south, the SparcStation blew its scsi controller (and the attached disk’s interface as well), I lost ~3 days worth of email, and I had to hurry things a bit.
Here’s what I did to have stock Debian stable running on the box:
- I upgraded u-boot to the latest version (it’s kind of the bios on those arm machines, first thing that gets run after a reset), as I needed support for booting off of sd cards:
- grab latest image from the list at http://code.google.com/p/openrd/downloads/list (http://openrd.googlecode.com/files/openrd_uboot.zip currently)
- put on toplevel dir of a random usb stick, insert into openrd-client, reset, then at the u-boot prompt:
usbstart
fatload usb 0:1 0x0800000 uboot.bin / ext2load usb 0:1 0x0800000 uboot.bin
nand erase 0x0 0xa0000
nand write 0x0800000 0x0 0xa0000
If that turns out to be succesful, issue a reset
.
After that, you should see this:
** MARVELL BOARD: OpenRD-Client LE
U-Boot 1.1.4 (Oct 27 2009 - 21:57:24) Marvell version: 3.4.19
- Ready to actually install now. I did it as outlined here
- Most important difference: we’re not setting up a Sheevaplug (which is also quite nice), so in the above howto, issue a
setenv arcNumber 2361
instead. Memory setup, I/O register etc. are all hard-coded on arm, so picking the correct machine magic number is paramount for having a working setup (and not accidentally frying your hardware, because some I/O pins are mapped differently. You have been warned).
-
- I then decided to build a custom kernel, as the existing lenny image was not supporting all the openrd-client features yet:
- cloned repo
- applied this patch on top of it
- stripped down config (you want to select OpenRD client from the ARM Kirkwood section), make sure mmc drivers are built-in if you want to boot w/o initrd
make uImage
doesn’t even take that long to build, on the actual machine (1.2GHz, FWIW)
- You can then flash your kernel image to the internal rom, like this (assuming the image is less than 4MB in size):
mmcinit
ext2load mmc 0:1 0x00800000 uImage
nand erase clean 0x00100000 0x00400000
nand write 0x00800000 0x00100000 0x00400000
This assumes the kernel image resides on the second partition of your sd card. Since u-boot’s mmc support is still a bit flaky, and sometimes fails to properly initialize the sd card after a reset, booting from internal flash comes in extremely handy – boots kernel from flash, kernel then sets up mmc nicely & grabs everything else from there). Which ends up with the following tweaked u-boot boot setup for me:
setenv bootargs 'console=ttyS0,115200 root=/dev/mmcblk0p2 rw mtdparts=orion_nand:0x400000@0x100000(uImage)'
setenv bootcmd 'nand read 0x800000 0x100000 0x400000; bootm 0x800000'
saveenv
(my root fs lives on the 2nd sd card partition)
Really happy with it, now that it’s working:
