|
@@ -1,4 +1,4 @@
|
|
|
-*Concepts you may want to Google beforehand: monolithic kernel, microkernel*
|
|
|
+*Concepts you may want to Google beforehand: monolithic kernel, microkernel, debugger, gdb*
|
|
|
|
|
|
**Goal: Pause and organize our code a little bit**
|
|
|
|
|
@@ -13,6 +13,39 @@ Take a look at the new folder structure. Most of the files have been symlinked
|
|
|
from previous lessons, so if we have to change them at some point, it will be
|
|
|
a better idea to remove the symlink and create a new file.
|
|
|
|
|
|
+Furthermore, since from now on we will use mostly C to code, we'll take advantage of qemu's
|
|
|
+ability to open a connection to gdb. First, let's install a cross-compiled `gdb` since
|
|
|
+OSX uses `lldb` which is not compatible with the ELF file format (neither is the `gdb` available
|
|
|
+on Homebrew's repos)
|
|
|
+
|
|
|
+```sh
|
|
|
+cd /tmp/src
|
|
|
+curl -O http://ftp.rediris.es/mirror/GNU/gnu/gdb/gdb-7.8.tar.gz
|
|
|
+tar xf gdb-7.8.tar.gz
|
|
|
+mkdir gdb-build
|
|
|
+cd gdb-build
|
|
|
+export PREFIX="/usr/local/i386elfgcc"
|
|
|
+export TARGET=i386-elf
|
|
|
+../gdb-7.8/configure --target="$TARGET" --prefix="$PREFIX" --program-prefix=i386-elf-
|
|
|
+make
|
|
|
+make install
|
|
|
+```
|
|
|
+
|
|
|
+Check out the Makefile target `make debug`. We can take
|
|
|
+advantage of this cool qemu feature. Type `make debug` and, on the gdb shell:
|
|
|
+
|
|
|
+- Set up a breakpoint in `kernel.c:main()`: `b main`
|
|
|
+- Run the OS: `continue`
|
|
|
+- Run two steps into the code: `next` then `next`. You will see that we are just about to set
|
|
|
+ the 'X' on the screen, but it isn't there yet (chech out the qemu screen)
|
|
|
+- Let's see what's in the video memory: `print *video_memory`. There is the 'L' from "Landed in
|
|
|
+ 32-bit Protected Mode"
|
|
|
+- Hmmm, let's make sure that `video_memory` points to the correct address: `print video_memory`
|
|
|
+- `next` to put there our 'X'
|
|
|
+- Let's make sure: `print *video_memory` and look at the qemu screen. It's definitely there.
|
|
|
+
|
|
|
+Now is a good time to read some tutorial on `gdb`!
|
|
|
+
|
|
|
|
|
|
Strategy
|
|
|
--------
|