Linux 内核调试环境搭建

本文介绍了如何在Ubuntu20.04上通过QEMU模拟器和gdb调试工具来研究和学习Linux0.11内核,包括QEMU的功能、配置过程以及如何利用gdb进行调试操作。
摘要由CSDN通过智能技术生成

目录

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 的主要特点包括:

  1. 平台独立性:QEMU 可以在多种平台上运行,包括 x86、ARM、MIPS 等。
  2. 可扩展性:QEMU 支持多种虚拟化标准,如 PCI Express、USB、SCSI、网络设备等。
  3. 高性能:结合 KVM,QEMU 可以实现接近原生硬件性能的虚拟化。
  4. 易用性:QEMU 提供了丰富的命令行选项和配置文件,方便用户进行虚拟机的配置和管理。

QEMU 通常用于以下几个方面:

  1. 开发和测试:QEMU 可以用于创建虚拟机,以便在不同的操作系统和硬件平台上开发和测试应用程序。
  2. 服务器虚拟化:QEMU 可以与 KVM 结合,实现高效的服务器虚拟化,提高硬件资源的利用率。
  3. 嵌入式系统开发: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 的认识。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建Linux内核调试环境需要准备以下工具和步骤: 1. 准备编译工具链:在Linux系统上搭建交叉编译工具链,用于编译和调试内核。可以使用GCC工具链或者Clang/LLVM工具链。 2. 获取Linux内核源代码:从Linux官方网站或者GitHub上获取所需的Linux内核源代码。可以选择稳定版本或者特定的分支。 3. 配置编译选项:进入内核源代码目录,在终端执行"make menuconfig"命令,配置所需的编译选项。可以选择启用调试符号、内核调试选项和相关的硬件调试支持等。 4. 编译内核:执行"make"命令编译内核。可能需要一段时间来完成编译过程,取决于系统资源和内核配置选项。 5. 安装内核:执行"make modules_install install"命令将编译好的内核和模块安装到系统中。注意备份原有内核并配置启动引导文件。 6. 配置调试工具:安装并配置GDB调试器。GDB是一种强大的调试器,可以用于调试Linux内核。可以通过包管理器安装GDB,如"apt-get"或者"yum"。 7. 连接调试器:通过串口、网络或者通过JTAG接口连接调试器到目标机器。这可能需要硬件设备和相应的驱动程序。 8. 启动内核调试:启动目标机器,并在GDB中配置和启动目标机器连接。可以设置断点、观察变量、单步执行和查看调用栈等。 9. 进行调试:在GDB中使用各种调试命令和功能对Linux内核进行调试。例如,可以查看内核日志、内存映射和寄存器状态等。 10. 分析问题和修复:根据调试结果分析问题,并进行相应的代码修改,重复以上步骤来进行进一步的调试和测试。 以上是搭建Linux内核调试环境的基本步骤。根据具体需求和调试场景,可能还需要其他工具和配置来满足特定的调试需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值