专栏中心

EEPW首页 > 专栏 > linux-kernel调试技术大全上海索漫培训教材

linux-kernel调试技术大全上海索漫培训教材

发布人:xiajiashan 时间:2012-08-29 来源:工程师 发布文章
作者:下家山(请尊重原创,转载请注明) http://www.xiajiashan.com   二:SPINLOCK调试 2.1 spin_lock调试作用

打开该选项,内核将捕获对未初始化自旋锁的操作,也会捕获两次解开同一锁的操作等其他错误。

21.jpg
2.2 捕获未初始化自旋锁 2.2.1实验代码:

//spinlock.c

#include <linux/init.h>

#include <linux/module.h>

#include <linux/spinlock.h>

unsigned char aa;

spinlock_t SpinLockTest ;

static int spinlock_init(void)

{

int i;

unsigned long flags;

// spin_lock_init(&SpinLockTest);//进行未初始化自旋锁检测

spin_lock_irqsave(&SpinLockTest, flags);

aa =1;

spin_unlock_irqrestore(&SpinLockTest, flags);

printk(KERN_EMERG "\nHello\n");

return 0;

}

 

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

By 下家山 QQ 1209050967 上海松江文汇路928号258室 松江大学城 7/31/2012

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

 

static void spinlock_exit(void)

{

printk(KERN_EMERG"\nGoodbye\n");

}

module_init(spinlock_init);

module_exit(spinlock_exit);

2.2.2 运行结果

 

22.jpg
2.3.1 代码

//spinlock.c

#include <linux/init.h>

#include <linux/module.h>

#include <linux/spinlock.h>

unsigned char aa;

spinlock_t SpinLockTest ;

static int spinlock_init(void)

{

int i;

unsigned long flags;

spin_lock_init(&SpinLockTest);

spin_lock_irqsave(&SpinLockTest, flags);

aa =1;

spin_unlock_irqrestore(&SpinLockTest, flags);

printk(KERN_EMERG "\nHello\n");

return 0;

}

static void spinlock_exit(void)

{

printk(KERN_EMERG"\nGoodbye\n");

}

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

By 下家山 QQ 1209050967 上海松江文汇路928号258室 松江大学城 7/31/2012

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

 

module_init(spinlock_init);

module_exit(spinlock_exit);

2.3.2 运行结果
23.jpg
2.4 如果不打开spin_lock调试功能

如果不打开spin_lock调试功能,则检测不到自旋锁未初始化错误。

2.4.1实验代码

测试代码与2.2.1实验代码同。

2.4.2实验结果

测试结果与2.3.2 运行结果同。

2.5 检测两次解开同一锁 2.5.1 关闭此功能

即在”kernel hacking”中不选择“spinlock debugging”,看能否检测两次解开同一锁的错误。

●测试代码

//spinlock.c

#include <linux/init.h>

#include <linux/module.h>

#include <linux/spinlock.h>

unsigned char aa;

spinlock_t SpinLockTest ;

static int spinlock_init(void)

{

int i;

unsigned long flags;

spin_lock_init(&SpinLockTest);

spin_lock_irqsave(&SpinLockTest, flags);

aa =1;

spin_unlock_irqrestore(&SpinLockTest, flags);

spin_unlock_irqrestore(&SpinLockTest, flags);

printk(KERN_EMERG "\nHello\n");

return 0;

}

static void spinlock_exit(void)

{

printk(KERN_EMERG"\nGoodbye\n");

}

module_init(spinlock_init);

module_exit(spinlock_exit);

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

By 下家山 QQ 1209050967 上海松江文汇路928号258室 松江大学城 7/31/2012

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

24.jpg

检测不到此错误!

2.5.2 打开此功能

即在”kernel hacking”中选择“spinlock debugging”,看能否检测两次解开同一锁的错误。

●测试代码

//spinlock.c

#include <linux/init.h>

#include <linux/module.h>

#include <linux/spinlock.h>

unsigned char aa;

spinlock_t SpinLockTest ;

static int spinlock_init(void)

{

int i;

unsigned long flags;

spin_lock_init(&SpinLockTest);

spin_lock_irqsave(&SpinLockTest, flags);

aa =1;

spin_unlock_irqrestore(&SpinLockTest, flags);

spin_unlock_irqrestore(&SpinLockTest, flags);

printk(KERN_EMERG "\nHello\n");

return 0;

}

static void spinlock_exit(void)

{

printk(KERN_EMERG"\nGoodbye\n");

}

module_init(spinlock_init);

module_exit(spinlock_exit);

●运行结果
25.jpg

检测到了此错误!

作者:下家山(请尊重原创, 转载请注明) http://www.xiajiashan.com,有什么问题可与我联系:ximenpiaoxue4016@sina.com

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

联发科与台积电成功合作开发业界首款采用N6RF+制程

EDA/PCB 2025-03-14

采用CoolSiC™ MOSFET的7.5kW电机驱动器评估板

CYGNAL 单片机简介

采用EconoDUAL™ 3的250kW eCAV主驱功率单元

DS1302 实时时钟芯片

DS1961S 带有SHA-1引擎保护的1k位EEPROM ibuttom

台积电向英伟达、AMD提议合资经营英特尔晶圆代工

关于骁龙8至尊版,你提问我来答

OPPO Find X8S或将搭载联发科最强芯片

Snapdragon Sound 骁龙畅听技术:“声”临其境畅享无线好声音

消费电子 2025-03-14

可调电压电源

介绍采用 nanoWatt XLP技术的超低功耗系列单片机

全芯打造3G移动互联时代

视频 2011-01-20

如何在数in2组成430W均流输出

视频 2011-02-20

英飞凌在Embedded World 2025上展示支持高品质设计的创新MCU解决方案

DS1982 1k位只添加iButton

采用 LTpowerPlay 来管理 LTC2978

视频 2011-02-17

AI浪潮下,群晖如何为芯片产业筑牢数据保险库

风河助力半导体SOC进行Android商用进程

视频 2011-01-20
更多 培训课堂
更多 焦点
更多 视频

技术专区