Ⅰ linux 内核中断 用什么锁
首先我阐明一下,用锁的情况只有两种:
线程
文件
内核程序在使用的时候也脱离不了这两种锁的概念。
中断,是信号,是否要处理中断信号?或者产生中断信号?
对信号来说只有:
信号屏蔽、信号捕捉、信号排队、可重如函数等概念。
你想问的问题,我没猜测,在处理某个信号时,不想让其他信号中断,那么使用信号屏蔽字:
先设置要屏蔽的信号集,要保存的信号集,初始信号集,可供协调使用的函数有几个:
#include <signal.h>
signal(这个不建议使用,应为有些老的实现是有问题的),设置信号处理程序
sig_atomic_t 数据类型
sigprocmask,设置信号屏蔽字
sigaction,设置信号处理程序,功能跟强悍,可控性更好
sigsuspend,以原子性方式,等待某些信号发生,然后返回
你具体要做啥不清楚,但使用上面的信号相关的函数,肯定能实现你的功能。参考APUE的论述。
Ⅱ 请教linux irq 中断能使用mutex互斥锁吗
从Backtrace来看,应该是i2c_transfer中调用mutex_lock导致schele调用
而产生进程调度,导致死机.而在中断上下文,这种情况是绝对不允许发生的.换句话说是不允许
睡眠的,不允许进程调度.
你可以把mutex_lock注释掉再试试.
Ⅲ Linux甯歌佹绘満铡熷洜
鍦ㄦ帓闄や简纭浠舵晠闅/firmware鐗堟湰/BIOS绛夌瓑闂棰树箣澶栵纴 Linux姝绘満阃氩父鍙鑳界板埌濡备笅鍑犵嶆儏鍐
1锛 濡傛灉浣犵殑Linux姝绘満镄勬椂鍊欐带鍒跺彴涓婃湁涔变竷鍏绯熺殑瀛楃︺傛伃锽滀綘锛岃繖绉嶆儏鍐靛彨锅歰ops. 阃氩父鏄疞inux kernel璁や负镊宸卞彂鐢熶简寮傚父阃犳垚镄勚
鍙浠ラ氲繃oops娑堟伅镆ユ垒鍑洪敊镄勫湴鏂广
2锛 濡傛灉浣犵殑链哄櫒镀垫伙纴闾d箞闂棰橀夯鐑︿简銆傝繖绉嶆椂鍊欙纴阃氩父鏄疜ernel鍑虹幇浜嗘婚挛銆侹ernel涓崭细鐭ラ亾镊宸辨婚挛浜嗭纴镓浠ヤ笉浼氩湪灞忓箷涓婃樉绀轰换浣曞挌鍜氥
濡傛灉杩愭皵濂斤纴姝ゆ椂Kernel涔熻稿彲鑳借兘澶熷搷搴斾腑鏂銆备笉绠℃庢牱锛屼綘閮芥棤娉曡繘涓姝ユ搷浣滀简銆
3锛 涓ユ牸𨱒ヨ达纴杩欑涓夌嶆儏鍐典笉绠楁绘満锛岀幇璞″备笅锛氲緭鍏ュ懡浠ゅ洖杞︿箣钖庡懡浠や笉鑳借繑锲炰换浣旷粨鏋滐纴 浣嗘槸鎺у埗鍙板瑰洖杞﹀彲鑳芥湁鐩稿簲銆备絾鏄锻戒护镞犳硶缁撴潫锛屼篃涓崭细链夎緭鍑虹粨鏋溿
浣嗘槸鍙浠ユ崲鍒颁笅涓涓鎺у埗鍙帮纴 钥屼笖杩桦彲浠ョ户缁杈揿叆锻戒护锛屼絾鏄杈揿叆锻戒护涔嫔悗杩樻槸娌℃湁杈揿嚭銆傝繖绉嶆儏鍐典细链夊緢澶氩彲鑳姐傞氩父鏄搴旂敤绋嫔簭镄勭郴缁熻皟鐢ㄩ暱镞堕棿娌℃湁杩斿洖鎴栬呮槸婊¤冻涓崭简搴旂敤镄勮佹眰銆
浠ヤ笂涓夌嶆儏鍐碉纴system log镄勪綔鐢ㄩ兘涓嶅ぇ銆傞氩父镞ュ织閮戒笉浼氱邯褰曘傛墍浠ュ彧鑳戒娇鐢↘ernel镄凞ebug宸ュ叿銆
涓嶈繃Linus姣旇缉镫狅纴浜鸿碖ernel涓嶉渶瑕丏ebug宸ュ叿銆傛墍浠kernel.org涓镄勪唬镰佹槸娌℃湁debug宸ュ叿镄勚备笉杩囩洰鍓岖粷澶у氭暟鍙戣岀増镄刱ernel閮藉甫浜哾ebug宸ュ叿锛岃屼笖宸ュ叿閮戒笉涓镙枫
阃氩父杩涜宬ernel debug閮介渶瑕佸湪鍑虹幇鏁呴㱩镄勬椂鍊欓噰闆唙mcore. 灏辨槸鎶婃晠闅滃彂鐢熺殑镞秏emory mp鍑烘潵銆(杩樿板缑Windows 钃濆睆镄勬椂鍊欎细鍑虹幇1%-100%璺冲姩镄勪竴涓鏁板瓧鍜宑鐩榙ump.sys鏂囦欢锛 杩椤洖鐭ラ亾骞蹭粈涔堢殑浜嗗惂? ) 铹跺悗杩涜屽垎鏋愩备篃璁镐綘浼氭媴蹇佥inux姝绘満浜嗭纴杩樻庝箞mp memory鍟婏纴杩欎釜涓岖敤𨰾呭绩锛孠ernel杩樻槸鐣欎简濂藉嚑𨱒¤矾瀛愩傚叾涓涓涓鏄疦MI銆
闾d箞鍒板簳镐庝箞mp memory锻锛 杩欓噷鐢≧EDHAT涓轰緥锛孯HEL3,RHEL4涓閮戒娇鐢ㄤ简netmp浣滀负閲囬泦宸ュ叿锛孯HEL5浣跨敤kmp浣滀负閲囬泦宸ュ叿銆
閲囬泦瀹屾瘯灏卞彲浠ュ箆mcore杩涜屽垎鏋愶纴姝ラゅ氨涓岖粏璇翠简銆傚彲浠ュ弬钥冨备笅鏂囩珷:http://people.redhat.com/anderson/crash_whitepaper/
浣嗘槸瀵逛簬绠$悊锻樻潵璇达纴浠讳綍涓涓猟ebug宸ュ叿閮介渶瑕佷唬镰佸紑鍙戠殑缁忓巻镓嶈兘椤哄埄浣跨敤銆
链钖庤翠竴鍙ワ纴链杩戝湪鍧涗腑鐪嫔埌链変汉鐪嫔埌姝绘満灏卞线搴旂敤绋嫔簭涓婃鐤戙傝繖鏄寰埚ソ镄勮嚜鎴戞壒璇勭殑绮剧烇纴瑕佸ぇ锷涘彂镓銆
闾d箞锛岃剼链锛屽簲鐢ㄧ▼搴忎细涓崭细瀵艰嚧姝绘満锛 褰撶劧锛屼絾鏄闂棰樿缮鏄鍑哄湪Kernel涓娿傚氨姣斿傦纴搴旂敤绋嫔簭鍐欐枃浠讹纴绯荤粺鍙鑳戒细鎸傝捣鍦╧ernel涓镄勬枃浠剁郴缁熶唬镰佷笂銆