Oct 22, 2009 Initial work
Oct 23, 2009 Clarification
Dec 10, 2009 Toshiba 1.8" drive
Dec 20, 2009 Unreal Tournament Server, more detail, alternate power usage
Jan 20, 2010 Slackware 13.0
Feb 02, 2010 Add Falk's feedback
Feb 09, 2011 Update to Slackware 13.1
Feb 27, 2011 Update X, 1.8" drive



Norhtec Microclient JrDX

Just a quick note on the hardware, before we get to the installation.
This is Norhtec's previous generation hardware, they have newer silicon available in other products, one in paticular that looks to replace the DX is the Microclient JrMX, and is the hardware I will go with when I am looking to buy another system from them. The system I have, though, the Microclient JrDX, has :
Vortex86 1GHz CPU, 586-compatible
256M RAM
One IDE slot with two channels, one channel dedicated to the (bootable) Compact Flash/MicroSD slot, the other a stanard 2.5" PATA port.
r6040 PXE-capable integrated NIC.
XGI onchip video.
Some kind of USB audio.
3xUSB ports.
2xRS-232 COM ports.

Sans hard drive, the system draws 5-6 watts. With a 1.8" drive installed, it draw 6-8 watts. Not bad for a 1GHz machine.
I should point out that not *all* is sunshine and roses. When I try to boot my compact flash card, with a 1.8" drive attached as a slave through a converter pm the IDE port, it seems to get stuck in the boot process when it hits the USB keyboard (I'm wondering if the 1.8" drive has to be the master drive...). Also, if I have a USB drive in one of the USB ports, when I try to boot the compact flash card, it hangs in the BIOS while it tries to indentify it. Not a big deal, because you can always insert and mount the USB drive after the system has booted, but a caveat to be aware of anyway.





Slackware 13.1 (Linux) on a Norhtec Microclient JrDX

I hadn't looked at this wee box in about a year, had kinda fallen by the wayside once I got a L
inksys WRT54G to do my wired-only router/firewall dirty work (it is still running strong a year later, BTW). I recently found the time to hack at the Microclient, again, thought I'd give the latest Slackware a shot.
The latest version, as of this writing, is v13.1. It went down without difficulty, fired up without fanfare, and everything so far has worked right out of the box. I should point out that I haven't bothered looking into the audio (it has been built primarily to be an rtorrent curses client, perhaps a UT99 server), but having played with X  a bit, the Tab Window Manager and Blackbox both seem to work fine, XFCE begins taxing the system a bit too much. I would be interested in seeing how LXDE runs, as well - perhaps if Slackware integrates it in the future. At the command line, though, this little 1GHz box handles things with aplomb.

To install Slackware, this time I used a USB drive. See the USB/PXE directory on the install media if you are interested in installing from a USB drive.
To boot the small boot drive, plug the drive in to the back USB port, fire up the system, and enter the BIOS (hold down -del- while booting).
You'll first have to change the BIOS of the Microclient in two ways : Set the USB controller to emulate a hdd, and set the boot order to boot the USB device first. I installed to an 8GB compact flash card in the front slot. It had been previously used for my other installs, so it was all set to go, but brief review of my previous notes is perhaps in order.
 There is a dip switch on the motherboard inside the box that allows you to set the IDE channel to the CF slot as master or slave. Set it to master, if you're going to use a CF card like I did.
My previous notes said that I did this with the BIOS, and I can't say I recall ever altering it:
Make sure that your Microclient's BIOS, under
"Advanced" -> "IDE Configuration"
that "Onboard IDE Operate Mode" is set to "Native" and
"Primary IDE Pin Select" is set to "SD Card"


