Parcourir la source

chore: add READM.md

greatbridf il y a 1 mois
Parent
commit
a8adfd1dfc
2 fichiers modifiés avec 96 ajouts et 8 suppressions
  1. 69 0
      README.md
  2. 27 8
      configure

+ 69 - 0
README.md

@@ -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.

+ 27 - 8
configure

@@ -42,16 +42,35 @@ if [ "$QEMU" = "" ]; then
 fi
 echo "$QEMU"
 
-event "finding gdb"
-for item in $GDB_EXECUTABLES; do
-    if $item --version > /dev/null 2>&1; then
-        GDB="$item"
-        break
+check_gdb_arch() {
+    local item="$1"
+    if $item --init-eval-command 'set arch' \
+             --init-eval-command 'q' 2>&1 \
+             | grep 'x86-64' >/dev/null 2>&1; then
+        return 0
+    else
+        return 1
     fi
-done
+}
+
 if [ "$GDB" = "" ]; then
-    echo "failed"
-    exit 1
+    event "finding gdb"
+    for item in $GDB_EXECUTABLES; do
+        if check_gdb_arch "$item"; then
+            GDB="$item"
+            break
+        fi
+    done
+    if [ "$GDB" = "" ]; then
+        echo "failed"
+        exit 1
+    fi
+else
+    event 'checking given gdb'
+    if ! check_gdb_arch "$GDB"; then
+        echo "failed"
+        exit 1
+    fi
 fi
 echo "$GDB"