82 lines
4.3 KiB
Markdown
82 lines
4.3 KiB
Markdown
# klange's OS Development Repo #
|
|
I'm writing an OS because I'm bored and want a massive project to suck up the little pieces of my time for the next few years.
|
|
|
|
## Testing it Out ##
|
|
Clone the git repository and run `make` and `sudo make install` (yes, the `sudo` is necessary because of how I am building my floppy image). This will build a working `bootdisk.img` that you can load with an emulator. If you have QEMU installed, you can then run `make run` to start the emulator. You should see a GRUB menu with one entry which should boot into the kernel.
|
|
|
|
My testing environment is a combination of QEMU and VirtualBox.
|
|
|
|
## Goals and Roadmap ##
|
|
Overall, the goal of this project is to write a relatively POSIX-compatible OS from the ground up. With a focus on generic hardware functionality and universal specifications like VESA, I hope to eventually get something fairly complete in terms of what an OS should be. At some times, I may focus on an actual piece of complex hardware (I am looking to write a basic driver for Intel graphics cards based on the X driver and the Mesa components), but in general, I will stick to generic interfaces.
|
|
|
|
### Basic Goals ###
|
|
* Create a working modular monolithic kernel capable of executing arbitrary ELF binaries
|
|
* Write, from scratch, a C standard library using past experience in writing standard library functions
|
|
* Support POSIX threads
|
|
* Implement an existing file system, specifically EXT2
|
|
* Be able to manipulate VESA modes to run at an optimal resolution for graphics
|
|
* Handle basic networking on a virtual Ethernet device (DHCP, TCP, etc.)
|
|
|
|
### Loftier Goals ###
|
|
Some things are far easier said than done, but I like to say them anyway. The time span for these depends greatly on how quickly the basic goals are completed and can range anywhere from a few months to years from now.
|
|
|
|
* Create a working implementation of Wayland under VESA (will be slow)
|
|
* Port Qt (under Wayland) and some Qt apps
|
|
* Support audio in a way that doesn't suck like Linux's mess of libraries and mixers
|
|
* Various hardware-specific drivers (primarily for my T410):
|
|
* Intel graphics driver, with acceleration so Wayland isn't slow
|
|
* Realtek wireless driver, with WPA2
|
|
* Specific drivers for the Thinkpad itself (or just acpi?)
|
|
|
|
### Roadmap ###
|
|
Currently, I have a kernel capable of reading its multiboot parameters, which is terribly un-useful. The current, ordered, plan of attack is as follows:
|
|
|
|
* Finish James M's tutorial (second half), which covers:
|
|
* Paging *done*
|
|
* Heap
|
|
* VFS
|
|
* Initial RAM Disk (except I'll probably use my own format for the directory structure)
|
|
* Multitasking
|
|
* User mode
|
|
* Finish basic kernel functionality
|
|
* Loading ELF binaries and executing them in user mode
|
|
* Complete system call table
|
|
* Get a better semblance of users and groups
|
|
* Write a file system driver for a real file system
|
|
* Target is EXT2, but might do FAT
|
|
* Move OS development images to some form of virtual drive (VDI or something QEMU compatible)
|
|
* Implement a VESA mode handler
|
|
* Requires a Virtual 8086 monitor
|
|
* Need to be able to use graphics modes and still have output, so write a framebuffer terminal
|
|
* Complete libc
|
|
* Enough to run basic unix tools...
|
|
* Port some basic UNIX tools
|
|
* a shell (bash and zsh, because I like bash, but the office uses zsh)
|
|
* ls, mv, rm, etc.
|
|
* here's a real test: perl
|
|
* Implement networking
|
|
* IPv4
|
|
* Ethernet driver for QEMU or VirtualBox
|
|
|
|
*Anything beyond this point is part of the 'Loftier Goals' section*
|
|
|
|
* Wayland compositor
|
|
* based on specifications for a Wayland environment
|
|
* Port some of the Wayland sample applications
|
|
* Write my own!
|
|
* Port Qt
|
|
* Specifically, for Wayland
|
|
* Qt is huge and has its own standard library, might need more extensive libc
|
|
* Need to support C++-built stuff, so will probably need a C++ stdlib.
|
|
* Audio drivers
|
|
* Maybe before Qt?
|
|
* Should support software mixing at least, hardware under a virtual machine, maybe my Intel hw
|
|
|
|
## References ##
|
|
I'll be more detailed here eventually, but for the most part, I have been using:
|
|
|
|
* [James M's kernel development tutorials](http://www.jamesmolloy.co.uk/tutorial_html/index.html)
|
|
* [Bran's Kernel Development Tutorial](http://www.osdever.net/bkerndev/) *completed*
|
|
* [Skelix's OS tutorial](http://en.skelix.org/skelixos/)
|
|
|