From Qi-Hardware
Jump to: navigation, search

Iris is a capability-based microkernel for the Ben NanoNote. Its main goal is to give the user maximum power when using programs, to make debugging things (both running on Iris, and interfaced with the NanoNote) as easy as possible. The user must always be in control, even when some programs are actively malicious.

[edit] State

Currently, Iris can boot from usb and micro-sd card. The ability to boot from internal nand flash is being worked on. The booting system has a mostly complete microkernel, with some (partly incomplete) drivers.

[edit] Compiling

To compile, you need a cross-compiler and some programs. By far the easiest is to use Debian. For Ubuntu, the instructions probably work unchanged. For other systems, some things may work differently. For getting a cross-compiler, the easiest is to add the emdebian repository to your sources.list and get it from there. The custom programs can be retrieved with svn using:

svn checkout spark

This creates a directory called spark, which is filled with several programs.

You need to install libshevek, build-essential and devscripts.

First, compile pypp. For this, go to spark/libshevek (and spark/pypp) and run the script. (install build dependencies when the compilation fails on them).

cd spark/pypp
sudo dpkg -i /tmp/pypp*.deb 

Get the source using git:

git clone git://

First prepare the usb-server. Go to mips/nanonote/server and run

autoreconf -fis; ./configure --prefix=/tmp

Go back to the root source directory and run make setup. This starts the usb server and tries to listen on /dev/ttyUSB0 and display the data. This can be changed in the Makefile.

Then run


This will build Iris and the usb-server, and try to restart the usb-server. However, it isn't running yet, so it will fail. It can now be started with:

make setup

Note that the usb device file must give your user read and write permission. If you don't have it, the above command must be performed as root. The best way to give yourself access is by placing an udev rules file in /etc/udev/rules.d/nanonote.rules, which contains:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="601a", ATTRS{idProduct}=="4740", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="fffe", ATTRS{idProduct}=="0002", MODE="0666"

After that, run again:


If everything is right, Iris should be tested.

If anything didn't work, please write here what you had to do to make it work.

[edit] Booting from SD card

Iris can also boot from SD card. If you want that, comment out the line in Makefile.arch

UDC_BOOT = set

by changing it to

#UDC_BOOT = set

and uncomment the boot type that you do want. (If it was commented out and you want to boot using the usb device controller, uncomment it.)

If you build for sd-card boot, an image named iris-sd.tar is created. Unpack this onto the first partition of a micro-sd card (which must be a fat partition) and boot from it. Or use a combined system: build the system for booting from sd card, put the card in your NanoNote, but boot from usb and use

make test

to send Iris to the NanoNote. The kernel is then received over usb, but it will use the SD card as its file system for retrieving its initial files (elfload.elf, init.elf, init.config, and all files loaded by init).

Personal tools