diff options
| author | Miquel Sabaté Solà <mikisabate@gmail.com> | 2024-09-24 22:45:00 +0200 |
|---|---|---|
| committer | Miquel Sabaté Solà <mikisabate@gmail.com> | 2024-09-24 22:45:00 +0200 |
| commit | 54cf703d13bddbe81e15858b1bfdb7111a3f56de (patch) | |
| tree | 5d6d58483c063efd2ec9b55abdc65918f9a19d96 /README.md | |
| parent | 052f73e4e5c7f6266bf80f392ac593046e2d8d2c (diff) | |
| download | fbos-54cf703d13bddbe81e15858b1bfdb7111a3f56de.tar.gz fbos-54cf703d13bddbe81e15858b1bfdb7111a3f56de.zip | |
Load debug symbols on the gdb target
Load the debug symbols into the gdb session by simply passing the
executable file into gdb directly. Moreover, allow users of the gdb
target to provide an extra variable so to pass extra flags to gdb.
Moreover, this commit comes with other small cleanups on the Makefile,
like a proper ABI specifier,
Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 34 |
1 files changed, 25 insertions, 9 deletions
@@ -63,15 +63,17 @@ $ make ARCH=riscv CROSS_COMPILE=<your-cross-compile> PLATFORM=generic With that simply set the `QEMU_BIOS` environment variable with the full path of the resulting `fw_dynamic.bin` file. -Now make sure that you have the version that is able to emulate a RISC-V system. -After that, simply run: +Now make sure that you have a QEMU version that is able to emulate a RISC-V +system. After that, simply run: ``` $ make qemu ``` -The `qemu` target can be paired with the `DEBUG` parameter that you can pass to -make. Hence, you can also call it like so: +This will open up QEMU in `-nographic` mode (hence the serial output will be +simply redirected to stdout), and you will be able to see the whole thing +working. Moreover, the `qemu` target can be paired with the `DEBUG` parameter +that you can pass to make. Hence, you can also call it like so: ``` $ make qemu DEBUG=1 @@ -83,19 +85,33 @@ This will make QEMU wait for a GDB connection. On another terminal then type: $ make gdb ``` -Now you have a debugging session for this kernel. If you want to skip ahead, -notice that the kernel starts at `PAGE_OFFSET` (see `include/fbos/mm.h`). Hence, -upon starting the GDB session you can simply type: +Now you have a debugging session for this kernel with debug symbols loaded. +Hence, upon starting the GDB session you can simply type: ``` -# 0x80200000 is the current value of PAGE_OFFSET. -(gdb) break *0x80200000 +(gdb) break _start (gdb) continue ``` From there you are already out of firmware code and right into the kernel. +Moreover, you can also pass the `GDB_EXTRA_FLAGS` variable to the `make gdb` +target. This way you can pass extra parameters to gdb, such as: + +``` +$ make gdb GDB_EXTRA_FLAGS="-tui" +``` + +And now you have started a GDB session with a nice TUI interface. ## Special thanks to SUSE for organizing [Hack Week 24](https://hackweek.opensuse.org/24/projects). This project was mainly developed during this time. + +I have also taken lots of valuable input by reading [Popovic's +blog](https://popovicu.com/), so thanks a lot for writing such clear articles on +a rather obscure topic. In a similar way, I have also taken the time to read a +lot of code from the Linux Kernel. My understanding of both RISC-V and the Linux +Kernel itself has vastly improved with this exercise, so I'd also like to take +the chance to be grateful to the many people who have contributed to this vast +undertaking that is the Linux Kernel. |
