"); //-->
打开该选项,内核将捕获对未初始化自旋锁的操作,也会捕获两次解开同一锁的操作等其他错误。
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 运行结果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 运行结果 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)培训
检测不到此错误!
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);
●运行结果检测到了此错误!
作者:下家山(请尊重原创, 转载请注明) http://www.xiajiashan.com,有什么问题可与我联系:ximenpiaoxue4016@sina.com专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
中国贪官外逃的黑洞到底有多深?
联发科与台积电成功合作开发业界首款采用N6RF+制程
说说偶当年的求职经历[原创]
555简易开关稳压器电路
技创科技将在本月中推出支持TI全系列DSP的仿真器!
采用CoolSiC™ MOSFET的7.5kW电机驱动器评估板
CYGNAL 单片机简介
采用EconoDUAL™ 3的250kW eCAV主驱功率单元
DS1302 实时时钟芯片
DS1961S 带有SHA-1引擎保护的1k位EEPROM ibuttom
技创科技将在本月中推出支持TI全系列DSP的仿真器
555简易开关式充电器电路
台积电向英伟达、AMD提议合资经营英特尔晶圆代工
关于骁龙8至尊版,你提问我来答
OPPO Find X8S或将搭载联发科最强芯片
Snapdragon Sound 骁龙畅听技术:“声”临其境畅享无线好声音
可调电压电源
555可控硅快速充电机电路
介绍采用 nanoWatt XLP技术的超低功耗系列单片机
全芯打造3G移动互联时代
555高精度无级调压稳压器电路
如何在数in2组成430W均流输出
英飞凌在Embedded World 2025上展示支持高品质设计的创新MCU解决方案
555锌锰干电池还原充电器电路
DS1982 1k位只添加iButton
采用 LTpowerPlay 来管理 LTC2978
AI浪潮下,群晖如何为芯片产业筑牢数据保险库
风河助力半导体SOC进行Android商用进程
Designing a PCI Target Using ispMACH device
技创科技将在本月中推出支持TI全系列DSP的仿真器!