A long time ago (2007 or 2008) I was developing firmware for Cell processor based systems. Most of the Slimline Open Firmware (SLOF) has been released and is also available in Fedora as firmware for QEMU: SLOF.
One of the systems we have been developing firmware for was a PCI Express card called PXCAB. The processor on this PCI Express card was not the original Cell processor but the newer PowerXCell 8i which has a much better double precision floating point performance. A few weeks ago I was able to get one of those PCI Express cards in a 1U chassis:
This chassis was designed to hold two PXCABs: one running in root complex mode and the other in endpoint mode. That way one card was the host system and the other the PCI express connected device. This single card is now running in root complex mode.
I can boot a kernel either via TFTP or from the flash. As writing the
flash takes some time I am booting it right now via TFTP. Compiling the
latest kernel from git for PPC64 is thanks to the available cross
compiler (gcc-powerpc64-linux-gnu.x86_64
) no problem: make
CROSS_COMPILE=powerpc64-linux-gnu- ARCH=powerpc
.
The more difficult part was to compile user space tools but fortunately
I was able to compile it natively on a PPC64 system. With this minimal
busybox based system I can boot the system and chroot
into a Fedora
24 NFS mount.
I was trying to populate a directory with a minimal PPC64 based Fedora 24 system with following command:
dnf --setopt arch=ppc64 --installroot $PWD/ppc64 install dnf
--releasever 24
Unfortunately that does not work as there currently seems to be no way
to tell dnf to install the packages for another architecture. I was
able to download a few RPMs and directly install them with rpm
using
the option --ignorearch
. In the end I also installed the data for the
chroot
on my PPC64 system as that was faster and easier.
Now I can boot the PXCAB via TFTP into the busybox based ramdisk and
from there I can chroot
in to the NFS mounted Fedora 24 system.
The system has one CPU with two threads and 4GB of RAM. In addition to the actual RAM there is also 256MB of memory which can be accessed as a block device using the axonram driver. My busybox based ramdisk is copied to that ramdisk and thus freeing some more actual RAM:
# df -h
Filesystem Size Used Available Use% Mounted on
/dev/axonram0 247.9M 15.6M 219.5M 7% /
System information from the firmware:
SYSTEM INFORMATION
Processor = PowerXCell DD1.0 @ 2800 MHz
I/O Bridge = Cell BE companion chip DD3.0
Timebase = 14318 kHz (external)
Config = SMP disabled
SMP Size = 1 (2 threads)
Boot-Date = 2016-07-21 19:37
Memory = 4096MB (CPU0: 4096MB)