Electronics: Installing linux on the Microclient JRSX

I have been contracted to build a monitoring controller for a 100% solar heated house in upstate new york. The requirements are:

The result, after some deliberation, was a vortex486sx, or chip info based microclient_jrsx from norhtec.com. The aim is to run owfs for io (lots of temperature sensors, humidity, available sun power, damper controls) and control things using BASIC (yeah, I know. Nick likes BASIC, and it is tiny).

The parcel arrived a few days after ordering. Norhtec is offering a good product, though we had terrible trouble getting useful facts out of them. In particular, nick wanted tight specs on power consumption so he could do the power supply sizing (it is intended to run the whole thing off batteries and a solar panel). I wanted to know exactly what was supported out of the box and we had a veritable timezone merry-go-round trying to get answers as the messages were pinged around the company. But they did try, which makes me respect them and recommend others deal with them. Eventually I found documentation on the cpu manufacturer's site, and nick got some reasonable figures for power consumption.

My laptop runs ubuntu.

First, we need to get the machine booting. I tried using PXE and RPL, but PXE didn't seem to generate any packets, and RPL, well RPL is sucky. So I knocked on my neighbour's door and borrowed his 64MB CF.

I tried a bunch of recommended distros, but they wouldn't boot for whatever reason, so I figured I'd just bootstrap my own system. I like debian, and the machine seems good enough to run woody or even sarge.

The vortex website has a custom linux kernel and instructions on compiling. Most importantly, you need floating-point emulation turned on. To build it, download the 2.6.18 kernel from kernel.org and apply vortex's patch.

I used a Digital concepts 21-1 digital reader USB to everything device. It works perfectly with linux (hurrah!). The CF mounts at /dev/sdc, and ubuntu likes to be helpful and mount it for you...

apt-get install mbr extlinux chroot e2fsprogs

# add a single primary partition (p\n 1\n \n \n w\n q\n)
fdisk /dev/sdc

# install a master boot record
install-mbr -e 1 -p 1 /dev/sdc

# make a file system
mke2fs /dev/sdc1

# install extlinux http://syslinux.zytor.com/wiki/index.php/EXTLINUX
extlinux /media/disk

# copy on special kernel
cp linux-2.6.18.8/arch/i386/boot/bzImage /media/disk/linux

# create a bigger disk for temporary porpoises  128MB isn't enough

dd if=/dev/zero of=dboot bs=1M count=256
mke2fs -v dboot
mount dboot target -t ext2 -o loop=/dev/loop0

# install sarge onto it
debootstrap sarge target/ http://ftp.debian.org/debian

# delete lots of things (excess locales, apt, exim4-base, timezones, doco, man pages, whatever you can find)

# copy < 50MB base system onto CF
rsync -av target/ /media/disk/

#Also useful is some ttys and hdas
cd target/dev
for i in 0 1 2 3 4 5 6; do ./MAKEDEV tty$i; done
./MAKEDEV hda

I can not get dhcp working here. perhaps the network driver doesn't do promiscuous or something? So edit /etc/interfaces/networking for a static IP.

I find it helpful to chroot into my temporary image and then the disk to confirm everything is there. Ubuntu mounts removable media noexec, which had me and pjrm stumped for a bit.

helianthus:~# cat /proc/cpuinfo 
processor       : 0
vendor_id       : unknown
cpu family      : 4
model           : 0
model name      : 486
stepping        : unknown
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : no
fpu_exception   : no
cpuid level     : -1
wp              : yes
flags           :
bogomips        : 99.32

helianthus:~# free
             total       used       free     shared    buffers     cached
Mem:        127080      11984     115096          0        596       6588
-/+ buffers/cache:       4800     122280
Swap:            0          0          0
helianthus:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1              60M   48M  8.3M  86% /
tmpfs                  63M  4.0K   63M   1% /dev/shm

Prebuilt fpemu kernel for jrsx.