from wikipedia andunder CC BY-SA 4.0, Adrian Cockroft
My main notes here are on getting Linux running on it, booting off a modern Linux host, with some notes on how to rebuild kernels.
The Krups is not that different from a SPARCStation (4ish) but has very limitted IO. The only permanent storage is a removable Flash DIMM that is supplied with JavaOS. It's also different enough to need it's own Linux kernel build.
While other docs have mentioned keyboard shortcuts during boot to avoid booting JavaOS, I've not managed to make any of those work; one possibility is that is because I'm not using a real Sun keyboard on it, although the ctrl-alt-esc combination does bring the help menu up (only if the NIC is plugged in).
Like most SPARC systems, it has openprom boot firmware, although that seems more limited than other SPARC systems I remember. Hitting break on the serial near the start of boot gets into it's prompt, and can be used to manually boot from there.
However, having to hit break at just the right point on each boot is a pain, so I took the JavaOS SIMM out. It was in the white socket on the right hand side in the picture below:
The trickiest bit of this is opening the case, which is plastic clipped together - on my Krups the plastic is brittle and a lot of the clips completely popped off, and I cracked one side - so be more careful than me!.
The JavaStation ethernet is connected to a segregated LAN, with a Debian Trixie Linux server acting as DHCP server. On this server, the DHCP server is provided by the modern kea system rather than the older isc package. Care needs to be taken to get the config just right since the Krups firmware can be a bit picky.
Remember to ensure your firewall lets the dhcp and bootp etc through
First I specified for it to only run on the isolated interface I was using for the JavaStation:
"interfaces": [ "enp4s0" ]
Then, since the JavaStation actually uses the older bootp rather than dhcp, this needs enabling in kea:
"hooks-libraries": [
{ "library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_bootp.so" }
],
Then having configured a subnet range, I create an explicit reservation:
"reservations": [
{
"hw-address": "08:00:20:95:1f:4e",
"ip-address": "192.168.69.2",
"next-server": "192.168.69.1",
"boot-file-name": "C0A84502"
}
]
Note here that the 'next-server' is the IP address of this server on which a TFTP server will be running, and the boot filename is just
the IP address of the JavaStation in hex.
I also added an entry for that IP address in my /etc/hosts as 'krups'.
First install the tftpd (I installed debian's tftpd-hpa package) and figure out where it ones files, in my case it serves from /srv/tftp/.
Next download:
My proll build
and put it in the tftp server directory (i.e. /srv/tftp/).
Create a symlink from it to the hex for each javastation you need to boot:
ln -s javastation-krups-proll.19dagb C0A84502
Once loaded, Proll will then load two files with a similar name to the original, one with the extension .CMDL containing the command line to pass to Linux, and the Linux kernel itself, which needs to be in a file with ending .PROL.
(Note: Older versions of Proll didn't all load the .CMDL file, I enabled it in my build so I could specify some NFS flags)
Create /src/tftp/XXXXXXXX.CMDL (fill in your hex IP) with your favourite editor with the content:
ip=bootp root=/dev/nfs nfsroot=/tftpboot/%s,v3 console=ttyS0 debug
These are parameters to the guest kernel we're about to boot, the '%s' is expanded to a decimal IP address of the guest, and the v3 is specifying the NFS version. Specifying v3, and having a v3 enabled JavaStation kernel is needed since newer Linux hosts don't support v2 any more.
I've built two kernels that are suitable for this configuration, with NFSv3 enabled, details on building them is included below, but here are the images:
Download these into the tftp directory and then symlink one to XXXXXXXX.PROL.
If all works well, then when powering on the JavaStation, after a few seconds you should see the Proll boot messages in the bottom right
of the monitor:
After a few seconds this should be replaced by a full screen Linux console with Tux (and a sun burst) at the top left. This can't boot fully yet however since we haven't got a root filesystem.
On the host, install qemu-user (which tends to make cross architecture debootstrap more reliable). Then did:
debootstrap --arch=sparc sarge /opt/sarge/home/sparc
I then created a symlink from /tftpboot/192.168.69.2 to /opt/sarge/home/sparc , installed nfs-kernel-server on the host and created an export line in /etc/exports
/opt/sarge/home/sparc krups(rw,no_root_squash)
Debootstrap only does a very basic install, so it may need some cleanup - and remembering this is a very old Linux most of this is in the simpler older config files such as /etc/inittab. I commented out all except the tty1 and ttyS0 entries in inittab, just leaving a single console and a serial console.
If this has all worked out right you should be able to see a Linux userspace booting:
Building old code tends to need old tools, and there's some guess work to be done in finding a good combination that works. In addition, building old compilers can also need old tools. Fortunately building old code on new machines is at least fast, even for gcc and a kernel.
apt-get source binutils
apt-get source gcc-3.3
This gets me the source to Debian's patched binutils-2.15 and gcc-3.3.5-13.
In the binutils-2.15 directory that has been created:
./configure --program-prefix=sparc-linux- --prefix=/home/cross/build --target="sparc-linux"
make
make install
This produces a binutils set in /home/cross/build. Note I found out this version isn't parallel build safe, hence the plain make.
In the gcc-3.3-3.3.5 directory that has been created:
export PATH=/home/cross/build/bin:$PATH
./configure --program-prefix=sparc-linux- --prefix=/home/cross/build --target="sparc-linux"
make
make install -k
Note the make will fail as it tried to start building some userspace libraries we don't need, the -k on the make install tells it to ignore errors and plough on. This got me enough to work with, including sparc-linux-gcc.
rpm2cpio elftoaout-2.3-bp155.2.10.src.rpm
cpio -idv \< ../elftoaout-2.3-bp155.2.10.src.rpm.tar
tar -xvzf elftoaout-2.3.tgz
make
Note: rpm2cpio produced a file ending in .tar, however it turns out to be a cpio. The RPM also had a patch in it that didn't
look relevant and which I ignored. I ran rpm2cpio on a separate machine in my case.
To build it, just ensure the cross tools are in PATH and then, inside the krups directory issue:
make CROSS=sparc-linux-
apt-get source kernel-source-2.4.27
I manually unpacked the tar and applied just this part of one of the Debian patches to get it to build.
I used this config which was based on one I found on archive.org that had originally come off 'dubinski-family.org'.
To build,
make ARCH=sparc CROSS_COMPILE=/home/cross/build/bin/sparc-linux- oldconfig
make ARCH=sparc CROSS_COMPILE=/home/cross/build/bin/sparc-linux- vmlinux
This produces a ELF format file in vmlinux, which we can then convert to a.out using the elftoaout we built above:
./elftoaout -o vmlinux.aout vmlinux
This can then be copied into the tftp directory as XXXXXXXX.PROL (or symlinked).
This resulted in my hacky patch and config.
This can be build in the same way as 2.4 above.
Early 2.6 etc didn't have the level of CI of modern Linux, many versions just didn't build for SPARC for example. So finding a good starting point is tricky.
mail: fromwebpage@treblig.org irc: penguin42 on libera.chat | matrix: penguin42 on matrix.org | mastodon: penguin42 on mastodon.org.uk