tomo el fuego
trying to fix linker errors on musl
add oldschool pc font
commit linux env file


browse  log 



You can also use your local clone with git send-email.

tomo el fuego

tomo el fuego is a 9family operating system derived from a series of labs which had the aim of porting the system to a raspberry pi. tomo continues the tradition of blending os research and educational resources together.

tomo represents services and resources in a file-like name hierarchy. Programs access them using only the file operations open, read/write, and close. 'Files' are not just stored data, but represent devices, network and protocol interfaces, dynamic data sources, and services. The approach unifies and provides basic naming, structuring, and access control mechanisms for all system resources. A single file-service protocol (the same as Plan 9's 9P) makes all those resources available for import or export throughout the network in a uniform way, independent of location. An application simply attaches the resources it needs to its own per-process name hierarchy ('name space').

Inferno can run 'native' on various ARM, PowerPC, SPARC and x86 platforms but also 'hosted', under an existing operating system (including AIX, FreeBSD, IRIX, Linux, MacOS X, Plan 9, and Solaris), again on various processor types.


This is compilation of Labs completed by LynxLine (http://lynxline.com/projects/labs-portintg-inferno-os-to-raspberry-pi/) into the source code repository.

We started a small and exciting project just for fun as “Porting Inferno OS to Raspberry Pi”. Of course we would like to run it there as native, not hosted. It was always declared that this OS is very simple for porting to new platforms, so let’s just research this and reach new distilled experiences of system programming. Also this OS is very small, simple and easy to tweak for research purposes.

We decided to organize it as some set of small labs with very detailed steps of what is done to reach results and make everything easy to reproduce.

Season 1: Road to boot…

  1. Lab 1, Compiler
  2. Lab 2, Hardware
  3. Lab 3, R-Pi Booting process
  4. Lab 4, Loading kernel
  5. Lab 5, Hello World
  6. Lab 6, Compile something
  7. Lab 7, linking, planning next
  8. Lab 8, memory model
  9. Lab 9, coding assembler part
  10. Lab 10, Bss, memory pools, malloc
  11. Lab 11, _div, testing print
  12. Lab 12, interrupts, part 1
  13. Lab 13, interrupts, part 2
  14. Lab 14, interrupts, part 3
  15. Lab 15, Eve, Hello World from Limbo!

Season 2: Close to hardware…

  1. Lab 16, Adding clocks, timers, converging to 9pi codes
  2. Lab 17, mmu init
  3. Lab 18, we have a screen!
  4. Lab 19, keyboard through serial, fixes to get Ls
  5. Lab 20, devusb, usbdwc and firq, first step to usb
  6. Lab 21, porting usbd, fixed in allocb, see usb in actions
  7. Lab 22, Usb keyboard
  8. Lab 23, hard disk or SD card
  9. Lab 24, network, part 1
  10. Lab 25, network, part 2
  11. Lab 26, floating point



  1. Download latest zip package from Downloads
  2. Pepare SD card with first DOS partition for boot (about 100MB, there is a problem with dossrv and large partitions)
  3. Unzip all files to SD (boot.scr, kernel.bin, ... should in root of SD)
  4. Boot Raspberry Pi
  5. By default it starts styxlisten -A tcp!*!564 export /, so you can mount it on other host by mount -A tcp!!564 /n/remote/rpi (-A means no auth, IP is for example, see what it got by DHCP)

Special thanks:

  • Charles Forsyth
  • Richard Miller
  • Peter D. Finn