Sunday, April 17, 2011

Booting a Pogoplug with Fedora ARM

So, this week I received my Pogoplug, and it is currently running Fedora 13 for ARM (Beta-2). The Pogoplug has an ARM/Kirkwood board inside, just like a Sheevaplug and other Plug* computers. Below are some notes on how to get Fedora installed on an external USB-drive (and keeping most of the original Pogoplug software on it, but disabled).

The Fedora ARM Project provides a Beta root-disk for Fedora 13. Downloading the .tar.bz2 and extracting it to the first partition (formatted as ext3) of an USB-disk should make a good start for any Pogoplug related development.

The bootloader (u-boot) has been updated according to the well written instructions (includes a script for automation) from Jeff Doozan. The instructions are mainly targeted for Debian, but are a very useful source of information. Using the script, the bootloader gets replaced and it is possible to boot from an external USB-disk when placing the kernel (uImage) and initrd.img (uInitrd) under /boot on the USB-disk.

There is a kernel with initrd.img and modules available for ARM/Kirkwood boards. Unfortunately this kernel does not seem to fully boot on the Pogoplug. As there is no monitor or serial port connector on the outside of the pink box (who knows whats hidden inside), troubleshooting a boot issue is quite challenging. The updated u-boot supports netconsole. The output over netconsole shows that the kernel and initrd.img are loaded correctly and can be started. After which the kernel is supposed to take over the communication with any human being (or machine for that matters). Unfortunately the installation does not seem to get to a point where logs are written (checking the removable USB-storage after trying to boot). There is also no networking happening, eventhough the rootfs has been configured for DHCP.

Luckily there is an other kernel available for a GuruPlug (which is also a similar ARM board) which should function on any ARM/Kirkwoood. This specific kernel does not use an initrd/initramfs, so when trying to boot it, make sure to have only a /boot/uImage and no /boot/uInitrd. Booting a Pogoplug with the GuruPlug kernel- seems to work well:
Linux version (root@Xion) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #1 PREEMPT Mon Nov 29 06:21:49 EST 2010
CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=00053977
CPU: VIVT data cache, VIVT instruction cache
Machine: Marvell SheevaPlug Reference Board
Memory policy: ECC disabled, Data cache writeback
On node 0 totalpages: 65536
free_area_init_node: node 0, pgdat c058a5f4, node_mem_map c065e000
  Normal zone: 512 pages used for memmap
  Normal zone: 0 pages reserved
  Normal zone: 65024 pages, LIFO batch:15
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 65024
Kernel command line: console=ttyS0,115200 root=/dev/sda1 rootwait rootfstype=ext2 mtdparts=orion_nand:1M(u-boot),4M(uImage),32M(rootfs),-(data)
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 256MB = 256MB total
Memory: 253380k/253380k available, 8764k reserved, 0K highmem