美文网首页
从头写一个操作系统 13 (构建工具->GDB调试QEMU)

从头写一个操作系统 13 (构建工具->GDB调试QEMU)

作者: 半步江南 | 来源:发表于2019-05-02 14:35 被阅读0次

    请自行google:monolithic kernel, microkernel, debugger, gdb

    本节课目标:稍微暂停,梳理一下我们的代码,然后学习如何使用gdb调试我们的kernel。

    也许你没有意识到你已经拥有了一个可以跑起来的内核。

    虽然我们的内核还很小,只能打印'X'。但现在是时候停一下,将这些代码放入各自的文件夹中,写一个Makefile。

    看一看新的文件结构吧,几乎都是从之前的课程目录中引用过的,所以如果要修改这些文件,最好是删掉这些引用重新写个新的。

    由于后面我们大部分时间都会用C来编码,我们将用gdb连接qemu提供的调试端口。
    第一步,我们需要一个交叉编译版本的gdb,苹果系统使用的lldb无法识别ELF格式(并且,homebrew的仓库里也查不到gdb)。

    cd /tmp/src
    curl -O http://ftp.rediris.es/mirror/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

    make debug试试。使用到的.elf文件是一个包含我们在内核上生成的所有符号的目标文件,因为我们调用gcc时使用了-g标志。请用xxd检查一下,你会看到一些字符串。实际上,检查对象文件中的字符串的正确方法是使用string kernel.elf

    输入make debug:

    设置断点:b main
    运行OS:continue
    运行两次next:程序运行到打印X前的一步,下一步就能够打印。

    输入print *video_memory,将会出现L
    让我们看看video_memory这个地址是哪, X将在下一步打印在这个位置:print vide0_memory

    输入nextX被打印出来了吗?

    现在是学习gdb这个软件的好机会,它是很有用的哦。

    相关文章

      网友评论

          本文标题:从头写一个操作系统 13 (构建工具->GDB调试QEMU)

          本文链接:https://www.haomeiwen.com/subject/ppynnqtx.html