2014-08-10 07:15:55 +02:00
eduOS - A teaching operating system
2013-11-13 20:57:41 +01:00
===================================
2013-11-13 20:43:43 +01:00
Introduction
------------
eduOS is a Unix-like computer operating system based on a monolithic architecture for educational purposes.
It is derived from following tutorials and software distributions.
2016-01-11 08:55:40 +01:00
2014-08-10 08:36:37 +02:00
0. bkerndev - Bran's Kernel Development Tutorial
2013-11-13 21:03:35 +01:00
2016-01-11 08:55:40 +01:00
The first steps to realize eduOS based on Bran's Kernel Development
2013-11-13 20:43:43 +01:00
Tutorial (http://www.osdever.net/tutorials/view/brans-kernel-development-tutorial).
In particular, the initialization of GDT, IDT and the interrupt handlers are derived
from this tutorial.
2014-08-10 08:36:37 +02:00
1. kprintf, umoddu3, udivdi3, qdivrem, divdi3, lshrdi3, moddi3, strtol, strtoul, ucmpdi2
2013-11-13 21:03:35 +01:00
2013-11-13 20:43:43 +01:00
This software contains code derived from material licensed
to the University of California by American Telephone and Telegraph
Co. or Unix System Laboratories, Inc. and are reproduced herein with
the permission of UNIX System Laboratories, Inc.
2014-12-29 18:23:49 +01:00
2. JamesM's kernel development tutorials
The first version of eduOS's virtual filesystem and its initial
ramdiks is is derived from JamesM's kernel development tutorials.
(http://www.jamesmolloy.co.uk/tutorial_html/index.html)
2013-11-13 20:43:43 +01:00
2015-01-18 09:45:39 +01:00
3. newlib
The C library "newlib" is used to build user-level aplications on the top
of eduOS. Newlib is a collection of source code, it is
distributed under the terms of several different licenses. All of the
licensing is either public domain or BSD-like, which means that even
proprietary applications can adopt newlib because its use does not
require distribution of the end work's source code. For convenience, all
of newlib's licenses are gathered up into the file COPYING.NEWLIB,
which is included in the directory newlib or in newlib's source code.
2013-11-13 20:43:43 +01:00
Requirements of eduOS
---------------------
* Currently, eduOS supports only x86-based architectures.
* Following command line tools have to be installed:
2016-01-10 21:10:02 +01:00
make, gcc, binutils, git, qemu, nasm, gdb
2013-11-13 20:43:43 +01:00
* The test PC has to use grub as bootloader.
Building eduOS
--------------
2016-01-11 08:55:40 +01:00
0. It is now possible to automatically configure eduOS with one command. To configure the system, run the "configure" script in the this dirctory, e.g.: ./configure
1. Build kernel with "make"
2013-11-13 20:43:43 +01:00
Start eduOS via qemu
--------------------
2014-08-10 08:36:37 +02:00
0. Install qemu to emulate an x86 architecture
1. Start emulator with "make qemu"
2013-11-13 20:43:43 +01:00
Boot eduOS via grub
-------------------
2014-08-10 08:36:37 +02:00
0. Copy eduos.elf as eduos.bin into the directory /boot. (cp eduos.elf /boot/eduos.bin)
2016-01-11 08:55:40 +01:00
1. Create a boot entry in the grub menu. This depends on the version of grub, which is used by
2013-11-13 20:43:43 +01:00
the installed Linux system. For instance, we added following lines to /boot/grub/grub.cfg:
2013-11-13 21:02:22 +01:00
< pre >
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
2013-11-13 20:43:43 +01:00
menuentry "Boot eduOS!" {
multiboot /boot/eduos.bin
boot
}
2013-11-13 21:02:22 +01:00
< / pre >
2013-11-13 21:19:59 +01:00
2013-11-21 20:28:21 +01:00
Overview of all branches
------------------------
2016-01-11 08:55:40 +01:00
0. stage0 - Smallest HelloWorld of the World
2013-11-21 20:28:21 +01:00
Description of loading a minimal 32bit kernel
2014-01-22 15:28:52 +01:00
1. stage1 - Non-preemptive multitasking
2013-11-21 20:28:21 +01:00
Introduction into a simple form of multitasking, where no interrupts are
required.
2014-01-22 15:28:52 +01:00
2. stage2 - Synchronisation primitives
2013-11-26 09:33:59 +01:00
Description of basic synchronization primitives
2014-01-22 15:28:52 +01:00
3. stage3 - Preemptive multitasking
2013-11-27 22:49:30 +01:00
2013-11-27 22:53:53 +01:00
Introduction into preemptive multitasking and interrupt handling
2013-11-27 22:49:30 +01:00
2014-01-22 15:28:52 +01:00
4. stage4 - Support of user-level tasks
Add support of user-level tasks with an small interface for basic system calls
2014-11-30 09:05:19 +01:00
5. stage5 - Enabling paging
2014-12-05 09:43:55 +01:00
Add support of paging. See http://www.noteblok.net/2014/06/14/bachelor
for a detailed description.
2014-11-30 09:05:19 +01:00
2014-12-09 10:09:03 +01:00
6. stage6 - Add UART support
2014-12-11 22:47:18 +01:00
2014-12-09 10:09:03 +01:00
Add basic support of a serial device
2014-12-29 18:23:49 +01:00
7. stage7 - A simple file system
2015-01-19 12:33:43 +01:00
Add a virtual filesystem and a prototype of an initial ramdisk
2014-12-29 18:23:49 +01:00
2015-01-18 09:45:39 +01:00
8. stage8 - HelloWorld in user space
Add HelloWorld example with a small C library (newlib)
2013-11-13 21:19:59 +01:00
Usefull Links
-------------
2014-08-10 08:32:51 +02:00
0. http://www.gnu.org/software/grub/manual/multiboot/
1. http://www.osdever.net/tutorials/view/brans-kernel-development-tutorial
2. http://www.jamesmolloy.co.uk/tutorial_html/index.html
3. http://techblog.lankes.org/tutorials/
4. http://www.os.rwth-aachen.de
2014-12-05 09:43:55 +01:00
5. http://www.noteblok.net/2014/06/14/bachelor
2015-01-18 09:45:39 +01:00
6. https://sourceware.org/newlib/