VELT-0.1.6开发:在VS2013下用QEMU调试x86 Linux内核

快乐虾

http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651)

欢迎转载,但请保留作者信息

VELT的全称是Visual EmbedLinuxTools,它是一个visual studio插件,用以辅助完成Linux开发。利用这个插件,将可以在visualstudio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译和调试,并根据编译时的错误信息正确定位到源码。目前的版本是0.1.5,仅支持vs2013。此插件可以在百度网盘下载(http://pan.baidu.com/s/1c0lMxdm),安装过程参见《用vs2013+velt-0.1.4进行嵌入式开发:插件安装》。下面是它的基本功能:

  1. 支持x86 Linux,海思hi3516/hi3520,MinGW这几个平台,提供这几个平台的项目模板。
  2. 完成UBOOT的编译,并根据编译的错误信息自动定位到相应的文件位置。
  3. 完成LINUX内核的编译,并根据编译的错误信息自动定位到相应的文件位置。
  4. 利用串口进行内核的简单调试。
  5. 在VS下完成Linux内核的配置。
  6. 不使用Makefile进行Linux应用程序的编译。
  7. 使用Makefile进行Linux应用程序的开发。
  8. 使用SSH连接目标机器并用gdb进行应用程序的调试。
  9. 使用Telnet连接目标机器并用gdb进行应用程序的调试。
  10. 在VS中集成Linux终端(Poderosa),支持SSH/Telnet/Com,在打开终端时自动将VS的变量导出为bash里的变量,如ProjectDir等。
  11. 带python-2.7.6,且集成了numpy, scipy, matplotlib, cv2, pyqt4等python库。可以在PTVS下直接调用进行调试。

接下来使用QEMU来调试x86内核。它的基本原理是使用QEMU虚拟一个x86的机器,打开gdbserver接口,再用gdb通过网络连接到此接口上进行调试。

1.1  在MinGW下编译qemu

首先我们需要一个可用的qemu,选择最新的2.2.0版本。

要在MinGW下成功编译,需要SDL-1.2.5,还需要directx,这个可以在libsdl.org上获得。

./configure –target-list=i386-softmmu

make

就可以了。

我们需要i386-softmmu目录下生成的qemu-system-i386.exe和pc-bios目录下的文件。

由于我们只对内核有兴趣,所以暂时不需要制作虚拟硬盘。

1.2  编译内核

接下来在kernel.org上下载linux-3.18.9的内核。

同样打开内核的调试信息。

我们需要内核根目录下的vmlinux和arch/x86/boot/bzImage文件。

1.3  用QEMU加载内核

接下来我们用QEMU加载内核:

qemu-system-i386 –kernel bzImage –S –gdb tcp:127.0.0.1:1234

这里的-S让QEMU在启动时等待gdb连接。

-gdb指定gdbserver要绑定的ip和端口。

执行此命令后QEMU的状态:

1.4  使用gdb连接

打开gdb并加载vmlinux:

gdb vmlinux

然后在gdb的命令行下执行:

此时的QEMU:

1.5  用vs2013调试内核

在用命令行调通QEMU之后,用VS2013就很简单了,只需要将前面的-exec-run改为target remote127.0.0.1:1234就可以了。

创建一个内核工程,将项目类型修改为Linux内核:

再将目标主机的连接方式改为Qemu:

再修改调试时的工作目录:

在start_kernel函数设置一个断点,然后就可以调试运行了,F5~~~~

哈哈,一切顺利!!!

再试试单步执行,一切正常~~~

收工

??

时间: 2024-12-26 00:01:52

VELT-0.1.6开发:在VS2013下用QEMU调试x86 Linux内核的相关文章

《Linux4.0设备驱动开发详解》笔记--第九章:Linux设备驱动中的异步通知与同步I/O

在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问.因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类似"中断"的异步通知所取代.异步通知类似于硬件上的"中断"概念,比较准确的称谓是"信号驱动的异步I/O". 9.1 异步通知的概念和作用 异步通知:一旦设备就绪,则主动通知应用程序,该应用程序无需查询设备状态 几种通知方式比较: 阻塞I/O :一直等待设备可访问后开始访问 非阻塞I/O:

Vs2012在Linux开发中的应用(13): 添加对x86 Linux的支持

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 因为马上要进入Debugger的研究,为了方便对GDB的学习,先添加对虚拟机中的x86 linux的平台支持.按照先前的做法,很容易就看到结果了: 突然发现,原来的修改注册表似乎并不是必须的!! 在交叉编译器参数中直接留空: 看编译结果: 搞定!!! 

如何参与Linux内核开发(转)

本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any comment or update to the content, please contact theoriginal document maintainer directly.  However, if you have a problemcommunicating in English yo

安装 Linux 内核 4.0

大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0.代号为‘Hurr durr I'm a sheep’的Linux内核4.0是目前为止最新的主干内核.它是稳定版3.19.4之后发布的内核.4月12日是所有的开源运动爱好者的大日 子,Linux Torvalds宣布了Linux内核4.0的发布,它现在就已经可用了.由于包括了一些很棒的功能,例如无重启补丁(实时补丁),新的升级驱动,最新的 硬件支持以及很多有趣的功能都有新的版本,它原本被期望是一次重要版本.但是实

C语言在linux内核中do while(0)妙用之法

为什么说do while(0) 妙?因为它的确就是妙,而且在linux内核中实现是相当的妙,我们来看看内核中的相关代码: #define db_error(fmt, ...) do { fprintf(stderr, "(error): "); fprintf(stderr, fmt, ##__VA_ARGS__); } while (0) 这只是个普通的调试信息的输出,有人便会认为,你这不是多此一举吗?去掉do while(0)不一样也实现了吗?其实不然,我们看看例子就清楚了,尽管很

Linux内核--网络栈实现分析(七)--数据包的传递过程(下)

本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7545855 更多请查看专栏,地址http://blog.csdn.net/column/details/linux-kernel-net.html 作者:闫明 注:标题中的”(上)“,”(下)“表示分析过程基于数据包的传递方向:”(上)“表示分析是从底层向上分析.”(下)“表示分析是从上向下分析. 在博文Linux内核--网络栈

Linux内核--网络栈实现分析(十一)--驱动程序层(下)

本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7555870 更多请查看专栏,地址http://blog.csdn.net/column/details/linux-kernel-net.html 作者:闫明 注:标题中的”(上)“,”(下)“表示分析过程基于数据包的传递方向:”(上)“表示分析是从底层向上分析.”(下)“表示分析是从上向下分析. 在博文Linux内核--网络栈

如何在Ubuntu/CentOS上安装Linux内核4.0

大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0.代号为‘Hurr durr I'm a sheep’的Linux内核4.0是目前为止最新的主干内核.它是稳定版3.19.4之后发布的内核.4月12日是所有的开源运动爱好者的大日 子,Linux Torvalds宣布了Linux内核4.0的发布,它现在就已经可用了.由于包括了一些很棒的功能,例如无重启补丁(实时补丁),新的升级驱动,最新的 硬件支持以及很多有趣的功能都有新的版本,它原本被期望是一次重要版本.但是实

VELT-0.1.5开发:在vs2013下调试Linux内核

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 本文仅适用于vs2013 + velt-0.1.5 VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可