lesson 23, steps 1 and 2

pull/6/head
Carlos 9 years ago
parent 0134c5625c
commit 92ff191c3d

@ -7,8 +7,7 @@ OBJ = ${C_SOURCES:.c=.o cpu/interrupt.o}
CC = /usr/local/i386elfgcc/bin/i386-elf-gcc CC = /usr/local/i386elfgcc/bin/i386-elf-gcc
GDB = /usr/local/i386elfgcc/bin/i386-elf-gdb GDB = /usr/local/i386elfgcc/bin/i386-elf-gdb
# -g: Use debugging symbols in gcc # -g: Use debugging symbols in gcc
CFLAGS = -g -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -nostartfiles -nodefaultlibs \ CFLAGS = -g -ffreestanding -Wall -Wextra -fno-exceptions
-Wall -Wextra -Werror
# First rule is run by default # First rule is run by default
os-image.bin: boot/bootsect.bin kernel.bin os-image.bin: boot/bootsect.bin kernel.bin

@ -7,4 +7,50 @@ JamesM's tutorial](http://wiki.osdev.org/James_Molloy%27s_Tutorial_Known_Bugs).
Since we followed his tutorial for lessons 18-22 (interrupts through malloc), we'll 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. need to make sure we fix any of the issues before moving on.
1. 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`
2. Not setting a stack
----------------------
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`.
4. Reinvented datatypes
-----------------------
<stddef.h> to provide size\_t
5. Missing functions
--------------------
6. Interrupt handlers
---------------------
- also cli, sti in interrupt handlers
7. Structs and attributes
-------------------------
8. Improperly aligned `kmalloc`
-------------------------------

@ -1,4 +1,7 @@
global _start;
[bits 32] [bits 32]
[extern main] ; Define calling point. Must have same name as kernel.c 'main' function
call main ; Calls the C function. The linker will know where it is placed in memory _start:
jmp $ [extern kernel_main] ; Define calling point. Must have same name as kernel.c 'main' function
call kernel_main ; Calls the C function. The linker will know where it is placed in memory
jmp $

@ -4,7 +4,7 @@
#include "../libc/string.h" #include "../libc/string.h"
#include "../libc/mem.h" #include "../libc/mem.h"
void main() { void kernel_main() {
isr_install(); isr_install();
irq_install(); irq_install();

Loading…
Cancel
Save