设为首页 加入收藏

TOP

Linux 内核调试2-UML调试内核
2014-11-24 11:27:56 来源: 作者: 【 】 浏览:1
Tags:Linux 内核 调试 UML

今天的特别汗,首先,之前UML在64位系统下没有编译通过,编译器和内核源码都应该不会犯这样低级的错误,那最有可能的原因就是gcc版本和 linux内核版本不匹配,gcc 4.4.4版本算是高版本了,而内核版本2.6.34已非最新,抱着侥幸心里下载了2.6.36版本编译,居然顺利通过,看来64位与32位编译并没什么 区别。


另外一个问题是昨天启动UML失败的问题,原来是我的命令行写错了,ubda指定根文件系统,我错写成了udba,以至无法加载文件系统,经过纠正后的命令如下:



当然这也不存在内核配置错误的问题了,至于根文件系统需要慢慢积累。


接下来看看如何调试内核,由官方文档 Kernel Hacking with UML 所言,直接使用 gdb linux 便可调试,不过我在启动一开始便遇到段错误,单步运行居然还能继续,之后便陷入无休止的trap中。


继续 google(最能找到答案的往往在国外的论坛,而且常常需要翻墙),最后找到两个设置,是SIGSEGV和SIGUSR1信号不中断继续运行,最终居然可以,这点让人百思不得其解,还是先看看现象如何:


居然一切顺利的断到了start_kernel,哈哈,不管如何,总算能够调试内核了。接下来还有UML虚拟机的网络配置,UML使用了一个取巧的方式就是利用 tun 和 iptables ,好在我也研究了大半年,明天继续。


今天唯一不明白的地方在于GDB调试的问题,明明遇到了SIGSEG,为什么还能继续呢?莫非这个信号是自己发出的?还有之后的SEGTRAP信号是怎么发出来的?要弄清楚这个问题,或许还得查阅UML代码。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux 内核调试1-UML 下一篇Linux 内核调试3-UML网络配置

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C 内存管理 | 菜鸟教 (2025-12-26 20:20:37)
·如何在 C 语言函数中 (2025-12-26 20:20:34)
·国际音标 [ç] (2025-12-26 20:20:31)
·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)