本文转载自:https://blog.csdn.net/WANG__RONGWEI/article/details/54922727

一、调试环境:

在ubuntu16.04下,在虚拟机里边运行的ubuntu,装32位的运行较快,选择较新的ubuntu版本是因为安装qemu、eclipse比较简单,在安装软件上节约时间。

二、安装的软件

1----安装qemu相关软件:sudo apt-get install kvm qemu libvirt-bin virtinst virt-manager virt-viewer
创建一个kvm目录,以后会用到:sudo mkdir /opt/kvm
2----安装eclipse-cdt软件,当然不是安装jdk,eclipse cdt是一个非常强大的c/c++ ide:sudo apt install eclipse-cdt。

三、下载linux内核,建eclipse工程

在ubuntu16.04版本下,最好选择跟他本身差不多的内核版本--linux-4.4。
具体可参考:http://blog.csdn.net/ustc_dylan/article/details/5991490,描述比较详细,只不过如果我们选择的是较新的eclipse版本,有一点差别。
1---编译内核:内核可选择放在home目录下,好处就是以后运行eclipse,不需要root权限。我选择放在根目录下
/work/kernel/linux-4.4,当然还要建立一个文件:mkdir /work/kernel/linux-4.4-obj。使用chmod -R 777 给他们都加上权限。
  ----执行:make O=/work/kernel/linux-4.4-obj menuconfig ,不需要修改,直接保存退出就行。
2---开始建eclipse工程:
       首先我们到Window->Preferences->General->Workspace 中将Build Automatically选项去掉。
       选择C工程,然后点击NEXT:
    
2---建工程,工程名字:kernel-4.4,下面的location,便是需要编译的内核路径,由于我是记录我的建工程,他警告我已经有一个工程在同一个路径下,第一次就不会出现这个警告。还有一个重要的选择--->Makefile project选择右边的Linux GCC。点击NEXT。
 
3---工程配置,选择Advanced settings:
 
出现下面的配置界面,双击C/C++Build,设置如下,
点击Behavior,将Build后面改为一个空格,将clean后边改为mrproper。最好点击下面的Apply即可。
 
 
最后一个设置,在C/C++General下选择Indexer,在左边设置如下,这个选项也可以不需要设置,只是对于使用软件不卡:
工程建完后,我们需要编译,按Ctrl + B 开始编译内核,,,等待

四、调试内核:

1---运行qemu: qemu-system-i386 -s -S -hda /opt/kvm/linux-0.2.img -kernel /work/kernel/linux-4.4-obj/arch/x86/boot/bzImage -append root=/dev/sda
这个linux-0.2.img我已经上传:http://download.csdn.net/detail/wang__rongwei/9749639
当然网速快也可到官网下载:http://wiki.qemu.org/download/linux-0.2.img.bz2   ,这是一个linux 2.6.20的磁盘映像,后面这个root=/dev/sda需要选择好,否者在调试内核时会出现:end kernel panic VFS:Unable to mount root fs on Unknown-block(0,0),我是在虚拟机给系统添加的一个IDE硬盘,但是我不知道为什么我添加的是IDE盘,结果是sda型的,按道理应该是hda。
2---内核调试配置,右击工程文件,选择Debug Configuration,在C/C++ Remote Application下填写如下:
      
接下来,选择旁边的Debugger,设置一个start_kernel,然后选择下面的Connection,设置TCP类型,还有localhost、1234:
 
 
------------一切OK,点击下面的Debug开始调试。
 

linux内核调试+qemu+eclipse【转】的更多相关文章

  1. Linux内核调试方法总结【转】

    转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...

  2. linux内核调试指南

    linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 ...

  3. 【转】Linux内核调试方法总结

    目录[-] 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_sta ...

  4. Linux内核调试方法总结

    Linux内核调试方法总结 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2   ...

  5. Linux Kernel - Debug Guide (Linux内核调试指南 )

    http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级 ...

  6. Linux内核调试方法【转】

    转自:http://www.cnblogs.com/shineshqw/articles/2359114.html kdb:只能在汇编代码级进行调试: 优点是不需要两台机器进行调试. gdb:在调试模 ...

  7. Linux内核调试 - 一般人儿我都不告诉他(一)【转】

    转自:http://www.cnblogs.com/armlinux/archive/2011/04/14/2396821.html 悄悄地进入Linux内核调试(一) 本文基址:http://blo ...

  8. Linux内核调试技术——jprobe使用与实现

    前一篇博文介绍了kprobes的原理与kprobe的使用与实现方式,本文介绍kprobes中的另外一种探測技术jprobe.它基于kprobe实现,不能在函数的任何位置插入探測点,仅仅能在函数的入口处 ...

  9. Linux内核调试的方式以及工具集锦【转】

    转自:https://blog.csdn.net/gatieme/article/details/68948080 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...

随机推荐

  1. 黑马day11 事务的四大特性

    1.事务的四大特性:一个事务具有的最主要的特性.一个设计良好的数据库能够为我们保证这四大特性. 1.1原子性:原子性是指事务是一个不可切割的工作单位,事务中的操作要么都发生要么都不发生. 1.2一致性 ...

  2. linux命令之面试题1

    1.请解释下列10个shell命令的用途 top:是linux下常用的性能分析工具,能够实时的显示系统中各个进程的资源占用情况,类似于windows的资源管理器,查看系统的cpu,内存,运行时间,交互 ...

  3. EasyDSS流媒体服务器软件(支持RTMP/HLS/HTTP-FLV/视频点播/视频直播)-正式环境安装部署攻略

    EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作. 其中,点播功能主要包含:上传.转码.分发.直播功能,主要包含:直播.录像, 直播支持RTMP ...

  4. EasyNVR智能云终端硬件使用场景分析:如何实现软硬一体的视频上云整体解决方案

    背景分析 在于众多的客户交流中,经常会被客户问到,"EasyNVR到底是软件还是硬件?"."EasyNVR能否出一个硬件的版本,摆脱自建服务器的压力?".&qu ...

  5. Instapaper 使用经验和技巧

    Instapaper 分类本质是文件夹整理,没有标签. 文件夹意味着一篇文章只能放在一个文件夹里,不像标签可以实现一篇文章多个标签的功能. 一.文件夹和Like功能 1.已有文件夹: Home:存放所 ...

  6. Lucene索引数计算

    Elasticsearch默认在创建索引结束时得到5个分片及1个副本: 分片是有0-n个副本,“5个分片及1个副本”即“5个分片及5个相应分片副本”:共10个Lucene索引 副本数:指的是“单个分片 ...

  7. JavaScript数据结构与算法-集合练习

    集合的实现 function Set () { this.dataStore = []; this.add = add; this.remove = remove; this.size = size; ...

  8. CSS3边框border-radius

    一.官方解释 设置或检索对象使用圆角边框.提供2个参数,2个参数以“/”分隔,每个参数允许设置1~4个参数值,第1个参数表示水平半径,第2个参数表示垂直半径,如第2个参数省略,则默认等于第1个参数. ...

  9. GPU instancing

    参考 https://www.cnblogs.com/hont/p/7143626.html github地址 https://github.com/yingsz/instancing/ 补充2点: ...

  10. UML初览(转)

    原文:UML初览 本章使用一个简单的例子对UML中所使用的概念和视图进行初览.本章的目的是要将高层UML概念组织成一系列较小的视图和图表来可视化说明这些概念,说明如何用各种不同的概念来描述一个系统以及 ...