Also, you will have to set the boot priority to the USB device, first.
Save and Exit the BIOS.
You should be able to boot up the USB boot drive, now. When prompted, you want to boot the   huge.s   kernel (the CPU is only 586-compatable), it takes a good while for it to load the system and present a command prompt. Once there, run    setup   and start the installation process.
A significant change has occured with 13.1. With the new kernels, all storage discs appear as SATA drives. This worked out well for my install, as it showed the 8GB compact flash card as /dev/sda, the boot USB drive as /dev/sdb - it required no finagling to install right on the machine (in the past I'd used a second computer to install everything, then plugged it into the Microclient JrDX upon completion). If you copied the   /slackware   directory verbatim from the install media to the USB drive, then when prompted to select the source target, it should auotmatically select "use a mounted partition", and will present the directory where your USB key has been mounted. For some reason, mine tacked a double /slackware/slackware directory, so I had to delete one when selecting the correct source target directory (that may have been my fault , though). If you get the directory wrong, it'll tell you, and ask for a better one.
Note that, in the past, I had made a small bootable primary DOS partition on the compact flash card (the master drive), in order to facilitate installing lilo. I seem to recall not being able to boot without it, so I did so again.
When prompted to install lilo, just do a "simple" installation" with the standard (non-framebuffer) text console, and install to the MBR (not the superblock).
When you're done installing, you'll have to remove the USB installation key, then reset the BIOS' boot priority for the CF card.
The single biggest difficulty with this device, in the past, had been the r6040 integrated NIC, but I am pleased to report that this kernel seems to work automagically with it, several hours of uptime and no sign of issues yet.
That is about all I have to say regarding this device. I see Norhtec has a simlar-looking box, but based on their new silicon, calling it the   Microclient JrMX
   , I can see myself getting it ot a Gecko surfboard sometime in the near future - the SATA connection alone is probably worth the stretch. It is unfortunate that I cannot fit my 1.8" drive inside the body of the case, with even the shortest of my cables - I kind of wish I had purchased mine originally with whatever hardware Norhtec sells to connect a mobile drive. Ah well, the PATA interface is getting hard to buy for, new, nowadays anyway.
Hope this has helped you, take a quick look at the previous trials and tribulations I'd wrestled with, below, if you're inclined.
On a final note, I've also installed on to a PATA laptop drive, which I just left sitting outside the device (the case can be put back together with the ribbon passing underneath the edge - not pretty, but functional). The only change I had to make was to set the BIOS
"Primary IDE Pin Select" to "Parallel ATA"
and install as above with the CF card.








******************************
Archived Information Follows
******************************




Slackware 13.0 (Linux) on a Norhtec Microclient JrDX

Not much to say here, Slackware 13.0 doesn't require any of the patching that 12.2 needed - if you use the huge.s kernel from the install DVD's initial boot prompt, it just works. Make sure the BIOS is set to native mode. I have only installed on an 8G flash card so far, to get LILO to work I had to first make a small DOS partition (use mkdosfs, not FAT) on hdc1 then the main linux parttion on hdc2, otherwise lilo would fail with an error message about "destroying the filesystem". Included a swap file as described in the 12.2 install below. FYI, starting XFCE with Xorg configured to use the vesa driver akes about a minutes or so to start. The Tab Window Manager is down to about 30 seconds. It would appear that X and a full-blown linux distribution may be a little much for this system, now. With XFCE, CPU usage spikes around 40% at first, then settles down to about 10% once everything gets put in its place.
Although I had little difficulty with this, an email from Falk R. says that he had to rebuild a kernel to include pata_RDC statically in his kernel (not as a module) before he had access to the IDE interface. Not sure why there is a discrepancy here, but will perhaps try and reinstall on my CF card (he advised me of the master/slave switch which sets the CF slot to /dev/hdd)

Although I have been able to get the system up and configured to work as a firewall, I have ultimately deferred to a Linksys WRT54GL for my firewall needs. It draws six watts (probably less with the wireless disabled, like I've done), runs Linux from the factory, and is a favourite of the open-wrt / dd-wrt crowd, so even if Linksys ever decides to stop supporting it, there should still be excellent open source software to run the show. It was trivial to set up, the web interface admin is as easy as anything from the BrazilFW project, and I've noticed no difference in my throughput.


Slackware 12.2 (Linux) on a Norhtec Microclient JrDX

I bought this wee computer , with the optional second NIC, in spring of 2009 with the intention of running BrazilFW on it.
With two NICs, booting from a CF card, the computer draws between 5 and 6 watts
(9 to 11 VAs), according to my Kill-a-watt meter; with a 1.8" Toshiba PATA hard drive it draws 6 - 8 watts (14 - 16 VAs). Using just the integrated r6040 NIC reduces VAs to 13-15, but wattage stays the same.
Apart from a barely audible, infrequent click from the Toshiba hard drive, this computer is utterly silent.

It appears to be identical to DMP's eBox-3300 / 3310, uses an Xcore86 CPU (the chip itself is silkscreened with the lettering MSTI PDX-600 )
, which is a rebadged Vortex86dx.
Norhtec's new Gecko notebook is supposed to used the newer MX version of this product, which will add MMX instructions and integrate a GPU into the silicon.
I have been told by Norhtec that the new version of the Xcore86 chip has also addressed the IDE issue mentioned below.

Here's   cat  /proc/cpuinfo   from my machine :
processor    : 0
vendor_id    : Vortex86 SoC
cpu family    : 5
model        : 2
model name    : 05/02
stepping    : 2
cpu MHz        : 999.996
fdiv_bug    : no
hlt_bug        : no
f00f_bug    : no
coma_bug    : no
fpu        : yes
fpu_exception    : yes
cpuid level    : 1
wp        : yes
flags        : fpu tsc cx8
bogomips    : 1999.99
clflush size    : 32
power management:



Unfortunately, the integrated NIC requires the    r6040    kernel module which is not present in the BrazilFW distribution (or any 2.4.xx kernel). I've unsuccessfully tried to compile the module, on several different occassions, for the BrazilFW kernel; the only successful compile I've done is against a 2.4.33.3 kernel, and it segfaults when I modprobe in BrazilFW.
So, after my initial failure in spring 2009 with BrazilFW, I decided to try a full Slackware install, instead, on to an 8Gb compact flash card. I was thwarted again, as neither the stock    huge.s   kernel, nor anything I built, was able to recognize the hard drive after the kernel booted. I tried many kernel builds, and tried using both the CF slot and an IDE-to-CF converter in the IDE slot on the mainboard's underside, all to no avail. It was frustrating, and ultimately I tossed it on the shelf.

I gave it another crack in autumn 2009, managed to get things rolling. The biggest single help was from
this webpage indicating that kernel patches were needed.
Once I got the kernel patched and rebuilt, everything went quite smoothly. If you have a bit of experience with Slackware, grab
these patches
from the DMP download site
or here (from this webspace)
and apply them to your kernel. According to the patch, UltraDMA mode has to be inhibited completely (comments refer to it as an "ugly hack").
The config file included with the DMP patch is for a stock eBox-3300/3310 (Norhtec Microclient JrDX), does not include the 8139too module if you need have the extra NIC.
Here is my altered kernel config for dual-NICs,
plus whatever else I thought was necessary (filesystems, security algorithms, etc). You will be booting /dev/hdc, whether you're using the CF slot or the IDE slot, on this machine. You'll have to perform the the installation and kernel rebuild on another PC, then move the CF card / hdd into the Microclient JrDX. Note that, thiese instructions are based on the factory stock setup, which limits you to either a CF card or a hdd hooked up to the hdd, but if you open the system up you will see a dip switch inside thee CF slot area labelled "master/slave", which can be set to "slave" to allow both an hdd on /dev/hdc and a CF/MicroSD card on /dev/hdd (thanks Falk H.).



A bit more detail on how I got mine up and running.

Before we begin, please note that Norhtec has informed me that the newer version of the Xcore86 / Vortex86dx has addressed the hardware issues I encountered, and that newer Linux kernels should just work. The version I got required a bit more effort. The installation steps probably apply to the Microclient JrSX / DMP eBox-2300 as well.

It is my habit to install Slackware for slower / lesser systems on faster systems first, then transfer the drive over. It saves a  lot of time and hassle, and in this case, is the only way to get the OS  to boot. I initially installed to an 8Gb Kingston Elite Pro compact flash card, worked it appropriately, and the finished installation was booted from the Microlclient's CF slot. I have since acquired a Toshiba 30Gb 1.8" hard drive and adapter, which boots through the IDE interface of the Microclient. Installing to either a CF card or a 1.8" drive is, basically, the same process. I suspect that a microSD card in the microSD slot will also work in exactly the same manner as the CF slot (but haven't tried). So you will need a regular PC with two PATA IDE slots, and an IDE-to-CF adapter (got mine on eBay). Make sure there are no other hard drives hooked into the IDE ribbons. Install the IDE-to-CF adapter on the second IDE channel, as the master. This is important, because that is where the Microclient JrDX places the card when you use it. If you are installing from optical media, you can put the drive on any of the other IDE channels, or a SATA channel.
Boot the Slackware CD/DVD, at the first prompt, type
huge.s
because we don't want to install will the default hugeSMP (PPro optimized) kernel. You can do a full install, but I seriously doubt you'll find the KDE a good experience on this machine. If you are using a 4Gb card (or less), you are going to have to forego the KDE anyway - it simply won't fit (you will have to pick and choose what to install, with smaller cards). For simplicity's sake, I'll just assume you are just doing a full install to 8Gb or more. A full install consumes just under 4.8G on my ext3 partition. If you are using a hard drive, give yourself a nice big swap partition, as the machine itself only has 256M of RAM. If you are using a CF card, see below for concerns regarding swap space.
So. Fire up the install process, select the correct partition + full install, kick back and let Slackware do its thing. When prompted, do not configure your network. If you are installing to a Toshiba 1.8" drive, during the lilo config, when you are prompted, install lilo to the MBR. Note also that I was unable to make a FAT partition as the primary partition - I thought I might mess around with Windows on hdc1 at some point, but was unable to put lilo down properly with a FAT/DOS partition as the bootable primary partition.
When it has finished installing, you will exit the install screen and reboot. Let it run its course, doing all the preliminary stuff it does to make itself a full-fledged system. When you are finally presented with a login prompt, log in as root. You need to transfer the patches and config to this system. Use a USB card, optical disc, floppy, network connection... whatever suits you. Change Directory into the kernel source directory
cd /usr/src
and copy the patches and config here
cp /place/where/patches/are/*.patch ./
We are fortunate that the patch is made for the 2.6.27.7 kernel, which happens to be the stock Slackware 12.2 kernel! Nice coincidence, that.
Apply the patches

patch -p0 < it821x.patch
patch -p0 < r6040.patch
and move the config file into the working directory
cp ./configFileName ./linux/.config
Now move into the linux directory and make oldconfig
cd ./linux
make oldconfig
If you think there are other things you'd like to change or tweak, run
make menuconfig
and fix it up as you like.
Now build the kernel, modules, and install them
make bzImage; make modules; make modules_install
Copy the new kernel, System.map and config into /boot
cp ./arch/i386/boot/bzImage  /boot/vmlinux-2.6.27.7
cp ./System.map  /boot/System.map-2.6.27.7
cp .config /boot/config-2.6.27.7
and edit /etc/lilo.conf so that the new kernel can be booted. Include a section after the stock configuration something like this :
.
.
.
# End LILO global section
# Linux bootable partition config begins
image = /boot/vmlinuz
  root = /dev/root
  label = Linux
  read-only
# Linux bootable partition config ends
#
#
# Patched Microclient kernel config begins
image = /boot/vmlinuz-2.6.27.7
root = /dev/hdc1
label = MicroclientKernel
read-only
# Patched Microclient kernel config ends


Run lilo
lilo
and that should leave your CF card with a copy of Slackware 12.2 that can be booted from the CF slot of your Microclient JrDX, or your hdd available to be booted from the IDE interface. Note that it seems I can have only one or the other. If a CF card is present, it will be booted, and the IDE drive will not be recognized; this seems to be a limitation of my machine. If you want to use the IDE interface with a 1.8" drive, make sure the CF / microSD slot is empty.
 Shut down the big PC, pull the card / hdd, put it in the Microclient and fire it up, holding down the delete key so that you can check up on the BIOS configuration.
Make sure that your Microclient's BIOS, under
"Advanced" -> "IDE Configuration"
that "Onboard IDE Operate Mode" is set to "Native" and
"Primary IDE Pin Select" is set to "SD Card"
Also, while you are in the BIOS, check that
"Boot" -> "Boot Device Priority"
is set to boot your hard disk first. "Save Changes and Exit", let lilo present the Slackware boot prompt, select the MicroclientKernel option, and watch the magic.

For CF/microSD cards, one other option is the inclusion of a swap file. My understanding is that swap files are hard on a CF card - although the internal logic of a CF / microSD card tries to distribute the writes and rewrites across the range of the memory, an explicitly-defined swap partition limits this technique to just the partition itself, causing that portion of the card to burn down quite quickly.
An alternative is to create a file of zeroes and mount it as the swap space. In the past, this meant pretty slow swap transfers, because the kernel had to route the memory swaps through the filesystem, but apparently (according to this page) this is no longer true.
Run xorgsetup (as root). I seem to have stability issues with 24 bit colour, so I set the colour depth to 16 bits.

The combination of 1.8" drive, adapter, and ribbon don't quite fit inside the box (with two NICs), to I had to reassemble without the side plate in place. Until I can find a 2.5" to 1.8", 90-degree elbow, this will have to do.
Configure your network by running
netconfig
The script automagically configured eth0 for me, but I had to edit
/etc/rc.d/rc.inet1.conf
 and manually set up up eth1 and eth2. The rtl8100B mini-PCI card gets mapped to eth1, and for some reason, eth0 (the r6040 NIC) gets mapped to eth2 when Slack boots up, so edit eth2 to reflect your primary network address. That should get both NICs functioning. Bring up both interfaces thus :
ifconfig eth1 up
ifconfig eth2 up
or, as root, restart rc.inet1
cd /etc/rc.d
./rc.inet1 restart


That's about it. With my config file, both the r6040 NIC and the expansion card 8139too NIC are detected and usable. USB mouse and keyboard are fully functional, X fires up with Blackbox without difficulty, and I am able to access the internet, and sftp files between computers.
I have only used it intermittently so far, so I can't comment on long-term stability or uptime, but have left it running for a couple of days as an Unreal Tournament server (see below) and had no issues so far.

BrazilFW and the 2.4.xxx Kernel

If you manage to get an     r6040    module compiled for the latest release of BrazilFW, I'd be really keen to hear from you.




 Software that has Worked Well on other Small Systems

This list was made for an IBM Thinkpad 560 (P100, 72M RAM), so I'm spretty sure it will be fine on the 1GHz Microclient JrDX as well.

Web browsing  : Opera - binary only downloads. Distro's stock Firefox has caused some grief early into my experiment, but I don't know if it is the cause...
                        : elinks - textual surfing
Email               : Sylpheed - download and compile
Usenet              : SLRN - on installation disc
                        : Sylpheed - download and compile
Pictures           : The GIMP - on installation disc
P2P                 : Mutella - download and compile.
                        : Bittorrentncurses.py - on installation disc under    /extras
Music              : MOC - download and compile
                        : xmms - on installation disc

Like everything Open Source, there are a whack of info & manpages for you to pour through, if you are unfamiliar with any of the software.




6-watt UT99 Server

I've been messing around with Unreal Tournament (1999) servers again, wondered what kind of server the Xcore86 CPU would make.
You know what? It's not half bad.
I'd run servers on various hardware in the past, on as little as a Win95 486dx-100 w/72M RAM (1on1, ISA NIC caused bad lag). There is one quirk though : for some reason it will inconsistenly segfault while first trying to start the dedicated server (usong Slackware 12.0). It happens more often than not, I usually have to attempt to run it numerous times before it finally "catches". It's a weird thing, and I don't know why it behaves that way (no feedback, just "segmentation fault"). Once it does fire up, everything appears kewl. The trick I used, to get things happening, was to just write a looping shell script that attempts to fire it up again and again. This has the added benefit of restarting the server, should it ever crash. This is it, in a nutshell :

#/bin/sh
while true
do
./ucc server "DM-Turbine?game=Botpack.DeathMatchPlus"
done

Pretty simple. Just copy that as a shell script, call it, say, UTstarterScript.sh, and put it in the /ut directory (wherever you've installed the game/server).
chmod 555 the script to make it executable, then run it as a non-root user from within the directory it is installed in.

So, if you've installed in /usr/local/games/ut-server/, put the executable script there, cd into that directory and run it.
Sometimes it takes 40 or 50 tries before it finally works. It's a really odd thing.
I'm currently testing a 6-person sniper server, v451 with all the official bonus packs, the latest UTPure, and a couple of mutators. With just me on my LAN, and 5 bots, on a process-intensive map (modified DM-ZeitkindPro), the computer spikes at about 32 percent CPU usage, max. Probably not going to run a whole lot more players than that, I suspect that 6 live players would push it beyond 70 percent. Once I'm satisfied it is functional, I'll open it up to the net and see what kind of numbers I can push with it.
FWIW, I tried play the actual game on the system, instead of the server, and it was unplayable - the game defaulted to the OpenGL renderer, and I was unable to switch to software rendering. It took abou 30 seconds to fire up, and was virtually unresponsive to mouse movements when it finally did start. It seems to function well as a UT99 server, though. At some point, I also sym-linked
ln -s   /usr/lib/libSDL-1.2.so.0.11.2   /usr/lib/libSDl-1.1.so.0
based on a suggestion I read elsewhere on the net, but I'm not entirely sure it was necessary...

Here are some other Linux-centric things I've hacked at.

HTH, I am Dan, here's my homepage.