红联Linux门户
Linux帮助

linux内核调试+qemu+eclipse

发布时间:2017-02-09 09:36:58来源:blog.csdn.net/wang__rongwei作者:JiffyKernel
一、调试环境:
在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。
如果我们选择的是较新的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:
linux内核调试+qemu+eclipse   
3.建工程,工程名字:kernel-4.4,下面的location,便是需要编译的内核路径,由于我是记录我的建工程,他警告我已经有一个工程在同一个路径下,第一次就不会出现这个警告。还有一个重要的选择--->Makefile project选择右边的Linux GCC。点击NEXT。
linux内核调试+qemu+eclipse
4.工程配置,选择Advanced settings:
linux内核调试+qemu+eclipse
出现下面的配置界面,双击C/C++Build,设置如下,
linux内核调试+qemu+eclipse
点击Behavior,将Build后面改为一个空格,将clean后边改为mrproper。最好点击下面的Apply即可。
linux内核调试+qemu+eclipse
最后一个设置,在C/C++General下选择Indexer,在左边设置如下,这个选项也可以不需要设置,只是对于使用软件不卡:
linux内核调试+qemu+eclipse
工程建完后,我们需要编译,按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下填写如下:
linux内核调试+qemu+eclipse
接下来,选择旁边的Debugger,设置一个start_kernel,然后选择下面的Connection,设置TCP类型,还有localhost、1234:
linux内核调试+qemu+eclipse
一切OK,点击下面的Debug开始调试。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/28262.html