新闻| 论坛| 博客| 在线研讨会
linux-kernel调试技术大全上海索漫培训教材
xiajiashan| 2012-08-29 10:28:36 阅读:791 发布文章

作者:下家山(请尊重原创,转载请注明) http://www.xiajiashan.com

九.DEBUG_PREEMPT抢占调试技术

9.1 Preempt抢占调试技术的作用

选择此选项,kernel将使用一个调试变量,这个变量的值通过smp_processor_id()函数获取,当使用了一个不安全的“抢占”方法,kernel将打印此变量。即,内核将检测到“抢占计数器”溢出。

9.2 如何打开此选项

这一选项需要在“Kernel Features”中打开[*] Preemptible Kernel(EXPERIMENTAL)选项才会出现在“Kernel hacking”中[*]Debug preemptible kernel(NEW)。

9.3 linux如何实现实时性

十:DEBUG_KOBJECT调试技术

DEBUG_KOBJECT选项的作用,此选项打开后, kobiect(.ko)外部加载模块的调试信息将会送到syslog。因为syslog是一中很主流的调试技术,我想日后作为一个专题来讲,所以这里就略过!

哪位精通syslog相关工具请贴出来,或跟我发邮件!

十一:DEBUG_HIGHMEM调试

DEBUG_HIGHMEM选项打开后,能够检查高端内存的错误。

哪位做过相关实验,请帮我补充进来。

十二:DEBUG_BUGVERBOSE调试 12.1 作用

通过这个选项,在kernel打印出BUG()信息的同时打印此信息所在的文件名和行号。这是一个有用的选项。

12.2 如何打开该选项

DEBUG_BUGVERBOSE的打开依赖于DEBUG_KERNEL和EMBEDDED,那么EMBEDDED在哪里打开呢?这个地方还真不好找,见init/kconfig

menuconfig EMBEDDED

bool "Configure standard kernel features (for small systems)"

help

This option allows certain base kernel options and settings

to be disabled or tweaked. This is for specialized

environments which can tolerate a "non-standard" kernel.

Only use this if you really know what you are doing.

而具体到make menuconfig在哪里呢?

=======================================================================================

By 下家山 Q群 75303301 上海松江文汇路928号258室 松江大学城 8/4/2012

上海索漫科技 http://www.xiajiashan.com 专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训

1.jpg

这样在“Kernel hacking”中就出来了

2.jpg
12.3 产生的疑问

我通过测试发现,不管我是否打开此调试选项,调用BUG()和BUG_ON(1)都会打印出所在的文件及行号。

12.4 测试代码

#include

#include

#include

static int scheduler_test_init(void)

{

BUG_ON(1);

printk(KERN_EMERG "\nHello\n");

return 0;

}

static void scheduler_test_exit(void)

{

printk(KERN_EMERG"\nGoodbye\n");

}

module_init(scheduler_test_init);

module_exit(scheduler_test_exit);

十三:DEBUG_IOREMAP调试

在linux2.6.15中此调试选项是针对PARISC(HP公司)处理器的,这里略过。

十四:DEBUG_FS调试

哪位做过相关实验,请帮我补充进来.

十五:DEBUG_VM调试

哪位做过相关实验,请帮我补充进来

十六:FRAME_POINTER调试

FRAME_POINTER选项在你用外部调试器(如,GDB,KGDB等)时必须打开。

十七:RCU_TORTURE_TEST选项

该选项涉及到RCU原理。官方资料见http://www.rdrop.com/users/paulmck/RCU/

“RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的操作。”

摘自杨燚写的《Linux2.6内核中新的锁机制--RCU》。

本人没有用过,具体实现及测试略过。

十八:其他选项跟KGDB有关

见其他文章。

十九:结束语

本文还没有涉及到KGDB相关调试技术,KGDB调试需要两台PC及两个串口,调试不是很方便,此部分工作本人只完成一半就搁浅了,目前还没有时间继续。另,在此想结识对KGDB有所研究或及其感兴趣的人士。

请与我联系:

QQ:408452271

Email:ximenpiaoxue4016@sina.com

BBS: http://www.xiajiashan.com/

2010-1-7 上海.松江

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
02年接触ARM和ucos,开发过有线和无线图像报警器,IPCamera,人脸识别系统,OCR识别系统,指纹识别系统,05年开始从事Linux及Rtems下WiFi,camera,Ethernet等驱动开发工作,专做嵌入式linux培训,致力于把我十年来的研发经验传授给每一个学员,招人的可以找我,ximenpiaoxue4016@sina.com
推荐文章
最近访客