Update README.
This commit is contained in:
parent
f1c67d88ed
commit
594a6aac54
31
README.md
31
README.md
|
@ -8,33 +8,44 @@ memory management, process scheduling, and hardware access.
|
||||||
## Directory Structure
|
## Directory Structure
|
||||||
|
|
||||||
The subdirectories of the project are as follows:
|
The subdirectories of the project are as follows:
|
||||||
- **zion**: Contains kernel code as well as a couple headers that user space uses to interface with the kernel.
|
- **zion**: Contains kernel code as well as a couple headers that user space uses to interface with
|
||||||
|
the kernel.
|
||||||
- **lib**: Library code used by the kernel and user space.
|
- **lib**: Library code used by the kernel and user space.
|
||||||
- **sys**: System services.
|
- **sys**: System services.
|
||||||
- **sysroot**: Files that are copied to the root filesystem.
|
- **sysroot**: Files that are copied to the root filesystem.
|
||||||
- **toolchain** and **scripts**: Contain tooling for the cross-compile environment.
|
- **toolchain** and **scripts**: Contain tooling for the cross-compile environment.
|
||||||
- **yunq**: Contains the El Yunque IDL used for IPC between processes in userspace.
|
- **yunq**: Contains the El Yunque IDL used for IPC between processes in userspace.
|
||||||
|
|
||||||
Where available, further documentation about each of these components can be found in the README files in each respective subdirectory.
|
Where available, further documentation about each of these components can be found in the README fi
|
||||||
|
les in each respective subdirectory.
|
||||||
|
|
||||||
## Building AcadiaOS
|
## Building AcadiaOS
|
||||||
|
|
||||||
Run `./scripts/build_toolchain.sh` to build a gcc cross-compile toolchain for the project. (Takes a long time.)
|
Run `./scripts/build_toolchain.sh` to build a gcc cross-compile toolchain for the project. This
|
||||||
|
step may take a long time (~5 mins on my new laptop, ~45 mins on my 2013 laptop).
|
||||||
|
|
||||||
Change into the `build-dbg` directory.
|
Run `./init-dbg.sh` to initialize the CMake project.
|
||||||
|
|
||||||
Run `ninja qemu` to build and run AcadiaOS in a VM.
|
Run `./scripts/qemu.sh` to build and run AcadiaOS in a VM. I usually run this from the `builddbg`
|
||||||
|
directory so it is easier to run `ninja clean` when necessary (for instance when updating yunq
|
||||||
|
files).
|
||||||
|
|
||||||
### System Dependencies
|
### System Dependencies
|
||||||
|
|
||||||
TODO
|
On arch linux I require the following packages to build this project:
|
||||||
|
|
||||||
|
`base-devel limine dosfstools parted cmake ninja qemu-desktop qemu-system-x86`
|
||||||
|
|
||||||
## Boot Process
|
## Boot Process
|
||||||
|
|
||||||
AcadiaOS uses the limine bootloader to enter into a 64-bit kernel in the negative 2GB address space (mcmodel kernel).
|
AcadiaOS uses the limine bootloader to enter into a 64-bit kernel in the negative 2GB address space
|
||||||
|
(mcmodel kernel).
|
||||||
|
|
||||||
The Zion kernel then sets up interrupts, scheduling, and memory management before passing off control to the Yellowstone process.
|
The Zion kernel then sets up interrupts, scheduling, and memory management before passing off
|
||||||
|
control to the Yellowstone process.
|
||||||
|
|
||||||
The kernel passes capabilities to the Denali and VictoriaFalls binaries to the Yellowstone process to allow it to manage the rest of the boot process.
|
The kernel passes capabilities to the Denali and VictoriaFalls binaries to the Yellowstone process
|
||||||
|
to allow it to manage the rest of the boot process.
|
||||||
|
|
||||||
The Yellowstone, Denali, and VictoriaFalls processes are all passed at boot using limine modules, however any subsequent processes will be loaded off disk.
|
The Yellowstone, Denali, and VictoriaFalls processes are all passed at boot using limine modules,
|
||||||
|
however any subsequent processes are loaded off disk.
|
||||||
|
|
Loading…
Reference in New Issue