linux内核调试+qemu+eclipse

一、调试环境:

在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开始调试。




### 如何使用Eclipse调试Linux内核 #### 安装必要的工具和配置环境 为了能够顺利地通过Eclipse调试Linux内核,需要先准备好相应的开发环境。这通常意味着安装并设置好交叉编译器、QEMU模拟器以及其他辅助工具。 对于基于ARM架构的目标平台来说,可以采用如下方式准备: - **安装交叉编译链**:确保拥有适合目标硬件的GCC版本,例如`arm-linux-gnueabihf-gcc`。 - **获取源码树**:下载官方发布的稳定版或其他特定分支的Linux内核源代码,并按照需求打补丁或修改。 - **构建内核映像**:利用Makefile完成编译过程,生成可用于加载到虚拟机中的zImage文件[^4]。 #### 设置Eclipse项目结构 创建一个新的C/C++工程,在导入现有资源时指定之前提到过的内核源目录作为工作空间的一部分。接着调整项目的属性以适应实际状况下的编译选项与路径变量等参数设定。 #### 配置GDBServer连接至远程设备/QEMU实例 启动QEMU仿真器运行所选CPU型号(如vexpress-a9),并通过附加命令行开关暴露其监听端口给外部访问者。此时应当注意到开启单步执行模式(`-S`)以及启用gdbstub服务(`-s`)的重要性[^5]。 ```bash qemu-system-arm \ -nographic \ -M vexpress-a9 \ -m 1024M \ -kernel path/to/arch/arm/boot/zImage \ -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" \ -dtb path/to/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \ -S -s ``` #### 创建Debug Configuration 回到Eclipse IDE内部定义新的调试方案,选择Remote GDB Hardware Debugging类别之后输入主机名/IP地址连同对应的TCP端口号(默认情况下为1234)。另外还需指明本地符号表位置以便于断点管理和反汇编视图等功能正常使用。 最后点击Apply & Debug按钮即可触发整个流程直至到达预设的第一条指令处暂停等待进一步指示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值