|
@@ -0,0 +1,69 @@
|
|
|
|
+# gbos
|
|
|
|
+
|
|
|
|
+A simple OS kernel written in C++ and Rust that aims to be Linux compatible out of the box.
|
|
|
|
+
|
|
|
|
+- [x] Multitasking
|
|
|
|
+- [x] Memory management
|
|
|
|
+- [x] Filesystem implementation
|
|
|
|
+- [x] ELF program loader
|
|
|
|
+- [x] Some rather naive AHCI driver and FAT32 impl.
|
|
|
|
+- [x] TTY and job control interface (partially working)
|
|
|
|
+- [ ] Move to Rust (WIP)
|
|
|
|
+- [ ] SMP support (WIP)
|
|
|
|
+- [ ] POSIX thread support (WIP)
|
|
|
|
+- [ ] Network stack (WIP)
|
|
|
|
+- [ ] Dynamic loader support
|
|
|
|
+- [ ] Users, permission...
|
|
|
|
+
|
|
|
|
+# Build & Run
|
|
|
|
+
|
|
|
|
+## Prerequisites
|
|
|
|
+
|
|
|
|
+#### Compile
|
|
|
|
+
|
|
|
|
+- [GCC (Tested)](https://gcc.gnu.org/) or
|
|
|
|
+- [Clang (It should work, but haven't been tested for a while.)](https://clang.llvm.org/)
|
|
|
|
+
|
|
|
|
+- [Rust](https://www.rust-lang.org/)
|
|
|
|
+- [CMake](https://cmake.org/)
|
|
|
|
+
|
|
|
|
+#### Generate disk image
|
|
|
|
+
|
|
|
|
+- [(Optional) busybox (We have a prebuilt version of busybox in the project directory)](https://www.busybox.net/)
|
|
|
|
+- [fdisk](https://www.gnu.org/software/fdisk/)
|
|
|
|
+- [mtools](http://www.gnu.org/software/mtools/)
|
|
|
|
+
|
|
|
|
+#### Debug and Run
|
|
|
|
+
|
|
|
|
+- [GDB](https://www.gnu.org/software/gdb/)
|
|
|
|
+- [QEMU](https://www.qemu.org/)
|
|
|
|
+
|
|
|
|
+## Build and Run
|
|
|
|
+
|
|
|
|
+```bash
|
|
|
|
+./configure && make prepare && make build
|
|
|
|
+
|
|
|
|
+make nativerun
|
|
|
|
+
|
|
|
|
+# or if you need debugging
|
|
|
|
+
|
|
|
|
+# 1:
|
|
|
|
+make srun
|
|
|
|
+
|
|
|
|
+# 2:
|
|
|
|
+make debug
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+You may want to specify the correct version of build tools to use when running `./configure` in ENV.
|
|
|
|
+
|
|
|
|
+- `QEMU`: QEMU used to debug run. `qemu-system-x86_64` by default.
|
|
|
|
+- `GDB`: GDB used by `make debug`. We will search for `gdb` and `x86_64-elf-gdb` and check the supported archs by default.
|
|
|
|
+- `FDISK_BIN`: fdisk executable used to create disk image part tables. `fdisk` by default.
|
|
|
|
+
|
|
|
|
+If you are doing a cross compile, run `./configure` with `CROSS_COMPILE` set to the corresponding target triple of your cross compiler.
|
|
|
|
+
|
|
|
|
+## Run your own program
|
|
|
|
+
|
|
|
|
+The `user` directory under the project dir exists mainly for some *historical* reason and has almost no use. So don't ever try to look inside that.
|
|
|
|
+
|
|
|
|
+To copy your program into the built disk image, you can edit the `CMakeLists.txt` and add a line to the `boot.img` section. You can also try editing the `init_script.sh` to customize the booting procedure.
|