使用gdb调试linux内核

简介: 使用Gdb+qemu调试内核:我们调试内核需要一个叫qemu的虚拟机,qemu虚拟的一个好处便是可以让cpu处于冻结状态,从而让操作系统处于暂停状态,这样我们才能很方便的调试内核。

使用Gdb+qemu调试内核:

我们调试内核需要一个叫qemu的虚拟机,qemu虚拟的一个好处便是可以让cpu处于冻结状态,从而让操作系统处于暂停状态,这样我们才能很方便的调试内核。 首先使用qemu安装一个操作系统,再将该操作系统的内核换成我们要调试的。

安装qemu:

在ubuntu10.10下用# sudo apt-get install qemu下载最新的qemu版本

从已经装好的操作系统ubuntu9.10_32.img的硬盘启动,测试qemu是否可以运行:

# qemu –hadubuntu9.10_32.img


基本安装结束后,开始进入调试阶段:

http://www.kernel.org/pub/linux/kernel/v2.6/

下载linux2.6内核,本实验使用编译的内核为linux2.6.30

# cd/Downloads

#wget  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.tar.bz2

# tar –jxvf  linux2.6.30.tar.bz2

# cdlinux-2.6.30

下面我们需要编译自己的内核,产生image文件bzImage和内核ELF文件vmlinux,具体的编译过程参考技术博客:http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html

# make menuconfig

# make

编译后会在./arch/x86/boot/ 下生成bzImage文件:

注:编译时间很长,由于我没有对内核进行裁剪,以后编译时可以参考:

http://lamp.linux.gov.cn/Linux/kernel_options.html来对配置文件进行裁剪,对不需要的模块要进行裁剪,可以采用先剪裁几个模块后进行编译,没有错误后再进行裁剪编译,最大程度上上保持内核配置的正确性,在这方面必须要加强,不能拿来个内核全都编译,这样时间和空间都是种浪费。


运行qemu,启动调试模式:

# qemu –S–kernel arch/x86/boot/bzImage –had ubuntu9.10_32.img –append “root=dev/had”


在命令中使用S参数,是freeze CPU ata startup。

系统跳出一个黑显示界面,无任何内容,此时通过ctrl+alt+1与ctrl+alt+2可以切换,ctrl+alt+2是qemu控制台,ctrl+alt+1是屏幕输出。

现在我切换到qemu控制台(ctrl+alt+2)

(qemu)gdbserver 1234


此时需要另打开一个终端,进入linux2.6.30源码目录下:

# gdbvmlinux

(gdb)target remote localhost:1234


这时就可以正常使用gdb编译内核了

设置断点break start_kernel,停在linux内核的第一个c程序之上:










相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
12天前
|
算法 安全 Linux
探索Linux内核的虚拟内存管理
【5月更文挑战第20天】 在本文中,我们将深入探讨Linux操作系统的核心组成部分之一——虚拟内存管理。通过剖析其关键组件和运作机制,揭示虚拟内存如何提供高效的内存抽象,支持庞大的地址空间,以及实现内存保护和共享。文章将重点讨论分页机制、虚拟内存区域(VMAs)的管理、页面置换算法,并简要分析这些技术是如何支撑起现代操作系统复杂而多变的内存需求的。
|
23小时前
|
安全 算法 网络协议
探索Linux操作系统的内核管理
【5月更文挑战第31天】本文将深入探讨Linux操作系统的内核管理机制,包括其设计原则、主要组件以及它们如何协同工作以提供高效的系统性能。通过分析Linux内核的关键特性和功能,我们将揭示这一开源操作系统如何在各种计算环境中保持其稳定性和灵活性。
|
1天前
|
机器学习/深度学习 人工智能 负载均衡
深度解析:Linux内核调度策略的演变与优化
【5月更文挑战第30天】 随着计算技术的不断进步,操作系统的性能调优成为了提升计算机系统效率的关键。在众多操作系统中,Linux因其开源和高度可定制性而备受青睐。本文将深入剖析Linux操作系统的内核调度策略,追溯其历史演变过程,并重点探讨近年来为适应多核处理器和实时性要求而产生的调度策略优化。通过分析比较不同的调度算法,如CFS(完全公平调度器)、实时调度类和批处理作业的调度需求,本文旨在为系统管理员和开发者提供对Linux调度机制深层次理解,同时指出未来可能的发展趋势。
|
2天前
|
Linux
探索Linux操作系统的内核模块
本文将深入探讨Linux操作系统的核心组成部分——内核模块,揭示其背后的工作机制和实现方式。我们将从内核模块的定义开始,逐步解析其加载、卸载以及与操作系统其他部分的交互过程,最后探讨内核模块在系统性能优化中的关键作用。
|
3天前
|
缓存 算法 安全
探索Linux内核的虚拟内存管理
【5月更文挑战第29天】 在现代操作系统中,虚拟内存是支持多任务处理和内存保护的关键组件。本文深入分析了Linux操作系统中的虚拟内存管理机制,包括其地址空间布局、分页系统以及内存分配策略。我们将探讨虚拟内存如何允许多个进程独立地访问它们自己的地址空间,同时由操作系统管理物理内存资源。此外,文章还将涉及虚拟内存所带来的性能影响及其优化方法。
|
3天前
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【5月更文挑战第29天】 在现代操作系统中,尤其是类Unix系统如Linux中,进程调度机制是保证多任务高效运行的核心。本文将深入探讨Linux操作系统内核的进程调度器——负责管理CPU资源分配的关键组件。我们会详细分析其调度策略、调度器的演进及其在多核处理器环境下的表现。通过剖析进程调度器的工作原理和设计哲学,旨在为读者提供一个清晰的视角来理解这一复杂的系统功能。
|
9天前
|
存储 算法 Linux
【Linux】程序地址空间 -- 详解 & Linux 2.6 内核进程调度队列 -- 了解
【Linux】程序地址空间 -- 详解 & Linux 2.6 内核进程调度队列 -- 了解
|
10天前
|
算法 Linux 调度
【进程调度】Linux内核的进程调度队列--runqueue
【进程调度】Linux内核的进程调度队列--runqueue
|
10天前
|
缓存 网络协议 算法
Linux内核必读五本书籍(强烈推荐)
Linux内核必读五本书籍(强烈推荐)
41 0
|
17天前
|
NoSQL Ubuntu Linux
【操作系统】实验三 编译 Linux 内核
【操作系统】实验三 编译 Linux 内核
27 1