Toy operating system written for educational purposes.
Go to file
lucic71 04bacc1681 Merge branch 'master' of https://tildegit.org/lucic71/lucicos 2022-06-28 19:41:49 +03:00
bochs Printed some nice text on the screen and serial 2022-06-28 19:40:51 +03:00
demo Updated README 2022-06-28 19:40:51 +03:00
kernel Added kernel size assertion 2022-06-28 19:40:51 +03:00
libc Added support for hex numbers in printf 2022-06-28 19:40:51 +03:00
LICENSE.md Create LICENSE.md 2022-06-28 19:40:51 +03:00
README.md Fixed lists in README 2022-06-28 19:40:51 +03:00
bochs.sh Added debug symbols for bochs 2022-06-28 19:40:51 +03:00
build.sh Reformatting project structure 2: Added shell scripts 2022-06-28 19:40:51 +03:00
clean.sh Reformatting project structure 2: Added shell scripts 2022-06-28 19:40:51 +03:00
config.sh Reformatting project structure 2: Added shell scripts 2022-06-28 19:40:51 +03:00
default-host.sh Reformatting project structure 2: Added shell scripts 2022-06-28 19:40:51 +03:00
headers.sh Reformatting project structure 2: Added shell scripts 2022-06-28 19:40:51 +03:00
iso.sh Reformatting project structure 2: Added shell scripts 2022-06-28 19:40:51 +03:00
qemu.sh Added debug settings for qemu 2022-06-28 19:40:51 +03:00
sym.sh Added debug symbols for bochs 2022-06-28 19:40:51 +03:00
target-triplet-to-arch.sh Reformatting project structure 2: Added shell scripts 2022-06-28 19:40:51 +03:00

README.md

lucicOS

OS logo

lucicOS is an educational, UNIX-like operating system built from scratch using the following resources:

At the moment it is not aimed to be portable or support multiple architectures. It is just my attempt to learn some important concepts about operating systems and develop my coding techniques.

It only supports x86 architecture.

Building the project

It can be built using the following command: ./build.sh. To run the OS in bochs, just run ./bochs.sh, the same applies to qemu, just run ./qemu.sh.

For building, running and testing, I use the following tools:

  • i686-elf-gcc (GCC) 8.2.0
  • GNU ld (GNU Binutils) 2.31.1
  • GNU ar (GNU Binutils) 2.31.1
  • QEMU emulator version 2.11.
  • Bochs ??

Screenshots

Screenshot

Features

At this moment there is still a lot of work to do in order to call this a real Operating System. These are some features that I managed to understand and implement:

  • VGA (writing on screen)
  • Serial (writing on serial ports)
  • Keyboard (reading characters/shortcuts from keyboard)
  • Timer (Receiving data from Programmable Interval Timer)
  • Physical and Virtual Memory Mangers
  • Interrupt request and Interrupt Service Routines
  • Global Descriptor Table and Protected Mode

What I am currently working at:

  • Moving the kernel in the Higher Half
  • Writing a consistent Page Allocator
  • Making a tutorial out of this project

License

This project is licensed under BSD-2-Clause License.

Notes

The only supported architecture is x86 because it has the richest documentation and all the tutorials on the internet are x86 oriented.

I am still struggling to find an optimal project structure that can help me build this project faster and easier, currently I am trying different structures found on the internet or designed by myself.