banan-os/README.md

55 lines
2.3 KiB
Markdown
Raw Normal View History

2023-04-19 00:46:42 +03:00
![license](https://img.shields.io/github/license/bananymous/banan-os)
2023-03-18 04:05:59 +02:00
# banan-os
2023-04-06 20:59:45 +03:00
2023-08-31 17:54:12 +03:00
This is my hobby operating system written in C++. Currently supports only x86_64 architecture. We have a read-only ext2 filesystem, read-write ramfs, IDE disk drivers in ATA PIO mode, userspace processes, executable loading from ELF format, linear VBE graphics and multithreaded processing on single core.
![screenshot from qemu running banan-os](assets/banan-os.png)
## Code structure
Each major component and library has its own subdirectory (kernel, userspace, libc, ...). Each directory contains directory *include*, which has **all** of the header files of the component. Every header is included by its absolute path.
2023-04-06 21:01:27 +03:00
2023-04-06 20:59:45 +03:00
## Building
2023-08-31 17:54:12 +03:00
There does not exist a complete list of needed packages for building. From the top of my head I can say that *cmake*, *ninja*, *make*, *grub*, *rsync* and emulator (*qemu* or *bochs*) are needed.
2023-04-06 20:59:45 +03:00
You can and *should* pass cmake variable QEMU_ACCEL set to proper accelerator to cmake commands. For example on Linux this means adding -DQEMU_ACCEL=kvm to the end of all cmake commands.
2023-04-06 20:59:45 +03:00
Create the build directory and cofigure cmake
```sh
mkdir build
cd build
cmake ..
2023-04-06 20:59:45 +03:00
```
To build the toolchain for this os. You can run the following command.
2023-08-31 17:54:12 +03:00
> ***NOTE:*** The following step has to be done only once. This might take a long time since we are compiling binutils and gcc.
2023-04-06 20:59:45 +03:00
```sh
ninja toolchain
cmake --fresh .. # We need to reconfigure cmake to use the new compiler
2023-06-02 18:43:30 +03:00
ninja libstdc++
2023-04-06 20:59:45 +03:00
```
2023-08-31 17:54:12 +03:00
To build the os itself you can run either of the following commands. You will need root access since the sysroot has "proper" permissions.
2023-04-06 20:59:45 +03:00
```sh
ninja qemu
ninja bochs
```
You can also build the kernel or disk image without running it:
```sh
ninja kernel
ninja image
```
2023-08-31 17:54:12 +03:00
If you have corrupted your disk image or want to create new one, you can either manually delete *banan-os.img* and cmake will automatically create you a new one or you can run the following command.
2023-04-06 20:59:45 +03:00
```sh
ninja image-full
```
2023-08-31 17:54:12 +03:00
> ***NOTE*** ```ninja clean``` has to be ran with root permissions, since it deletes the root filesystem.
### Contributing
Currently I don't accept contributions to this repository unless explicitly told otherwise. This is a learning project for me and I want to do everything myself. Feel free to fork/clone this repo and tinker with it yourself.