The Ada Microkernel Project (or TAMP): The plan
Following on from my hello world style kernel, I've decided to post a plan for what I intend to accomplish in regards to an OS design.
I've been thinking about OS designs for over 10 years on and off and have wanted to develop one. Originally, I was going to do it in C but as I now use Ada more and more I want to use this language for the implementation (and assembly where necessary). The main thing that has been stopping me from developing an OS is the thought that I didn't really know how to. I pretty much know the basics of the underlying core of an OS, e.g. setting up interrupts, memory management, etc. so that is, at least, a starting point.
So, here's the plan; develop a microkernel based OS using Ada. This OS should provide a microkernel, some basic services and be able to run some applications. I'm not aiming to provide a full OS, just something to learn from. I'm also not going to be trying to implement POSIX, it'll be something else entirely.
Targets
I intend for the OS to be portable to other architectures and it should be capable of being compiled for big-endian and little-endian machines. I'll also be aiming to provide versions for both 32-bit and 64-bit architectures.
This might seem a bit excessive, but I believe that the OS designer should start thinking about making their OS cross platform from the outset. Here is a list of the tools I will use:
- binutils-2.18
- GCC/GNAT-4.2.2
- NewLib (latest version from CVS)
- GNU Make (standard Ubuntu version is fine)
- QEMU (latest version from CVS)
- GRUB 2 (there's a problem with GRUB 1 segfaulting on my Ubuntu and the GRUB developers are only interesting in talking/helping with GRUB 2)
These tools will be available on all Linux and Win32 platforms. I'm not too sure about MacOS X, I'm fairly sure that they have the GNU tools available, they definitely have GNAT. I'll be using Ubuntu Linux and compiling my own toolchain. I'll also be attempting to port a minimal Ada runtime so I can have full GNAT tool support (including ASIS) and I will be showing the build process of each relevant component.
The QEMU emulator provides a number of system targets:
- ia32 (PC)
- Little-endian
- 32-bit
- Hardware TLB
- amd64 (PC)
- Little-endian
- 64-bit
- Hardware TLB
- MIPS (Malta board)
- Endian switchable by running different emulators. On real hardware this is done when executing the kernel.
- 32/64-bit
- Software TLB
QEMU provides these targets and this should keep me going for a while anyway. Also, by showing how to do memory managment using a software MMU I'll get more experience as will the reader.
I also forgot to mention, that apart from being different hardware, they'll also provide interesting challenges regarding the booting environment.
Write a comment
- Required fields are marked with *.
