目录
QEMU
Linux 0.11 源码
编辑 gdb 调试
学习Linux内核,我们可以看书,实际我们最好可以有一个可以调试的环境,本文就简单介绍一下使用Qemu 和gdb 来调试和查看Linux kernel 。在ubantu 20.04 的PC 上面编译内核源码,通过QEMU 来运行内核,然后使用gdb 来调试查看内核数据。
QEMU
QEMU 是一个开源的虚拟化技术软件,用于模拟硬件并执行多个操作系统和应用程序。QEMU 本身是一个纯软件的模拟器,但它通常与 Linux 内核的 KVM(Kernel-based Virtual Machine)模块结合使用,以实现高效的硬件辅助虚拟化。
QEMU 的主要特点包括:
- 平台独立性:QEMU 可以在多种平台上运行,包括 x86、ARM、MIPS 等。
- 可扩展性:QEMU 支持多种虚拟化标准,如 PCI Express、USB、SCSI、网络设备等。
- 高性能:结合 KVM,QEMU 可以实现接近原生硬件性能的虚拟化。
- 易用性:QEMU 提供了丰富的命令行选项和配置文件,方便用户进行虚拟机的配置和管理。
QEMU 通常用于以下几个方面:
- 开发和测试:QEMU 可以用于创建虚拟机,以便在不同的操作系统和硬件平台上开发和测试应用程序。
- 服务器虚拟化:QEMU 可以与 KVM 结合,实现高效的服务器虚拟化,提高硬件资源的利用率。
- 嵌入式系统开发:QEMU 支持多种嵌入式硬件平台,可用于模拟嵌入式设备,方便开发人员进行测试和调试。
我们的Linux kernel 版本是0.11 所以需要安装的QEMU 是 qemu-system-i386,ubantu 上面安装qemu 大家可以自己去搜索。
Linux 0.11 源码
Linux 0.11 源码的下载,我们可以使用网上其他人配置好的源码,因为老版本的代码是30年前的依赖一些特殊的设置和工具,直接使用配置好的比较方便,如果感兴趣也可以直接去下载官方老版本的code来手撕编译。
配置好的版本,可以用bochs ,qemu 等来调试。
GitHub - yuan-xy/Linux-0.11: The old Linux kernel source ver 0.11 which has been tested under modern Linux, Mac OSX and Windows.
因为老版本的Linux kernel 是32位的,所以我们需要把makefile中QEMU 的设置修改一下
把142行的qemu-system-x86_64 替换成qemu-system-i386
然后运行make debug 指令就可以启动QEMU
gdb 调试
gdb 的使用方法我这里就不做详细的介绍大家可以网上学习,在 tools 文件夹下面会生产符号文件
system
cmd 输入gdb system
再输入 target remote :1234 和QMEU 建立连接。默认停止在0x0000fff0处,输入c 就会看到QEMU的界面有变化
加载了符号文件就可以使用代码中的名称来设置断点
触发断点后的效果
查看gdt 表的内容
和源码中设置的值对比一下看看,
_gdt: .quad 0x0000000000000000 /* NULL descriptor */
.quad 0x00c09a0000000fff /* 16Mb */
.quad 0x00c0920000000fff /* 16Mb */
.quad 0x0000000000000000 /* TEMPORARY - don't use */
.fill 252,8,0 /* space for LDT's and TSS's etc */
利用QEMU 和gdb 我们可以在看书学习的时候查看寄存器和内存中的值来加深对Linux kernel 的认识。