Update README.md

This commit is contained in:
Bananymous 2023-08-31 17:54:12 +03:00
parent 250789aa20
commit 2c136dae2d
2 changed files with 20 additions and 18 deletions

View File

@ -1,51 +1,53 @@
![lines](https://img.shields.io/tokei/lines/github/bananymous/banan-os)
![license](https://img.shields.io/github/license/bananymous/banan-os)
# banan-os
This is my hobby operating system written in C++. Currently runs on x86 based architectures (32 and 64 bit). Currently this operating system supports ext2 filesystem, ata drives (pio mode), vesa/vbe graphics mode and multithreaded processing.
![ss](https://user-images.githubusercontent.com/68776844/230458915-a0c3f1b4-e747-401a-bc0c-07a62d18927c.png)
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.
## Building
> **_NOTE:_** I will be using ninja in these build instructions but you may use any other buildsystem cmake supports. If you want to use ninja, you can either define a environment variable 'CMAKE_GENERATOR=Ninja' or pass '-G Ninja' to all commands invoking cmake.
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.
Create the build directory and cofigure cmake
```sh
mkdir build
cd build
cmake ..
cmake -G Ninja ..
```
 
> **_NOTE:_** The following step has to be done only once. This might take a long time since we are compiling binutils and gcc.
To build the toolchain for this os. You can run the following command.
> ***NOTE:*** The following step has to be done only once. This might take a long time since we are compiling binutils and gcc.
```sh
ninja toolchain
cmake --fresh .. # We need to reconfigure cmake to use the new compiler
cmake -G Ninja --fresh .. # We need to reconfigure cmake to use the new compiler
ninja libstdc++
```
 
To build the os itself you can run either of the following commands. You will need root access since we need to mount the disk image to install grub.
To build the os itself you can run either of the following commands. You will need root access since the sysroot has "proper" permissions.
```sh
ninja qemu
ninja bochs
```
 
You can also build the kernel or disk image without running it:
```sh
ninja kernel
ninja image
```
 
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.
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.
```sh
ninja image-full
```
> ***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.

BIN
assets/banan-os.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB