Eclispe+qemu+gdb调试linux Kernel

单步调试kernel说明

恩,这个文档的目标是单步调试内核,从每一个工具软件的版本号到每一个命令,都有一个说明

ubuntu1204,32位

http://www.ubuntu.org.cn/download/desktop

用vmware虚拟机安装该系统。

用64位系统时,gdb有bug。报错信息为:xxx太长。所以建议用32位系统

编译kernel 3.5.4

下载内核的地址,北京交通大学的映像地址:http://mirror.bjtu.edu.cn/kernel/linux/kernel/v3.x/

我下载的内核源码版本号3.5.4

为防止系统有些组件版本号较低,考虑如下两个命令更新系统:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential

编译步骤:进入kernel的根目录后,命令如下:

  1. make menuconfig
    //提示没有找到ncurses 安装一下:sudo apt-get install libncurses
    //贾迪提示:可以用libncurses*
    //Kernel Hacking –> 找到Compile the kernel with debug info” and
    “Compile the kernel with frame pointers”
    这两个选项,必须是选中的。其他,不用改设置,按照默认就行,直接按两下esc,选择保存并退出
  2. make

qemu 1.4.0

http://wiki.qemu.org/Download

安装

按照官网的说明,编译,安装:http://qemu.weilnetz.de/qemu-doc.html#compilation

编译qemu报错

  1. 缺glib,解决方法:sudo apt-get install libglib2.0-dev
  2. 缺autoconf,解决方法:sudo apt-get install autoconf automake libtool

用较老版本qemu时,或者直接用ubuntu source中的qemu时,单步调试失败。

使用:验证编译的内核已经可以通过qemu运行起来

qemu-system-i386 -kernel (kernel根目录)/arch/x86/boot/bzImage -initrd /boot/initrd.img-3.5.0-25-generic

注意:kernel后的参数为自己编译的内核,initrd参数为系统自带的文件,不同系统可能版本号不同
开始运行后,它会提示在vnc 102.0.0.1:5900 启动了。

然后在ubuntu桌面界面下,按下键盘中windows键(mac按command键),输入remote,找到“Remmina Remote
Desktop Client”软件,打开后,新建一个远程连接,注意 协议用VNC,server填写127.0.0.1:5900

在进入系统之后,输入uname -a或者uname -r来检验该系统是不是正在运行自己编译内核,看到3.5.4即可。

JDK(运行eclipse需要的java环境)

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html版本号,7u15。一般情况下,采用最新的版本号即可。

  1. 下载了文件:jdk-7u9-linux-i586.gz
  2. 解压缩:
     tar -xzf jdk-7u15-linux-i586.gz
  3. 移动解压缩后的文件夹到目标位置
     sudo mkdir /usr/lib/jvm;     
     mv jdk1.7.0_15/ /usr/lib/jvm
  4. 设置符号链接:(注意更改为自己的版本号,install参数前面是两个短横)

    sudo update-alternatives –install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_09/bin/javac 1

    sudo update-alternatives –install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_09/bin/java 1

    sudo update-alternatives –install /usr/bin/jar jar /usr/lib/jvm/jdk1.7.0_09/bin/jar 1

    sudo update-alternatives –install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.7.0_09/bin/javadoc 1

eclipse JUNO

http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/junosr2下载来解压缩即可。

eclipse插件:CDT

http://download.eclipse.org/tools/cdt/builds/

我下载的版本号:cdt-master-7.0.1-I201009241320

下载到的zip压缩包。不用解压缩,安装方式:打开eclipse,

Help按钮 –> Install New Software –> Add按钮
在弹出的对话框中,Name随便填一个就行,Location,点右侧的Archive按钮,选择刚下载的zip文件。
安装即可。

qemu+eclipse+gdb调试kernel

  1. 启动qemu,命令如下:

    qemu-system-i386 -s -S -kernel ~/Desktop/linux-3.5.4/arch/x86/boot/bzImage -initrd /boot/initrd.img-3.5.0-25-generic

    -s 为默认远程调试,端口号1234

    -S 为启动调试时,停止,等待gdb

    -kernel 为自己编译出的bzimage,一般放在内核根目录的arch/x86/boot/

    -initrd 后面为自己ubuntu的某个镜像。

  2. Window –>Preferences –> General –> Workspace,将“build automatically”去掉
  3. Window –> Preferences –> c/c++ –> Indexer中,将Enable indexer取消
  4. File->New->Project…–>c/c++ –> C project

    Location处:选择自己的内核根目录文件夹

    工程类型选择Makefile Project,EmptyProject

    工具链选择,LinuxGCC

  5. 在Project Explorer中,右键自己的工程,选择Debug As –> Debug
    Configurations,在弹出的对话框中双击“GDB Hardware
    Debugging”,将会让你设置调试参数等。随意写一个Name,这个Name应该是这个调试配置文件的名字。
  6. 配置调试参数:在Main标签中,c/c++Application的框里,选择自己编译出来的vmlinux文件,该文件位置应该就在源码的根目录下。选中Disable auto build.

    Debugger标签中,GDB Command处填gdb,勾选use remote target,port number处填1234,因为qemu模拟器默认的远程端口就是1234.

    Startup标签中,去掉三个勾。

    点击Debug,开始调试。

  7. 验证调试
    我在init/main.c的第486行设置一个断点。

    Window –> Show View –> Expressions,打开后,输入我要观测的变量名字,early_boot_irqs_disabled,等运行到该断点时,看到其值从false变为true,验证了基本调试功能正常。

Eclispe+qemu+gdb调试linux Kernel

时间: 2024-10-07 02:45:44

Eclispe+qemu+gdb调试linux Kernel的相关文章

ubuntu: qemu+gdb 调试linux kernel 学习笔记

声明: 本笔记内容并非本人原创,90%来自网络资料的整合.同时,由于自己是刚刚接触qemu & gdbserver remote debug,本文也就算不得教程,仅供有缘人参考而已. ------------------------------------------------------------------------------------------------分割线-----------------------------------------------------------

用qemu与gdb调试linux kernel tcp/ip协议栈

description 用gdb debug linux kernel容易吗?其实要走到这步真的不容易啊,其实也难道是不难,就是要知道的东西太多了.用gdb debug linux kernel 可以有2中方式:UML和qemu方式,这里主要说qemu,从源码编译安装qemu很费劲. 准备环境 linux OS: Debian7.5-i386(当时最新的Wheezy,装在VMware10上,我用的在线安装,安装后以text方式跑起来,我的笔记本配置资源有限!) root fs:Debian-Wh

qemu和gdb调试linux kernel

1 制作initramfs initramfs.cpio 2 qemu快速启动linux kernel qemu-system-x86_64 -kernel bzImage -initrd initramfs.cpio -s -S 3 gdb client gdb vmlinux (gdb) target remote:1234 (gdb)b start_kernel (gdb) c 然后就挂住了. 原文地址:https://www.cnblogs.com/hustdc/p/8146135.ht

qemu+gdb调试内核出现remote ‘g’ packet reply is too long

今天尝试用qemu+gdb的方式调试内核,但是当设置了断点,程序执行到断点时就报错:remote 'g' packet reply is too long,错误图片如下 解决办法网上了,说是改一下gdb/remote.c的代码,开始一脸懵逼,都不知道改哪里,知道看到了这篇博客:https://blog.csdn.net/baidu_31504167/article/details/93853921.这篇文章讲到了如何避免这个问题: 重新下载gdb源码版本可以自己选,应该都行,然后修改源码目录下

Vmware+gdb调试Linux内核——工欲善其事,必先利其器

今天我最终忍受不了qemu的低速跟不可理喻的各种bug,開始寻找新的调试内核的方法.然后想到了Vmware,那么成熟的虚拟机怎么可能调试不了内核.于是尝试了一番,发现结果很的棒!所以立刻奋笔疾书.把这种方法记录下来. 我们这里主要分成几个步骤: 1.vmware和linux的安装 2.vmware编译Linux内核 3.vmware和gdb主机的配置 4.測试 一.vmware和linux的安装 1)VMware for Linux的安装         官网下载地址: https://my.v

gdb调试linux内核arm构架

视频地址:https://www.bilibili.com/video/av47411075安装依赖sudo apt-get install qemu libncurses5-dev gcc-arm-linux-gnueabi build-essential gdb-arm-none-eabi synaptic gcc-aarch64-linux-gnu eclipse-cdt git下载源码:git initgit fetch https://github.com/figozhang/runn

大杀招之使用QEMU调试Linux内核代码

Linux内核代码的调试非常麻烦,一般都是加printk, 或者用JTAG调试. 这里的方法是用QEMU来调试Linux内核.因为QEMU自己实现了一个gdb server, 所以可以非常方便的使用gdb来调内核. 这对内核的学习也非常有帮助. 为了尽量不多花时间在QEMU设置上,这里直接使用以下的内核image: http://free-electrons.com/community/demos/qemu-arm-directfb/ 1. QEMU的安装 这个可以自己去QEMU的官网下载编译,

使用QEMU调试Linux内核代码

Linux内核代码的调试非常麻烦,一般都是加printk, 或者用JTAG调试.这里的方法是用QEMU来调试Linux内核.因为QEMU自己实现了一个gdb server, 所以可以非常方便的使用gdb来调内核. 这对内核的学习也非常有帮助. 为了尽量不多花时间在QEMU设置上,这里直接使用以下的内核image: http://free-electrons.com/community/demos/qemu-arm-directfb/ 1,QEMU的安装 这个可以自己去QEMU的官网下载编译,如果

采用大杀招QEMU调试Linux内核代码

Linux调试内核代码是非常麻烦.它们一般加printk, 或者使用JTAG调试. 这里的方法是使用QEMU为了调试Linux核心. 由于QEMU自己实现gdb server, 它可以容易地使用gdb要调整内核. 也很有帮助. 为了尽量不多花时间在QEMU设置上,这里直接使用下面的内核image: http://free-electrons.com/community/demos/qemu-arm-directfb/ 1. QEMU的安装 这个能够自己去QEMU的官网下载编译,假设自己手头上的发