COMROGUE - Research OS for Raspberry Pi (bare metal)
Go to file
2013-06-19 00:39:29 -06:00
documentation Initial checkin of COMROGUE source after having gotten initial memory map right 2013-04-11 02:10:10 -06:00
idl adding more to arena and thread cache in heap, including defining interfaces for thread-local data (will be dummy objects in kernel) 2013-06-19 00:39:29 -06:00
include/comrogue more heap allocation stuff plus shifting around the HeapCreate function signature 2013-06-17 23:36:38 -06:00
kernel adding more to arena and thread cache in heap, including defining interfaces for thread-local data (will be dummy objects in kernel) 2013-06-19 00:39:29 -06:00
tools added some extra interfaces for heap support, and the code structures defined 2013-05-07 02:42:36 -06:00
.gitignore set up the right .gitignore files 2013-04-11 02:18:29 -06:00
armcompile.mk modified rbtree code to not need the local key value; also set compiler to treat all warnings as errors 2013-06-07 21:31:32 -06:00
COPYRIGHT Initial checkin of COMROGUE source after having gotten initial memory map right 2013-04-11 02:10:10 -06:00
Makefile Initial checkin of COMROGUE source after having gotten initial memory map right 2013-04-11 02:10:10 -06:00
README added README file preparatory to push to GitHub 2013-05-29 22:25:41 -06:00

The COMROGUE Operating System for Raspberry Pi

Copyright (c) 2013, Eric J. Bowersox / Erbosoft Enterprises
All rights reserved.
See the file "COPYRIGHT" for full copyright information.
-------------------------------------------------------------------------------
BACKGROUND

The COMROGUE operating system stems from some ideas I had back when I was primarily a Windows developer working
with COM (in the late 1990's or so).  The COM concept of interfaces seemed so elegant, I wondered if it would be
possible to do an entire operating system with a COM paradigm, that is, where every "system call" was actually a
call to a COM interface.  Some interfaces might be ones defined by the existing COM implementation (for instance,
"file handles" would be IStream pointers, and memory might be allocated from the heap via an IMalloc interface),
others would be entirely novel.  For one reason and another, I never did much with this, though I toyed with the
idea at one point using VirtualBox on an x86 system.  The Raspberry Pi, however, offers a unique possibility, in
that its generic hardware is much more limited in scope than a PC's, so something ike this might just be possible
without too much fiddling with differences in hardware.

Needless to say, this will be considered a "work in progress" for quite some time to come. :-)

BUILDING

You will need a cross-compiler setup on Linux; I use gcc-4.7.1 and binutils-2.22, installed in the tree
/opt/gnuarm and with the prefix "arm-none-eabi".  Other versions MAY work.  The compiler tools are located
with the variables ARMDIR and ARMPREFIX in the armcompile.mk file.

To build the "pidl" MIDL compiler (in tools/pidl), you will need Perl and Yapp installed.

You will also need GNU Make to execute everything (of course).

The command "make" in the root directory of the source will build everything.  The COMROGUE kernel will be in
kernel/kernel.img when the build is finished.

EXECUTING

Use a blank, FAT-formatted SD card (almost any size will do; I use 2 Gb cards as they're fairly common and cheap
these days).  Download the current Raspberry Pi firmware files from https://github.com/raspberrypi/firmware; the
files you need will be bootcode.bin, fixup.dat, and start.elf in the boot/ subdirectory.  Copy those three files
to your SD card, along with the kernel.img file from COMROGUE's kernel/ directory.  Insert the card into your
Raspberry Pi and power up.

Right now, the only output you'll see comes via the "mini-UART" serial output, which COMROGUE uses for trace output.
To see it, you'll need a couple of parts sold by Spark Fun Electronics of Boulder, CO:

*  FTDI Basic Breakout (3.3V), https://www.sparkfun.com/products/9873
*  Jumper Wires Premium 6" M/F (10-pack), https://www.sparkfun.com/products/9140

You'll also need a USB A-to-mini-B cable to hook the serial converter board to your PC's USB port.

Connect jumper wires between the pins of the FTDI board and the GPIO connector on the Raspberry Pi as follows:

*  GPIO pin 6 -> GND (ground) on FTDI.  (Suggested jumper wire color: black.)
*  GPIO pin 8 -> RXI (receive input) on FTDI. (Suggested jumper wire color: red, for data *R*eceived from the Pi.)
*  GPIO pin 10 -> TXO (transmit output) on FTDI. (Suggested jumper wire color: green, for data *G*oing to the Pi.)

Connect the FTDI to your computer with the USB A-to-mini-B cable.  On your PC, open Minicom and connect to port
/dev/ttyUSB0.  Set the program to 115200 baud, 8 data bits, no parity, 1 stop bit, NO flow control (either hardware
or software).  You should see some messages from COMROGUE when you apply power to the Pi.

FURTHER INFORMATION

The documentation/ directory will eventually contain more documentation on how the system works/will work.  In
the meantime, I have tried to comment the code well enough to show what's going on.