/nanoos

Automatically exported from code.google.com/p/nanoos

Primary LanguageC

nanoos

Archeved for reference purpose only. not guaranteed to compile and/or work for modern systems

Automatically exported from code.google.com/p/nanoos Please Contribute to this project

It is really Nice and my pleasure that there are some new OS projects based out of Nano OS e.g K++ by Patrick Plenefisch. My sincere thanks to Patrick and welcome to the fun world of machines.

if you are interested please contact me

Please put your comments at Comments

Nano OS

An object oriented OS written in C++ and assembly. How to

I recommend trying out the floppy disk image(very recent) first. Please download the disk image. use qemu or bochs to boot the image.

After you satisfied your self please join the project and checkout the source. Play around and understand what is happening where. then discuss here and try to implement small chunks and small functionality.

I will suggest try out modifying the shell code to add few more commands.

Next modify IStream subsystem to handle int, pointer, HEX etc... Present Features

Multi boot compliant (tested with GRUB) Hope it will work with syslinux too
C++ minimal run time is present
written as object oriented kernel
32-bit protected mode
Memory manager for physical memory only
CPU detection, Memory detection and IDE hard disk detection
IDE hard disk read is possible
Partion table parsing is in-built to IDE code
FAT16 Partitions are recognised now
Multi Tasking(kernel threads)
round-robin scheduling with priority
Rudimentary Ethernet(NE2k) driver

To Do

Memory manager will be re-written using paging(first priority)
    Chris Gheezee's Malloc implementation based on heap implemented.
Multi tasking (second priority)
    thread join need to be proper (see thread_catcher())
application loading atleast elf and coff binary.(third priority)
I am planning to create a driver template so that it will be easy to write drivers
floppy driver
IDE driver ( See changelog bellow)
network stack (might be mu-tcp/ip)
ether net driver for rtl series and NE2k
NFS client side (too ambitious )
Modify IStream and OStream for better functionality. specially implemet getstring() in cin

Filesystem atleast FAT-16 will be nice. (any help on this with reference to the present code will be highly appreciated)

Somany more

Note

Help me to grow this embryo

K++ https://bitbucket.org/byteit101/k/overview is written based on NanoOS with good additions. Thanks Patrick Plenefisch

remember this is not going to compete with any other OS

This is purely for Experimentation and Learning, Covered under GNU GPL-V2

if you find this interesting and want to contribute, I will be happy to accept your code Screen Shots

NanoOS Booting the GRUB screen

http://nanoos.googlecode.com/files/nanoos-grub.png

NanoOS Shell with remains of other tasks

http://nanoos.googlecode.com/files/nanoos-shell1.png

NanoOS Shell Prompt ready

http://nanoos.googlecode.com/files/nanoos-shell2.png

NanoOS Shell Showing Tasks with there states and parent and number of children

http://nanoos.googlecode.com/files/nanoos-tasks.png

NanoOS shell showing pci info in qemu( my BOCHS doesnt have PCI ???)

http://nanoos.googlecode.com/files/nanos-pci-listing.png change log

9th december 2008: Kmalloc kfre krealloc implementation based on Chris gheeze's Heap based first fit allocator

18th december 2008: rudimentary dma and fdc code ported.

5th January 2009 : IDE hard disk driver is implmented. ( Only Reading) This works under BOCHS but not Under Qemu, I don't know Why???

7th January 2009 : IDE driver in read_sector a minor bug is fixed, Partition Scanning is implemented.

13th January 2009 : IDE driver now works fine under BOCHS and qemu. cpuinfo now displays properly.

9th February 209 : A rudimentary FAT16 is implmented, It now only be used to check if the Kernel recognizes FAT16 partition or not. The Image Works with qemu. For details how to PLease Check the Wiki.

11th March 2010 : Few modification to malloc family in kheap.cpp Initial PCI code but not working, initial tasking code not tested, Use of class template for singleton class. multiboot class is derived from singleton template.

20th March 2010 : Multitasking of 4 task for done. This is just to test the context switch is working correctly. :) enjoy.

30th April 2010 : Task/thread functions are accepting parameter. And thread exit is handled,

7th June 2010 : Basic Thread join is working. 10th June 2010: the Directory structure is changed and the build process is changed from Bash script to Makefile.

19th June 2010 : Initial PCI stuff added pci.cpp pci.h pcidef.h

13th July 2012 : Now uses GRUB-2 based ISO use 'make iso2' for make. Some how I think i managed to put the IDE driver working but in alpha stage. If you can help me then please do so.

20th July 2012 : Boot using BOCHS or QEMU. ATA driver is working and can display the root directory of each partitions identified as fat16. on the shell prompt type "ide" to see the physical disks and "sysdriveinfo" to see the details.

3rd august 2012: Basic RTL8139 PCI driver implementation, The driver is not firing IRQ.

22nd August 2012: Now The RTL8139 driver fires interrupt.