一 linux内核源码阅读工具
windows下当然首选source insight, 但是linux下就没有source insight这么优秀的工具了,但是也有不少的替代品,但觉绝对部分人会选择vim+ctags+cscope的组合,还有部分人或选择wine中的source insight或选择navigatror,当然对于代码阅读来说vim+ctags+cscope的组合还是比较好的一个选择方案,但是,当我使用了eclipse之后,个人感觉用eclipse作为linux环境下源码阅读工具确实比vim+ctags+cscope的组合方便很多。
下面是linux环境下eclipse的配置安装方案:
eclipse下载地址:http://eclipse.org/downloads/?osType=linux
eclipse环境配置方案:http://forum.ubuntu.org.cn/viewtopic.php?t=183803
二 eclipse + qemu 进行linux源码的编译和调试
最初调试内核采用了qemu + insight 或qemu + ddd的组合,相比来说insgiht的界面更加有好些,但是ubuntu 10.04以上的版本,删除了对Insight的默认支持,只能下载insight的源码编译安装,而且insight更新非常慢。 很久以前就看到有人用eclipse + qemu进行linux内核源码的编译和调试,这次终于抽了个时间尝试一下,毕竟eclipse的debugger是非常强大的。
工具组合:Eclipse
IDE for C/C++ Linux Developers+ qemu-0.12.3 (最好用kvm, 不幸的是机器太旧,不支持硬件虚拟化)
1.首先我们要从www.kernel.org下载内核源码,在这里我选择的是
linux-2.6.32.tar.bz2。我将其下载到我的主目录下,然后在terminal下输入以下命令。
$ cd (回到主目录)
$ tar xf linux-2.6.32.tar.bz2
(解压源码)
$ mkdir linux-2.6.32-obj
(创建一个编译内核的目标文件输出目录)
$ cd linux-2.6.32 (进入内核源码树根目录)
$ make O=~/linux-2.6.28-obj
menuconfig (这里我们要配置内核,并在~/linux-2.6.32-obj目录下生成内核配置文件.config)
$ make mrproper
2.
接下来我们打开elicpse,第一次打开时有一个欢迎画面,
我们单击右边的workbench图片关掉欢迎画面。由于eclipse
cdt是一个非常强大的c/c++
ide,它默认会自动的解析工程中源程序并编译工程和产生智能提示信息。但由于我们调试内核过程中暂不会用到这些功能,所以要关闭他们。
首先我们到Window->Preferences->General->Workspace
中将Build Automatically选项去掉。
然后到Window->Preferences->C/C++ ->
Indexer中,将默认的Fast c/c++ indexer改为No indexer。
然后我们开始创建一个新的工程。
从菜单中选择File -> New -> Project...
-> C/C++ -> C Project 然后单击Next按钮。
这时出现一个对话框,在Project Name 一栏填入一个工程名,比如
linux-kernel. 然后将 Use default location 选项给勾掉。在Location一栏填入刚才解压的内核源码的路径。Project
type选择Makefile project -> Empty project。Toolchains 选择 Linux
GCC.最终结果如下图所示:
然后单击Next按钮,出现下一个对话框。这时候因为工程的默认配置还不完全符合我们的要求。所以我们单击 Advanced Settings
按钮会打开一个工程配置对话框。我们选择左侧的 C/C++ Build 选项,在相应的右侧页面里我们将Builder Settings 选项页下的 Use
default build command 勾选掉,然后指定一个新的Build command 为 make
O=/home/xxx/linux-2.6.28-obj.然后单击Build location中的File
system...按钮更改obj文件的输出目录为/home/xxx/linux-2.6.28-obj.
最终结果如下图所示:
然后单击Behaviour选项页,将build(Incremental
Build)中的all更改为一个空格,将下面的clean更改为mrproper(这是默认清除内核obj文件的命令目标)。弄好后如下图所示:
这个时候你就可以编译内核了。Ctrl + B 开始编译内核。
编译完内核。在/home/xxx/linux-2.6.32-obj/arch/x86/boot/下将生成一个bzImage的大内核镜像。
此时我们在xterm下运行qemu虚拟机,命令行如下:
$ qemu -s -S -hda ~/linux-0.2.img -kernel
/home/xxx/linux-2.6.32-obj/arch/x86/boot/bzImage -append
root=/dev/hda
我解释一下这个命令行上的参数。
-s
选项表示我们运行虚拟机时将1234端口开启成调试端口,供eclipse网络调试时使用
-S
选项表示我们启动虚拟机时要“冻住”虚拟机,等待调试器发出继续运行的命令。
-hda ~/linux-0.2.img 表示我们要运行时的硬盘
(这个文件可以在http://wiki.qemu.org/Download下到)
-kernel
/home/xxx/linux-2.6.32-obj/arch/x86/boot/bzImage 表示我们要调试的内核镜像
-append root=/dev/hda
表示我们要传递给内核的参数(这里你可能感觉有点奇怪为啥是/dev/hda而不是/dev/hda1或是/dev/hda2呢?因为这个镜像仅仅是一个分区的二进制镜像,不是整个硬盘的镜像)
启动后,你会看到屏幕黑黑的啥也没有。因为我们指定了-S参数把虚拟机给“冻”住了。
继续回到eclipse中,这时候我们在菜单中选择Run -> Debug
Configurations ,这时候打开一个配置页面。然后我们在C/C++
Application上双击鼠标,这时在右侧的页面弹出了debug配置选项,然后我们在project一栏选择 linux-kernel ,在下面的C/C++
Application中填入/home/xxx/linux-2.6.32-obj/vmlinux,如下图所示:
然后我们单击Debugger选项页,将Debugger改为 GdbServer
Debugger . 将Stop on startup at 改为start_kernel,将Connection子选项页下的Type改为TCP将Port
number改为1234,最终如下图所示:
然后单击Debug按钮开始调试!这时候Eclipse会提示我们切换
Perspective ,选择是,不再提示。
这时候就开始调试内核,而且是源码级的调试!如下图:
总结: 对于机器配置比较差的同学这种搭配可能比较郁闷,每次调试的时间太长了。而且还有个问题就是每次调试都要进行编译,不知道有没有选项可以禁止调试时候的自动编译,希望了解的大侠通知下小弟。
分享到:
相关推荐
安装QEMU,了解QEMU对multiboot的 支持情况 可以使用其他虚拟机或模拟器 遵守multiboot协议,写multiboot header 直接在VGA的显存中写“helloworld” 使用串口输出“HELLOWORLD” 了解并掌握必要的汇编 了解Makefile...
调试linux内核用的虚拟机.把linux内核放在该平台下运行,然后在物理机下调试内核。
QEMU+树莓派3B调试Linux-设备树以及原版内核文件
这里说明下,本人调试的内核版本是2.6.11.12,为什么去调试这么“古老”的版本?原因不多说了,你手头也许正拿着ULK3,而它针对的内核版本正是2.6.11,有比这更好的理由吗?而且这个版本不算旧,已不算新,我认为还...
EclipseCDT+QEMU调试linux内核.pdf
原版内核
linux内核调试分析指南 linux内核调试分析指南--上篇 本文档已经转到下面的网址,位于zh-kernel.org的文档停止更新,请访问新网址 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一...
介绍qemu+kvm的使用方法,以及两种之间的关系。
本文档详细介绍了:在windows10主机的vmware软件中安装ubuntu18.04系统,再基于x86架构的ubuntu18.04,搭建openEuler_aarch64架构的qemu虚拟机。
arm, x86 两个平台的qemu 模拟器的安装,gdb 的安装,内核的编译的核调试 ,包括根文件系统的制作,实测的启动参数
在linux系统下(包括CentOS、Ubuntu等)编译QEMU和SPICE协议,使其支持USB重定向。
本文将为大家介绍两种Linux中用GDB与QEMU来调试内核分析的方法。
行业分类-物理装置-一种通过nova调用qemu+guest+agent接口的方法
使用qemu虚拟机环境实现linux内核源码级的调试
使用qemu调试linux5.10内核aarch64,并可以调试head.S,并使用sourceinsight添加linux内核实际使用的文件。总结网上的各个资料,实际应用了一遍,整理整个过程中的文档,以备查看
设备树
linux下已经具备qemu模块供大家使用,想要自己锻炼一下的朋友可以在linux上重新集成一下qemu模块
5、Linux内核编译与运行:Busybox准备、环境配置、编译最小文件系统、编译内核、运行QEMU 6、Linux内核模块编程:内核模块编程、卸载模块编程、参数模块编程 8、Linux内存管理:编写模块程序、编译、插入模块、查看...
此配置文件.config是针对QEMU模拟器裁剪的linux-5.5.9内核源码配置,以减少编译时间。 https://blog.csdn.net/eidolon_foot/article/details/104905084。
Linux 内核实验室 —— 基于 Docker/Qemu 的极速 Linux 内核学习、开发和测试环境。社区制作了多款免安装的随身Linux Lab系统盘,某宝检索”泰晓 Linux"快速体验。本项目致力于创建一个基于 Docker + QEMU 的 Linux ...