.. | ||
boot | ||
cpu | ||
drivers | ||
kernel | ||
libc | ||
Makefile | ||
README.md |
Concepts you may want to Google beforehand: XX
Goal: Fix miscellaneous issues with our code
The OSDev wiki has a section which describes some issues with JamesM's tutorial. Since we followed his tutorial for lessons 18-22 (interrupts through malloc), we'll need to make sure we fix any of the issues before moving on.
- Wrong CFLAGS
We add -ffreestanding
when compiling .o
files, which includes kernel_entry.o
and thus
kernel.bin
and os-image.bin
.
Before, we disabled libgcc (not libc) through the use of -nostdlib
and we didn't re-enable
it for linking. Since this is tricky, we'll delete -nostdlib
-nostdinc
was also pased to gcc, but we will need it for step 3.
- kernel.c
main()
function
Modify kernel/kernel.c
and change main()
to kernel_main()
since gcc recognizes "main" as
a special keyword and we don't want to mess with that.
Change boot/kernel_entry.asm
to point to the new name accordingly.
To fix the i386-elf-ld: warning: cannot find entry symbol _start; defaulting to 0000000000001000
warning message, add a global _start;
and define the _start:
label in boot/kernel_entry.asm
.
- Reinvented datatypes
It looks like it was a bad idea to define non-standard data types like u32
and such, since
C99 introduces standard fixed-width data types like uint32_t
We need to include <stdint.h>
which works even in -ffreestanding
(but requires stdlibs)
and use those data types instead of our own, then delete them on type.h
- Improperly aligned
kmalloc
First, since kmalloc
uses a size parameter, we'll use the correct data type size_t
instead
of u32int_t
. size_t
should be used for all parameters which "count" stuff and cannot be
negative. Include <stddef.h>
.
We will fix our kmalloc
in the future, making it a proper memory manager and aligning data types.
For now, it will always return a new page-aligned memory block.
- Missing functions
- Interrupt handlers
- also cli, sti in interrupt handlers
- Structs and attributes