linux-0.11在gcc-4.3.0版本以上的编译和调试

2020更新:解决所有编译警告。

《Linux内核完全注释》一书中配置的环境只在 CentOS 7 上使用 gcc-3.x 编译成功并且运行,但书中对源码和 Makefile 的修改并不能用在 gcc-4.x 以上的版本。

主要可能会出现以下问题:

  1. 大块数据拷贝方向位不正确。
  2. string.h中字符串操作导致数据和指针出现奇怪改变。
  3. 启用-On优化后出现问题(比如-O2优化会去优化链接顺序导致入口函数不正确)。
  4. get_fs_long()不能正确获取用户区数据。

以上问题任意一个都会导致无法成功运行 linux-0.11 到 bash 命令行中。

这是一个经过修改带 linux-0.11 内核注释可编译,可运行的 linux-0.11 github仓库,并且对以上问题进行了修复。在实际调试时可使用 GDB 进行源码级别调试,在 Linux 平台也可以使用 Bochs 进行汇编调试。

linux-0.11 内核可在 windows 和 linux 上运行。具体步骤可见根目录的 Makefile。根目录包含了System.map System.lst System.syms 可随时定位变量和函数位置以及函数对应的汇编代码。
项目中以自带 Bochs-2.6.9 源码,通过 Makefile 可直接编译安装。

  • 如果想使用 Bochs 自带的汇编调试则使用 $ make bochs-build-debug 进行编译。
  • 如果想使用gdb进行源码级别调试则使用 $ make bochs-build-gdb 进行编译。

安装过程可能会提示ERROR: X windows gui was selected, but X windows libraries were not found. 则还需要安装 X11 库 使用 sudo apt-get install libx11-dev xserver-xorg-dev xorg-dev
或者直接在 Makefile 中 bochs-build-xxx 的命令 ./configure 后面添加 –with-nogui
linux-0.11在gcc-4.3.0版本以上的编译和调试_第1张图片
安装 bochs 之后直接 make 编译源码。或之直接使用 make disk 将生成的 Image 拷贝至tools/a.img软盘中。tools/c.img 是含有 Old Minx文件系统的硬盘,可直接被引导使用。

编译后会在根目录下生成如下文件
linux-0.11在gcc-4.3.0版本以上的编译和调试_第2张图片Image为含有引导程序的完成映像文件。
system.map为elf格式的含有所有信息的符号表。
system.elf为elf32格式的可执行文件,也是gdb调试使用的调试文件。
system.bin为除去elf格式头,gdb调试信息,符号表,重定位信息等的二进制文件。
使用make info 还会生成system.list 和 system.syms 两个文件。list是包含对应的汇编代码。syms为只包含system的符号地址信息。

最后使用make bochs-run 或者make bochs-gdb 就可直接运行linux-0.11。
其中只用gdb时,需要另开一个终端。进行端口连接。
linux-0.11在gcc-4.3.0版本以上的编译和调试_第3张图片跳转至tools/目录下,执行

gdb -tui system

在gdb命令行中输入target remote localhost:1234进行连接 之后就可以使用gdb命令调试了。
如果输入layout split还可以进行源码和汇编同时调试。
最后附上完整运行图,当然已经包含了可执行gcc和glibc库。
linux-0.11在gcc-4.3.0版本以上的编译和调试_第4张图片如果有任何问题。可直接在我的git上#issue

你可能感兴趣的:(linux,linux-0.11,内核)