The Raspberry Pi (RPi) does exist, but while waiting for it to be delivered here are some notes to make it easier to begin porting Xinu to the platform. (Work in Progress)
The RPi uses a fairly standard USB micro-B connector for power (only the power pins are physically present). It needs 700 mA at 5 V, so most computers or cell phone chargers should work. Embedded Linux source
The shipped RPi board doesn't come with a serial port attached (no surprise there). But it does have an expansion header that includes pin outs for a serial port (and more). The details can be found on the Embedded Linux RPi page. You will probably just want to solder on the full 2x13 pin header then deal with the outputs later incase you want to take advantage of the other pins.
You will want at least a Class 6 or above SD card (lower class cards have been known to have read failures). I (Michael) ordered two Kingston 8 GB Class 4 SDHC memory cards from Amazon. 8 GB is probably excessive, but they only cost ~$7 each, and if you intend to have a full Linux install available it might not be a bad idea to go for > 4 GB.
Xinu is, of course, the target operating system for the RPi platform. However, there are some steps to take before we get there.
Sadly the RPi does not come with a standard bootloader. Instead it simply boots off the SD card (and only the SD card) when power is applied, so a straight from the network boot is not an option. However, SD cards are low cost so you should be able to install a bootloader on the SD card that enables a network boot. It may "taint" the environment, but it shouldn't be horrible or worse than a typical boot loader.
It looks like the grub bootloader should be able to support network booting Grub PXE network boot. This is probably the most viable option, but other options may exist and work better for the RPi.
The boot process seems to be as follows:
- Power applied to the Raspberry Pi
- Graphic Processor Unit (GPU) begins executing a stage 1 bootloader found in ROM on the chip
- The stage 1 bootloader reads the SD card and loads stage 2 (/boot/bootcode.bin) into on-chip cache (L2)
- GPU executes stage 2 bootloader which enables SDRAM and reads a stage 3 bootloader (/boot/loader.bin) into SDRAM
- GPU executes stage 3 bootloader which understands how to read ELF files and reads the GPU firmware bootloader (/boot/start.elf)
- /boot/start.elf reads /boot/config.txt, /boot/cmdline.txt, and /boot/kernel.img
- /boot/kernel.img is essentially the Linux zImage (i.e. ARM code), it contains some parameters in the first 32k but the rest is zImage proper
The bootcode.bin, loader.bin, and start.elf files are all opaque to ARM programmers because they are GPU code files meaning we cannot change them. For Linux the kernel.img file is loaded starting at 0x00000000, which puts the start of Linux code (head.S) at 0x00008000. This file is built by the mkimage tool associated with the Raspberry Pi distribution. It *should not* be needed for non-Linux code because it only attaches some special code that is used for Linux kernel parameter passing so the kernel doesn't need extra modifications. As an example: HaikuOS does not use the mkimage tool to get their kernel to boot.
As mentioned above, to get a network boot working we should be able to make a new kernel.img file that enables serial port access and network access then copies and jumps to a known offset for execution. As a starting point dwelch67 has something like this on github (though it seems to be very specific and not network oriented).
Command Line Information
Processor : ARMv6-compatible processor rev 7 (v6l) BogoMIPS : 697.95 Features : swp half thumb fastmult vfp edsp java tls CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xb76 CPU revision : 7 Hardware : BCM2708 Revision : 0000 Serial : 0000000014xxxxxx
MemTotal: 186540 kB MemFree: 130592 kB Buffers: 9552 kB Cached: 29360 kB SwapCached: 0 kB Active: 18404 kB Inactive: 29176 kB Active(anon): 9108 kB Inactive(anon): 4 kB Active(file): 9296 kB Inactive(file): 29172 kB Unevictable: 0 kB Mlocked: 0 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 186540 kB LowFree: 130592 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 24 kB Writeback: 0 kB AnonPages: 8680 kB Mapped: 10476 kB Shmem: 448 kB Slab: 5648 kB SReclaimable: 2816 kB SUnreclaim: 2832 kB KernelStack: 568 kB PageTables: 688 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 93268 kB Committed_AS: 94416 kB VmallocTotal: 188416 kB VmallocUsed: 896 kB VmallocChunk: 186708 kB