Merge branch 'main' of git.chauvet.pro:starnakin/42_KFS

This commit is contained in:
0x35c 2024-09-17 13:58:10 +02:00
commit 65a59534b4
2 changed files with 70 additions and 1 deletions

69
README.md Normal file
View File

@ -0,0 +1,69 @@
# KFS (Kernel From Scratch)
This project aims to explore how a kernel works by building our own, gaining hands-on experience with core concepts like memory management, interrupt, keyboard driver, etc
## INSTALLATION
### Cross compile the compile
[THE DOCUMENTATION](https://wiki.osdev.org/GCC_Cross-Compiler)
- install requirement follow [THE DOCUMENTATION](https://wiki.osdev.org/GCC_Cross-Compiler)
- Setup the shell
``` sh
export PREFIX="$HOME/opt/cross"
export TARGET=i386-elf
export PATH="$PREFIX/bin:$PATH"
mkdir $HOME/src
cd $HOME/src
```
- Download [binutils](https://ftp.gnu.org/gnu/binutils/?C=M;O=D)
- Download [gcc](https://ftp.gnu.org/gnu/gcc/?C=M;O=D)
- Download [gdb](https://ftp.gnu.org/gnu/gdb/?C=M;O=D)
- extract archives
``` sh
tar xf [your binutils archive]
tar xf [your gcc archive]
tar xf [your gdb archive]
```
- (protips use -j [nb core])
- Compile binutils
``` sh
cd $HOME/src
mkdir build-binutils
cd build-binutils
../binutils-x.y.z/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror
make
make install
```
- Compile gdb
``` sh
cd $HOME/src
mkdir build-gdb
cd build-gdb
../gdb.x.y.z/configure --target=$TARGET --prefix="$PREFIX" --disable-werror
make all-gdb
make install-gdb
make
make install
```
- Compile gcc
``` sh
cd $HOME/src
# The $PREFIX/bin dir _must_ be in the PATH. We did that above.
which -- $TARGET-as || echo $TARGET-as is not in the PATH
mkdir build-gcc
cd build-gcc
../gcc-x.y.z/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --without-headers
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc
```
### Compile and the start the kernel
``` sh
make run
```

View File

@ -7,7 +7,7 @@ void print_stack(void)
(struct stackframe *)__builtin_frame_address(0);
while (stack) {
kprintf(0, "stack->ebp: %d\n", stack->ebp);
kprintf(0, "fn: %d\n", stack->eip);
stack = stack->ebp;
}
}