采用大杀招QEMU调试Linux内核代码
Linux调试内核代码是非常麻烦。它们一般加printk, 或者使用JTAG调试。
这里的方法是使用QEMU为了调试Linux核心。
由于QEMU自己实现gdb server, 它可以容易地使用gdb要调整内核。
也很有帮助。
为了尽量不多花时间在QEMU设置上,这里直接使用下面的内核image:
http://free-electrons.com/community/demos/qemu-arm-directfb/
1. QEMU的安装
这个能够自己去QEMU的官网下载编译,假设自己手头上的发行版有相应QEMU的包的话那也能够直接安装。
CentOS的话參考前面的 CentOS rpm 额外包的源
2. 下载相应的内核映像
从下面网址下载:http://free-electrons.com/pub/qemu/demos/arm/directfb/1.0/ 这里面有一个vmlinuz-qemu-arm-2.6.20
3. 启动QEMU
使用例如以下命令启动:
$ qemu-system-arm -M versatilepb -m 16 -kernel vmlinuz-qemu-arm-2.6.20 -append "clocksource=pit quiet rw" -S -s
4. 调试内核
这里须要有一个包括调试信息的vmlinux文件。能够直接编译http://free-electrons.com/pub/qemu/demos/arm/directfb/1.0/src/linux-2.6.20.tar.7z
假设自己不想编译的话能够使用一个已编译好的vmlinux文件:http://pan.baidu.com/s/1sjuJYc1
然后运行例如以下命令:
$ arm-none-linux-gnueabi-gdb vmlinux
在gdb在控制台输入:
(gdb) target remote :1234
(gdb) b start_kernel
(gdb) c
这一次,程序运行它会落在你设置断点start_kernel办公室。OK。所以,你可以调试内核任意代码!
最新文章
- 配置apache和nginx的tomcat负载均衡
- [转载] 在java中为什么变量1000 = 1000 返回false,但是100=100返回true?
- android: 内容提供器简介
- unity4.6 failed to update unity web player
- HTML5性能优化
- 洛谷P2279 [HNOI2003]消防局的设立
- opencv的高斯混合模型
- 关闭linux下的使用的端口
- 【安卓特效】怎样给ImageView加上遮罩,点击时泛黑、或泛白、?
- poj 2454 Jersey Politics 随机化
- MSSQLSERVER数据库- 配置数据库邮件配置的操作过程
- Nim游戏(组合游戏Combinatorial Games)
- hdu 4714 Tree2cycle dp
- visual studio中如何将string类型值转为BYTE(unsigned char)类型
- webpack初探 - (一)
- C++如何禁止对象的复制操作
- POJ 3009 Curling 2.0(DFS + 模拟)
- Visual studio 2010出现“error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”解决方式
- MongoDB学习笔记(三)--权限 &;&; 导出导入备份恢复 &;&; fsync和锁
- s:debug标签的错误ConcurrentModificationException
热门文章
- ASP.NET从MVC5升级到MVC6
- gap锁 对于unique index 和Ununique index
- linux下C语言socket网络编程简例
- 奋斗的孩子的TableView(三篇文章)
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
- SilkTest高级进阶系列6-motif tag
- Git使用之搭建基于SSH的Gitserver(上篇)
- nagios二次开发(五岁以下儿童)---nagios和nagiosql关系
- malloc函数的一种简单的原理性实现
- R12 付款过程请求-功能和技术信息 (文档 ID 1537521.1)