久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

linux中斷總結(jié)

時(shí)間:2019-05-12 11:46:28下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《linux中斷總結(jié)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《linux中斷總結(jié)》。

第一篇:linux中斷總結(jié)

1.Linux中斷的注冊(cè)與釋放:

, , 實(shí)現(xiàn)中斷注冊(cè)接口: int request_irq(unsigned int irq,irqreturn_t(*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *dev_name, void *dev_id);void free_irq(unsigned int irq, void *dev_id);函數(shù)參數(shù)說(shuō)明

unsigned int irq:所要注冊(cè)的中斷號(hào)

irqreturn_t(*handler)(int, void *, struct pt_regs *):中斷服務(wù)程序的入口地址。unsigned long flags:與中斷管理有關(guān)的位掩碼選項(xiàng),有三組值: 1.SA_INTERRUPT :快速中斷處理程序,當(dāng)使用它的是后處理器上所有的其他中斷都被禁用。2.SA_SHIRQ :該中斷是在設(shè)備之間可共享的

3.SA_SAMPLE_RANDOM :這個(gè)位表示產(chǎn)生的中斷能夠有貢獻(xiàn)給 /dev/random 和 /dev/urandom 使用的加密池.(此處不理解)const char *dev_name:設(shè)備描述,表示那一個(gè)設(shè)備在使用這個(gè)中斷。void *dev_id:用作共享中斷線的指針.它是一個(gè)獨(dú)特的標(biāo)識(shí), 用在當(dāng)釋放中斷線時(shí)以及可能還被驅(qū)動(dòng)用來(lái)指向它自己的私有數(shù)據(jù)區(qū)(來(lái)標(biāo)識(shí)哪個(gè)設(shè)備在中斷)。這個(gè)參數(shù)在真正的驅(qū)動(dòng)程序中一般是指向設(shè)備數(shù)據(jù)結(jié)構(gòu)的指針.在調(diào)用中斷處理程序的時(shí)候它就會(huì)傳遞給中斷處理程序的void *dev_id。(這是我的理解)如果中斷沒(méi)有被共享, dev_id 可以設(shè)置為 NULL, 但是使用這個(gè)項(xiàng)指向設(shè)備結(jié)構(gòu)不管如何是個(gè)好主意.我們將在“實(shí)現(xiàn)一個(gè)處理”一節(jié)中看到 dev_id 的一個(gè)實(shí)際應(yīng)用。

中斷號(hào)的查看可以使用下面的命令:“cat /proc/interrupts”。

/proc/stat 記錄了幾個(gè)關(guān)于系統(tǒng)活動(dòng)的低級(jí)統(tǒng)計(jì)量, 包括(但是不限于)自系統(tǒng)啟動(dòng)以來(lái)收到的中斷數(shù).stat 的每一行以一個(gè)文本字串開(kāi)始, 是該行的關(guān)鍵詞;intr 標(biāo)志是我們?cè)谡业?第一個(gè)數(shù)是所有中斷的總數(shù), 而其他每一個(gè)代表一個(gè)單個(gè) IRQ 線, 從中斷 0 開(kāi)始.所有的計(jì)數(shù)跨系統(tǒng)中所有處理器而匯總的.這個(gè)快照顯示, 中斷號(hào) 4 已使用 1 次, 盡管當(dāng)前沒(méi)有安裝處理.如果你在測(cè)試的驅(qū)動(dòng)請(qǐng)求并釋放中斷在每個(gè)打開(kāi)和關(guān)閉循環(huán), 你可能發(fā)現(xiàn) /proc/stat 比 /proc/interrupts 更加有用.以下是一個(gè)統(tǒng)計(jì)中斷時(shí)間間隔的中斷服務(wù)程序。

irqreturn_t short_interrupt(int irq, void *dev_id, struct pt_regs *regs){ static long mytime=0;static int i=0;struct net_device *dev=(struct net_device *)dev_id;if(i==0){ mytime=jiffies; }else if(i<20){ mytime =jiffies-mytime;printk(“Request on IRQ %d time %dn”,irq , mytime);mytime=jiffies; printk(“Interrupt on %s-----%d n”,dev->name,dev->irq);} i;return IRQ_HANDLED;} 這個(gè)函數(shù)實(shí)現(xiàn)的只是對(duì)兩次發(fā)生中斷的時(shí)間間隔的統(tǒng)計(jì),時(shí)間單位是毫秒

前言

在前面分析了中斷的基本原理后,就可以寫一個(gè)內(nèi)核中斷程序來(lái)體驗(yàn)以下,也可以借此程序繼續(xù)深入來(lái)了解內(nèi)核中斷的執(zhí)行過(guò)程 一.內(nèi)核中斷程序 :

我們還是來(lái)看一看成程序:

在看程序之前,要熟悉如何進(jìn)行模塊編程,和了解module_pararm()的用法。如果不熟悉的話請(qǐng)大家看,module_param()的學(xué)習(xí)和Linux內(nèi)核模塊編程,在此不作解釋。1.程序interrupt.c /* 2 *file name :interrupt.c 3 *atuthor : john 4 */ 5 #include 6 #include 7 #include 8 #include 9 10 MODULE_LICENSE(“GPL”);11 static int irq;12 char *interface;13 static irqreturn_t myirq_handler(int irq,void *dev);14 15 static int __init myirq_init(void)16 { 17 printk(“the module is working!n”);18 printk(“the irq is ready for working!n”);19 if(request_irq(irq,myirq_handler,IRQF_SHARED,interface,&irq)){ 20

printk(KERN_ERR “%s interrrupt can't register %d IRQ n”,interface,irq);21 return-EIO;22 } 23 printk(“%s request %d IRQn”,interface,irq);24 return 0;25 } 26 static irqreturn_t myirq_handler(int irq,void *dev)27 { 28 printk(“%d IRQ is workingn”,irq);29 return IRQ_NONE;30 } 31 static void __exit myirq_exit(void)32 { 33 printk(“the module is leaving!n”);34 printk(“the irq is bye bye!n”);35 free_irq(irq,&irq);36 printk(“%s interrupt free %d IRQn”,interface,irq);37 38 } 39 module_init(myirq_init);0 module_exit(myirq_exit);41 module_param(interface,charp,0644);42 module_param(irq,int,0644);43 1 /* 2 *file name :interrupt.c 3 *atuthor : john 4 */ 5 #include 6 #include 7 #include 8 #include 9 10 MODULE_LICENSE(“GPL”);11 static int irq;12 char *interface;13 static irqreturn_t myirq_handler(int irq,void *dev);14 15 static int __init myirq_init(void)16 { 17 printk(“the module is working!n”);18 printk(“the irq is ready for working!n”);19 if(request_irq(irq,myirq_handler,IRQF_SHARED,interface,&irq)){ 20

printk(KERN_ERR “%s interrrupt can't register %d n”,interface,irq);21 return-EIO;22 } 23 printk(“%s request %d IRQn”,interface,irq);24 return 0;25 } 26 static irqreturn_t myirq_handler(int irq,void *dev)

IRQ 27 { 28 printk(“%d IRQ is workingn”,irq);29 return IRQ_NONE;30 } 31 static void __exit myirq_exit(void)32 { 33 printk(“the module is leaving!n”);34 printk(“the irq is bye bye!n”);35 free_irq(irq,&irq);36 printk(“%s interrupt free %d IRQn”,interface,irq);37 38 } 39 module_init(myirq_init);40 module_exit(myirq_exit);41 module_param(interface,charp,0644);42 module_param(irq,int,0644);43 2.Makefile的編寫 1 obj-m:=tiger.o 2 3 CURRENT_PATH:=$(shell pwd)4 VERSION_NUM:=$(shell uname-r)5 LINUX_PATH:=/usr/src/linux-headers-$(VERSION_NUM)6 7 8 all : 9 make-C $(LINUX_PATH)M=$(CURRENT_PATH)modules 10 clean: 11 make-C $(LINUX_PATH)M=$(CURRENT_PATH)clean 1 obj-m:=tiger.o 2 3 CURRENT_PATH:=$(shell pwd)4 VERSION_NUM:=$(shell uname-r)5 LINUX_PATH:=/usr/src/linux-headers-$(VERSION_NUM)6 7 8 all : 9 make-C $(LINUX_PATH)M=$(CURRENT_PATH)modules 10 clean: 11 make-C $(LINUX_PATH)M=$(CURRENT_PATH)clean(程序的調(diào)試,加載和運(yùn)行,在此不進(jìn)行說(shuō)明)3.首先我們來(lái)分析下內(nèi)核加載模塊

在內(nèi)核加載模塊中最重要的的action就是注冊(cè)中斷處理程序。很明顯,這一動(dòng)作是通過(guò)request_irq()函數(shù)來(lái)完成的。int request_irq(unsigned int irq, irq_handler_t handler,unsigned long flags, const char *devname, void *dev_id)A.先來(lái)分析形參:

第一個(gè)參數(shù)irq: 表示要分配的中斷號(hào)。對(duì)于一些設(shè)備(系統(tǒng)時(shí)鐘或鍵盤)它的值是預(yù)先固定的,而對(duì)于大多數(shù)設(shè)備來(lái)說(shuō),這個(gè)值是動(dòng)態(tài)確定的。第二個(gè)參數(shù) handler: 表示要掛入到中斷請(qǐng)求對(duì)列中的中斷服務(wù)例程,這個(gè)中斷服務(wù)函數(shù)的原型是static irqreturn_t handler(int , void *);中斷處理程序的前綴為static,因?yàn)樗鼜膩?lái)不會(huì)被別的文件中的代碼直接調(diào)用。第三個(gè)參數(shù)flags:為標(biāo)志位??梢匀RQF_DISABLED、IRQF_SHARED和IRQF_SAMPLE_RANDOM之一。在本實(shí)例程序中取 IRQF_SHARED,該標(biāo)志表示多個(gè)中斷處理程序共享irq中斷線。一般某個(gè)中斷線上的中斷服務(wù)程序在執(zhí)行時(shí)會(huì)屏蔽請(qǐng)求該線的其他中斷,如果取 IRQF_DISABLED標(biāo)志,則在執(zhí)行該中斷服務(wù)程序時(shí)會(huì)屏蔽所有其他的中斷。取IRQF_SAMPLE_RANDOM則表示設(shè)備可以被看做是事件隨見(jiàn)的發(fā)生源。以下是官方解釋: /* * These flags used only by the kernel as part of the * irq handling routines.* * IRQF_DISABLEDirq is used to feed the random generator * IRQF_SHAREDset by callers when they expect sharing mismatches to occur * IRQF_TIMERInterrupt is per cpu * IRQF_NOBALANCINGInterrupt is used for polling(only the interrupt that is * registered first in an shared interrupt is considered for * performance reasons)*/ #define IRQF_DISABLED 0x00000020 #define IRQF_SAMPLE_RANDOM 0x00000040 #define IRQF_SHARED 0x00000080 #define IRQF_PROBE_SHARED 0x00000100 #define IRQF_TIMER 0x00000200 #define IRQF_PERCPU 0x00000400 #define IRQF_NOBALANCING 0x00000800 #define IRQF_IRQPOLL 0x00001000 /* * These flags used only by the kernel as part of the * irq handling routines.* * IRQF_DISABLEDirq is used to feed the random generator * IRQF_SHAREDset by callers when they expect sharing mismatches to occur * IRQF_TIMERInterrupt is per cpu * IRQF_NOBALANCINGInterrupt is used for polling(only the interrupt that is * registered first in an shared interrupt is considered for * performance reasons)*/ #define IRQF_DISABLED 0x00000020 #define IRQF_SAMPLE_RANDOM 0x00000040 #define IRQF_SHARED 0x00000080 #define IRQF_PROBE_SHARED 0x00000100 #define IRQF_TIMER 0x00000200 #define IRQF_PERCPU 0x00000400 #define IRQF_NOBALANCING 0x00000800 #define IRQF_IRQPOLL 0x00001000 第四個(gè)參數(shù)devname:是請(qǐng)求中斷的設(shè)備的名稱。當(dāng)你加載模塊成功后可以在/proc/interrupts中查看到具體設(shè)備的名稱,與此同時(shí)也可以看到這個(gè)設(shè)備對(duì)應(yīng)的中斷號(hào)以及請(qǐng)求次數(shù)。

第五個(gè)參數(shù)dev_id:為一個(gè)指針型變量。注意該參數(shù)為void型,也就是說(shuō)通過(guò)強(qiáng)制轉(zhuǎn)換可以轉(zhuǎn)換為任意類型。dev_id主要用于共享中斷線,對(duì)每個(gè)注冊(cè)的中斷處理程序來(lái)說(shuō),(Dev_id must be globally unique.Normally the address of the device data structure is used as the cookie.)dev_id參數(shù)必須唯一(指向任一設(shè)備結(jié)構(gòu)的指針就可以滿足此要求,選擇設(shè)備結(jié)構(gòu)因?yàn)樗俏ㄒ坏?,而且中斷處理程序可能?huì)用到它)如果無(wú)需共享中斷線,則將該參數(shù)賦值為NULL。B:函數(shù)返回值

requset_irq()函數(shù)成功執(zhí)行后返回0。如果返回非0值,就表示錯(cuò)誤發(fā)生。此時(shí),指定的中斷處理程序不會(huì)被注冊(cè)。這里面有幾個(gè)疑問(wèn): 為什么要注冊(cè)中斷函數(shù)

共享中斷線的概念,參數(shù)dev_id的作用是什么 看一個(gè)圖進(jìn)行說(shuō)明:

1>由圖可知:有16個(gè)中斷線。要使用中斷線,就要進(jìn)行中斷線的 申請(qǐng),也常把申請(qǐng)一條中斷線稱為申請(qǐng)一個(gè)中斷號(hào),這就 與request_irq()函數(shù)中的第一個(gè)形參 irq 有關(guān)系。2>Linux有256個(gè)中斷向量,而外部中中斷向量只有16個(gè)(32~47)。由于硬件上的限制,很多外部設(shè)備不得不共享中斷線。

(例如:一些PC機(jī)所用的網(wǎng)卡和圖形卡可以把它們分配到一條中斷線上)讓每個(gè)中斷源獨(dú)自占用一條中斷線是不實(shí)現(xiàn)的。3>共享中斷線的話雖然解決了中斷資源的問(wèn)題,但是,此時(shí)引出了另一個(gè)問(wèn)題(任何事物都有其兩面性),此時(shí)僅僅用中斷描述符并不能提供中斷產(chǎn)生的所有信息。為了解決這個(gè)問(wèn)題,內(nèi)核必須對(duì)中斷線給出近一步的描述,所以在Linux設(shè)計(jì)中,為每個(gè)中斷請(qǐng)求IRQ設(shè)置了一個(gè)專用隊(duì)列(中斷請(qǐng)求隊(duì)列)。

4>中斷服例程序和中斷處理程序的區(qū)別: a.中斷服務(wù)例程(interrupt service routine):

Linux中,15條中斷線對(duì)應(yīng)15個(gè)中斷處理程序,依次命名是IRQ0x00_interrupt(),IRQ0x01_interrupt().....IRQ0X1f_interrupt().中斷處理程序相當(dāng)于某個(gè)中斷向量的總處理程序。

eg:IRQ0X05_interupt()是5號(hào)中斷(向量為37)的總處理程序。b.中斷服務(wù)例程是針對(duì)一個(gè)具體設(shè)備的中斷。5>.注冊(cè)中斷服務(wù)例程: 在IDT表完成初始化時(shí),每個(gè)中斷服務(wù)隊(duì)列還為空。此時(shí)即使打開(kāi)中斷且某個(gè)外設(shè)的中斷真的發(fā)生了,也得不到實(shí)際的服務(wù)。因?yàn)镃PU雖然通過(guò)中斷門進(jìn)入了某個(gè)中斷向量的總處理程序。但是,具體的中斷服務(wù)例程還沒(méi)有掛入中斷請(qǐng)求隊(duì)列。所以,在設(shè)備驅(qū)動(dòng)程序的初始化階段,必須通過(guò)request_irq()函數(shù)將響應(yīng)的中斷服務(wù)例程掛入中斷請(qǐng)求隊(duì)列,也就是進(jìn)行注冊(cè)。

6>分析一下中斷服務(wù)程序,即request_irq()函數(shù)中第二個(gè)參數(shù)所對(duì)應(yīng)的函數(shù) static irqreturn_t myirq_handler(int irq,void *dev_id){ printk(“ISR is Workingn”);return IRQ_HANDLED;} 中斷服務(wù)例程的形參: a.int irq :中斷號(hào)。

b.void *dev_id :與request_irq()的參數(shù)dev_id一致,可以根據(jù)這個(gè)設(shè)備id號(hào)得到相應(yīng)設(shè)備的數(shù)據(jù)結(jié)構(gòu),進(jìn)而得到相應(yīng)設(shè)備的信息和相關(guān)數(shù)據(jù)。

c.返回值:中斷程序的返回值是一個(gè)特殊類型 rqreturn_t。但是中斷程序的返回值卻只有兩個(gè)值IRQ_NONE和IRQ_HANDLED。

IRQ_NONE:中斷程序接收到中斷信號(hào)后發(fā)現(xiàn)這并不是注冊(cè)時(shí)指定的中斷原發(fā)出的中斷信號(hào)。IRQ_HANDLED:接收到了準(zhǔn)確的中斷信號(hào),并且作了相應(yīng)正確的處理。一般 中斷處理程序要做什么service,主要取決于產(chǎn)生的設(shè)備和該設(shè)備為什么要發(fā)送中斷。John哥說(shuō)明:

1.當(dāng)一個(gè)給定的中斷處理程序正在執(zhí)行時(shí),這條中斷線上的其它中斷都會(huì)被屏蔽。but,所有其他中斷線上的中斷都是打開(kāi)的。因此這些不同中斷線上的其他中斷都能被處理。

2.request_irq()函數(shù)可能會(huì)睡眠,所以,不能在中斷上下文或其它不允許阻塞的代碼中調(diào)用該函數(shù)。

4.在深入分析request_irq()函數(shù)之前,先來(lái)看幾個(gè)重要的數(shù)據(jù)結(jié)構(gòu)。

A.irqaction的數(shù)據(jù)結(jié)構(gòu)(用irqaction結(jié)構(gòu)體來(lái)描述一個(gè)具體的中斷服務(wù)例程)113struct irqaction { 114 irq_handler_t handler;115 unsigned long flags;116 const char *name;117 void *dev_id;118 struct irqaction *next;119 int irq;120 struct proc_dir_entry *dir;121 irq_handler_t thread_fn;122 struct task_struct *thread;123 unsigned long thread_flags;124};125 113struct irqaction { 114 irq_handler_t handler;115 unsigned long flags;116 const char *name;117 void *dev_id;118 struct irqaction *next;119 int irq;120 struct proc_dir_entry *dir;121 irq_handler_t thread_fn;122 struct task_struct *thread;123 unsigned long thread_flags;124};125

1>handler:指向具體的一個(gè)中斷服務(wù)例程。

2>flags:表示中斷標(biāo)志位,對(duì)應(yīng)于request_irq()函數(shù)中所傳遞的第三個(gè)參數(shù),可取IRQF_DISABLED、IRQF_SAMPLE_RANDOM和IRQF_SHARED其中之一。

3>name:請(qǐng)求中斷的設(shè)備名稱,對(duì)應(yīng)request_irq()函數(shù)中所傳遞的第四個(gè)參數(shù)

4>dev_id: 共享中斷時(shí)有用。對(duì)應(yīng)于request_irq()函數(shù)中所傳遞的第五個(gè)參數(shù),可取任意值,但必須唯一能夠代表發(fā)出中斷請(qǐng)求的設(shè)備,通常取描述該設(shè)備的結(jié)構(gòu)體。5>strct irqaction *next:指向irqaction描述符的下一個(gè)元素。用一條鏈表將共享同一條中斷線上的中斷服務(wù)例程鏈接起來(lái)。

6>irq:所申請(qǐng)的中斷號(hào)

7>dir:指向proc/irq/NN/name entry

8>thread_fn:指向具體的一個(gè)線程化的中斷。

9>thread:指向線程中斷的指針。

10>thread_flags:線程中斷的標(biāo)志。

B.irq_desc的數(shù)據(jù)結(jié)構(gòu)體 每個(gè)中斷向量都有它自己的irq_desc 描述符。即用irq_desc來(lái)描述中斷向量。所有的這些中斷描述符組織在一起就形成了irq_desc irq_desc[NR_IRQS]數(shù)組

175struct irq_desc { 176 unsigned int irq;177 struct timer_rand_state *timer_rand_state;178 unsigned int *kstat_irqs;179#ifdef CONFIG_INTR_REMAP 180 struct irq_2_iommu *irq_2_iommu;181#endif 182 irq_flow_handler_t handle_irq;183 struct irq_chip *chip;184 struct msi_desc *msi_desc;185 void *handler_data;186 void *chip_data;187 struct irqaction *action;/* IRQ action list */ 188 unsigned int status;/* IRQ status */ 189 190 unsigned int depth;/* nested irq disables */ 191 unsigned int wake_depth;/* nested wake enables */ 192 unsigned int irq_count;/* For detecting broken IRQs */ 193 unsigned long last_unhandled;/* Aging timer for unhandled count */ 194 unsigned int irqs_unhandled;195 raw_spinlock_t lock;196#ifdef CONFIG_SMP 197 cpumask_var_t affinity;198 const struct cpumask *affinity_hint;199 unsigned int node;200#ifdef CONFIG_GENERIC_PENDING_IRQ 201 cpumask_var_t pending_mask;202#endif 203#endif 204 atomic_t threads_active;205 wait_queue_head_t wait_for_threads;206#ifdef CONFIG_PROC_FS 207 struct proc_dir_entry *dir;208#endif 209 const char *name;210} ____cacheline_internodealigned_in_smp;211 212extern void arch_init_copy_chip_data(struct irq_desc *old_desc, 213 struct irq_desc *desc, int node);214extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc);215 216#ifndef CONFIG_SPARSE_IRQ 217extern struct irq_desc irq_desc[NR_IRQS];175struct irq_desc { 176 unsigned int irq;177 struct timer_rand_state *timer_rand_state;178 unsigned int *kstat_irqs;179#ifdef CONFIG_INTR_REMAP 180 struct irq_2_iommu *irq_2_iommu;181#endif 182 irq_flow_handler_t handle_irq;183 struct irq_chip *chip;184 struct msi_desc *msi_desc;185 void *handler_data;186 void *chip_data;187 struct irqaction *action;/* IRQ action list */ 188 unsigned int status;/* IRQ status */ 189 190 unsigned int depth;/* nested irq disables */ 191 unsigned int wake_depth;/* nested wake enables */ 192 unsigned int irq_count;/* For detecting broken IRQs */ 193 unsigned long last_unhandled;/* Aging timer for unhandled count */ 194 unsigned int irqs_unhandled;195 raw_spinlock_t lock;196#ifdef CONFIG_SMP 197 cpumask_var_t affinity;198 const struct cpumask *affinity_hint;199 unsigned int node;200#ifdef CONFIG_GENERIC_PENDING_IRQ 201 cpumask_var_t pending_mask;202#endif 203#endif 204 atomic_t threads_active;205 wait_queue_head_t wait_for_threads;206#ifdef CONFIG_PROC_FS 207 struct proc_dir_entry *dir;208#endif 209 const char *name;210} ____cacheline_internodealigned_in_smp;211 212extern void arch_init_copy_chip_data(struct irq_desc *old_desc, 213 struct irq_desc *desc, int node);214extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc);215 216#ifndef CONFIG_SPARSE_IRQ 217extern struct irq_desc irq_desc[NR_IRQS];

1>irq:表示這個(gè)描述符所對(duì)應(yīng)的中斷號(hào)。

2>handle_irq:指向該IRQ線的公共服務(wù)程序(即該IRQ所對(duì)應(yīng)的中斷處理程序。

3>chip:它是一個(gè)struct irq_chip類型的指針,是中斷控制器的描述符。在2.6以前的版本中它是hw_irq_controller。

4>handler_data:是handler_irq的參數(shù)。5>chip_data:是指向irq_chip的指針。6>atcion:一個(gè)struct irqaction類型的指針,它指向一個(gè)單鏈表。該鏈表是由該中斷線上所有中斷服務(wù)例程鏈接起來(lái)的。7>status:表示中斷線當(dāng)前的狀態(tài)。

8>depth:中斷線被激活時(shí),值為0;當(dāng)值為正數(shù)時(shí),表示被禁止的次數(shù)。9>irq_count:表示該中斷線上發(fā)生中斷的次數(shù)

10>irqs_unhandled:該IRQ線上未處理中斷發(fā)生的次數(shù) 11>name:申請(qǐng)中斷設(shè)備的名字。

C.struct irq_chip結(jié)構(gòu)體:

struct irq_chip是一個(gè)中斷控制器的描述符。Linux支持N種可編程中斷控制器PIC(中斷控制器),通常不同的體系結(jié)構(gòu)就有一套自己的中斷處理方式。內(nèi)核為了統(tǒng)一的處理中斷,提供了底層的中斷處理抽象接口,對(duì)于每個(gè)平臺(tái)都需要實(shí)現(xiàn)底層的接口函數(shù)。這樣對(duì)于上層的中斷通用處理程序就無(wú)需任何改動(dòng)。

struct irq_chip的具體代碼如下:

111struct irq_chip { 112 const char *name;113 unsigned int(*startup)(unsigned int irq);114 void(*shutdown)(unsigned int irq);115 void(*enable)(unsigned int irq);116 void(*disable)(unsigned int irq);117 118 void(*ack)(unsigned int irq);119 void(*mask)(unsigned int irq);120 void(*mask_ack)(unsigned int irq);121 void(*unmask)(unsigned int irq);122 void(*eoi)(unsigned int irq);123 124 void(*end)(unsigned int irq);125 int(*set_affinity)(unsigned int irq, 126 const struct cpumask *dest);127 int(*retrigger)(unsigned int irq);128 int(*set_type)(unsigned int irq, unsigned int flow_type);129 int(*set_wake)(unsigned int irq, unsigned int on);130 131 void(*bus_lock)(unsigned int irq);132 void(*bus_sync_unlock)(unsigned int irq);133 134 /* Currently used only by UML, might disappear one day.*/ 135#ifdef CONFIG_IRQ_RELEASE_METHOD 136 void(*release)(unsigned int irq, void *dev_id);137#endif 138 /* 139 * For compatibility,->typename is copied into->name.140 * Will disappear.141 */ 142 const char *typename;143};144 111struct irq_chip { 112 const char *name;113 unsigned int(*startup)(unsigned int irq);114 void(*shutdown)(unsigned int irq);115 void(*enable)(unsigned int irq);116 void(*disable)(unsigned int irq);117 118 void(*ack)(unsigned int irq);119 void(*mask)(unsigned int irq);120 void(*mask_ack)(unsigned int irq);121 void(*unmask)(unsigned int irq);122 void(*eoi)(unsigned int irq);123 124 void(*end)(unsigned int irq);125 int(*set_affinity)(unsigned int irq, 126 const struct cpumask *dest);127 int(*retrigger)(unsigned int irq);128

int

(*set_type)(unsigned int irq, unsigned int flow_type);129 int(*set_wake)(unsigned int irq, unsigned int on);130 131 void(*bus_lock)(unsigned int irq);132 void(*bus_sync_unlock)(unsigned int irq);133 134 /* Currently used only by UML, might disappear one day.*/ 135#ifdef CONFIG_IRQ_RELEASE_METHOD 136 void(*release)(unsigned int irq, void *dev_id);137#endif 138 /* 139 * For compatibility,->typename is copied into->name.140 * Will disappear.141 */ 142 const char *typename;143};144

name:中斷控制器的名字; Startup:?jiǎn)?dòng)中斷線; Shutdown:關(guān)閉中斷線; Enable:允許中斷; Disable:禁止中斷;

分析了struct irq_desc,struct irq_chip和irqaction的數(shù)據(jù)結(jié)構(gòu)之后我們來(lái)看看他們之間的關(guān)系。

現(xiàn)在深入分析request_irq()內(nèi)部是如何實(shí)現(xiàn)的。

135request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, 136 const char *name, void *dev)137{ 138 return request_threaded_irq(irq, handler, NULL, flags, name, dev);139} 140 135request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, 136 const char *name, void *dev)137{ 138 return request_threaded_irq(irq, handler, NULL, flags, name, dev);139} 140

可以看到request_irq()函數(shù)里面有封裝了request_threaded_irq(irq, handler, NULL, flags, name, dev)函數(shù)。

先看一下官方的解釋

1006/** 1007 * request_threaded_irqallocate an interrupt line 1008 * @irq: Interrupt line to allocate 1009 * @handler: Function to be called when the IRQ occurs.1010 * Primary handler for threaded interrupts 1011 * If NULL and thread_fn!= NULL the default 1012 * primary handler is installed 1013 * @thread_fn: Function called from the irq handler thread 1014 * If NULL, no irq thread is created 1015 * @irqflags: Interrupt type flags 1016 * @devname: An ascii name for the claiming device 1017 * @dev_id: A cookie passed back to the handler function 1018 * 1019 * This call allocates interrupt resources and enables the 1020 * interrupt line and IRQ handling.From the point this 1021 * call is made your handler function may be invoked.Since 1022 * your handler function must clear any interrupt the board 1023 * raises, you must take care both to initialise your hardware 1024 * and to set up the interrupt handler in the right order.1025 * 1026 * If you want to set up a threaded irq handler for your device 1027 * then you need to supply @handler and @thread_fn.@handler ist 1028 * still called in hard interrupt context and has to check 1029 * whether the interrupt originates from the device.If yes it 1030 * needs to disable the interrupt on the device and return 1031 * IRQ_WAKE_THREAD which will wake up the handler thread and run 1032 * @thread_fn.This split handler design is necessary to support 1033 * shared interrupts.1034 * 1035 * Dev_id must be globally unique.Normally the address of the 1036 * device data structure is used as the cookie.Since the handler 1037 * receives this value it makes sense to use it.1038 * 1039 * If your interrupt is shared you must pass a non NULL dev_id 1040 * as this is required when freeing the interrupt.1041 * 1042 * Flags: 1043 * 1044 * IRQF_SHARED Interrupt is shared 1045 * IRQF_SAMPLE_RANDOM The interrupt can be used for entropy 1046 * IRQF_TRIGGER_* Specify active edge(s)or level 1047 * 1048 */

5.首先分析request_threaded_irq()函數(shù)中的各個(gè)形參 1>:irq:表示申請(qǐng)的中斷號(hào)。2>:handler:表示中斷服務(wù)例程

3.> thread_fn:中斷線程化,此處傳遞的是NULL。NULL表示沒(méi)有中斷線程化。此參數(shù)是最新版本中才出現(xiàn)的。為什么要提出中斷線程化? 在 Linux 中,中斷具有最高的優(yōu)先級(jí)。不論在任何時(shí)刻,只要產(chǎn)生中斷事件,內(nèi)核將立即執(zhí)行相應(yīng)的中斷 處理程序,等到所有掛起的中斷和軟中斷處理完畢后才能執(zhí)行正常的任務(wù),因此有可能造成實(shí)時(shí)任務(wù)得不

到及時(shí)的處理。中斷線程化之后,中斷將作為內(nèi)核線程運(yùn)行而且被賦予不同的實(shí)時(shí)優(yōu)先級(jí),實(shí)時(shí)任務(wù)可以

有比中斷線程更高的優(yōu)先級(jí)。這樣,具有最高優(yōu)先級(jí)的實(shí)時(shí)任務(wù)就能得到優(yōu)先處理,即使在嚴(yán)重負(fù)載下仍

有實(shí)時(shí)性保證。but,并不是所有的中斷都可以被線程化,比如時(shí)鐘中斷,主要用來(lái)維護(hù)系統(tǒng)時(shí)間以及定時(shí)器 等,其中定時(shí)器是操作系統(tǒng)的脈搏,一旦被線程化,就有可能被掛起,這樣后果將不堪設(shè)想,所以不應(yīng)當(dāng) 被線程化。

4>.irqflags:表示中斷標(biāo)志位。

5>.devname:表示請(qǐng)求中斷的設(shè)備的名稱。

6>.dev_id: 對(duì)應(yīng)于request_irq()函數(shù)中所傳遞的第五個(gè)參數(shù),可取任意值,但必須唯一能夠代表發(fā)出中斷請(qǐng)求的設(shè)備,通常取描述該設(shè)備的結(jié)構(gòu)體。共享中斷時(shí)所用。現(xiàn)在繼續(xù)迭代深入 request_threaded_irq()內(nèi)部是如何實(shí)現(xiàn)的。

1049int request_threaded_irq(unsigned int irq, irq_handler_t handler, 1050 irq_handler_t thread_fn, unsigned long irqflags, 1051 const char *devname, void *dev_id)1052{ 1053 struct irqaction *action;1054 struct irq_desc *desc;1055 int retval;1056 1057 /* 1058 * Sanity-check: shared interrupts must pass in a real dev-ID, 1059 * otherwise we'll have trouble later trying to figure out 1060 * which interrupt is which(messes up the interrupt freeing 1061 * logic etc).1062 */ 1063 if((irqflags & IRQF_SHARED)&&!dev_id)1064 return-EINVAL;1065 1066 desc = irq_to_desc(irq);1067 if(!desc)1068 return-EINVAL;1069 1070 if(desc->status & IRQ_NOREQUEST)1071 return-EINVAL;1072 1073 if(!handler){ 1074 if(!thread_fn)1075 return-EINVAL;1076 handler = irq_default_primary_handler;1077 } 1078 1079 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);1080 if(!action)1081 return-ENOMEM;1082 1083 action->handler = handler;1084 action->thread_fn = thread_fn;1085 action->flags = irqflags;1086 action->name = devname;1087 action->dev_id = dev_id;1088 1089 chip_bus_lock(irq, desc);1090 retval = __setup_irq(irq, desc, action);1091 chip_bus_sync_unlock(irq, desc);1092 1093 if(retval)1094 kfree(action);1095 1096#ifdef CONFIG_DEBUG_SHIRQ 1097 if(!retval &&(irqflags & IRQF_SHARED)){ 1098 /* 1099 * It's a shared IRQ--the driver ought to be prepared for it 1100 * to happen immediately, so let's make sure....1101 * We disable the irq to make sure that a 'real' IRQ doesn't 1102 * run in parallel with our fake.1103 */ 1104 unsigned long flags;1105 1106 disable_irq(irq);1107 local_irq_save(flags);1108 1109 handler(irq, dev_id);1110 1111 local_irq_restore(flags);1112 enable_irq(irq);1113 } 1114#endif 1115 return retval;1116} 1049int request_threaded_irq(unsigned int irq, irq_handler_t handler, 1050 irq_handler_t thread_fn, unsigned long irqflags, 1051 const char *devname, void *dev_id)1052{ 1053 struct irqaction *action;1054 struct irq_desc *desc;1055 int retval;1056 1057 /* 1058 * Sanity-check: shared interrupts must pass in a real dev-ID, 1059 * otherwise we'll have trouble later trying to figure out 1060 * which interrupt is which(messes up the interrupt freeing 1061 * logic etc).1062 */ 1063 if((irqflags & IRQF_SHARED)&&!dev_id)1064 return-EINVAL;1065 1066 desc = irq_to_desc(irq);1067 if(!desc)1068 return-EINVAL;1069 1070 if(desc->status & IRQ_NOREQUEST)1071 return-EINVAL;1072 1073 if(!handler){ 1074 if(!thread_fn)1075 return-EINVAL;1076 handler = irq_default_primary_handler;1077 } 1078 1079 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);1080 if(!action)1081 return-ENOMEM;1082 1083 action->handler = handler;1084 action->thread_fn = thread_fn;1085 action->flags = irqflags;1086 action->name = devname;1087 action->dev_id = dev_id;1088 1089 chip_bus_lock(irq, desc);1090 retval = __setup_irq(irq, desc, action);1091 chip_bus_sync_unlock(irq, desc);1092 1093 if(retval)1094 kfree(action);1095 1096#ifdef CONFIG_DEBUG_SHIRQ 1097 if(!retval &&(irqflags & IRQF_SHARED)){ 1098 /* 1099 * It's a shared IRQ--the driver ought to be prepared for it 1100 * to happen immediately, so let's make sure....1101 * We disable the irq to make sure that a 'real' IRQ doesn't 1102 * run in parallel with our fake.1103 */ 1104 unsigned long flags;1105 1106 disable_irq(irq);1107 local_irq_save(flags);1108 1109 handler(irq, dev_id);1110 1111 local_irq_restore(flags);1112 enable_irq(irq);1113 } 1114#endif 1115 return retval;1116}

程序的第一行和第二行分別定義了:

(1)struct irqaction *action;

(2)2struct irq_desc *desc;

兩個(gè)指針action和desc,它們分別指向了結(jié)構(gòu)體irqaction和 irq_desc。

(3)if((irqflags & IRQF_SHARED)&&!dev_id)return-EINVAL;

作用是:判斷中斷標(biāo)志位,如果是共享中斷的話就必須要有一個(gè)唯一的dev_id,否則返回一個(gè)錯(cuò)誤。

(4)desc = irq_to_desc(irq);

irq_to_desc(irq):根據(jù)中斷號(hào)irq在 irq_desc[NR_IRQS]數(shù)組中 返回一個(gè)具體的irq_desc。即根據(jù)irq找到它的中斷處理程序。

(5)if(!desc)

return-EINVAL;

當(dāng)返回一個(gè)空值時(shí)返回一個(gè)錯(cuò)誤。說(shuō)明申請(qǐng)中斷號(hào)失敗。

(6)if(desc->status & IRQ_NOREQUEST)return-EINVAL;

判斷中斷線的狀態(tài),若為IRQ_NOREQUEST時(shí)(IRQ_NOREQUEST表示 IRQ 不能被申請(qǐng))

(7)if(!handler){ if(!thread_fn)return-EINVAL;handler = irq_default_primary_handler;}

判斷中斷服務(wù)例程是否為空,如果handler為空,則判斷線程中斷服務(wù)例程,若線程中斷服務(wù)例程也為空,則返回一個(gè)錯(cuò)誤值。否則中斷服務(wù)例程指向: rq_default_primary_handler。

(8)

1079 action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);1080 if(!action)1081 return-ENOMEM;1082 1083 action->handler = handler;1084 action->thread_fn = thread_fn;1085 action->flags = irqflags;1086 action->name = devname;1087 action->dev_id = dev_id;

從1079~1087:根據(jù)requst_irq()函數(shù)中傳遞的參數(shù)生成一個(gè)irqaction.1097 if(!retval &&(irqflags & IRQF_SHARED)){ 1098 /* 1099 * It's a shared IRQ--the driver ought to be prepared for it 1100 * to happen immediately, so let's make sure....1101 * We disable the irq to make sure that a 'real' IRQ doesn't 1102 * run in parallel with our fake.1103 */ 1104 unsigned long flags;1105 1106 disable_irq(irq);1107 local_irq_save(flags);1108 1109 handler(irq, dev_id);1110 1111 local_irq_restore(flags);1112 enable_irq(irq);1113 }

1097~1113:如果為共享中斷的話,在執(zhí)行中斷服務(wù)例程之前,要先把這條中斷線上的中斷屏蔽,讓后在執(zhí)行,執(zhí)行完之后打開(kāi)中斷。

6.有注冊(cè)中斷服務(wù)函數(shù),那必然有相應(yīng)的釋放中斷函數(shù)。

可以調(diào)用void free_irq(unsigned int irq, void *dev_id)來(lái)釋放我們申請(qǐng)的中斷線。

函數(shù)形參:

1>unsigned int riq:表示申請(qǐng)的中斷號(hào)與request_irq()函數(shù)中的第一個(gè)形參對(duì)應(yīng)。

2>void *dev_id:與request_irq()函數(shù)中的最后一個(gè)形參含義和用法相同,在此不再說(shuō)明。

函數(shù)功能:

如果指定的中斷線不是共享的,那么,該函數(shù)刪除處理程序的同時(shí)將禁用這條中斷線。如果中斷線是共享的,則僅刪除dev_id所對(duì)應(yīng)的處理程序,而這條中斷線本省只有在刪除了最后一個(gè)處理程序時(shí)才會(huì)被禁止。

切記:This function must not be called from interrupt context

freee_irq()函數(shù)不能在中斷上下文中被調(diào)用。

3>深入分析下free_irq()函數(shù)內(nèi)部是如何實(shí)現(xiàn)的

993void free_irq(unsigned int irq, void *dev_id)994{ 995 struct irq_desc *desc = irq_to_desc(irq);996 997 if(!desc)998 return;999 1000 chip_bus_lock(irq, desc);1001 kfree(__free_irq(irq, dev_id));1002 chip_bus_sync_unlock(irq, desc);1003} 993void free_irq(unsigned int irq, void *dev_id)994{ 995 struct irq_desc *desc = irq_to_desc(irq);996 997 if(!desc)998 return;999 1000 chip_bus_lock(irq, desc);1001 kfree(__free_irq(irq, dev_id));1002 chip_bus_sync_unlock(irq, desc);1003} 可以看到free_irq()函數(shù)了封裝了_free_irq(irq,dev_id)函數(shù)。free_irq()調(diào)用_free_irq()把每一個(gè)具體的中斷服務(wù)例程()釋放。

本篇文章來(lái)源于 Linux公社網(wǎng)站(原文鏈接:

第二篇:嵌入式linu學(xué)習(xí)心得

嵌入式Linux學(xué)習(xí)心得

1、Linux命令

ls:查看目錄-l以列表方式查看;ls –l 與ll的功能一樣 pwd: 查看當(dāng)前的目錄

cd:改變當(dāng)前操作目錄cd /直接跳到根目錄 cd..回到上一級(jí)目錄 cat: 打印顯示當(dāng)前文件的內(nèi)容信息

mkdir:創(chuàng)建目錄

fdisk: 查看硬盤分區(qū)信息,-l以列表方式查看

->代表是鏈接文件,類似window下的快捷方式。

cp: 復(fù)制命令,例子cp 文件名 /home/dir/

mv: 移動(dòng)或改名,如mv sonf.confsonf.txt(改名)移動(dòng):mv sonf.conf / rm:刪除命令,如rm –f test.c;如刪除目錄rm –fr d

man:查看某個(gè)命令的幫助,man 命令

2、各系統(tǒng)目錄的功能

drw—r—w--:d代表是目錄,drw代表當(dāng)前用戶的權(quán)限,r代表組用戶的權(quán)限,w代表其它用戶的權(quán)限。x代表有執(zhí)行權(quán)限。

/boot/gruff.conf: 啟動(dòng)引導(dǎo)程序

/dev:brw—rw--:b代表是塊設(shè)備。Linux設(shè)備有三種,塊設(shè)備(b開(kāi)頭)、字符設(shè)備(c開(kāi)頭)、網(wǎng)絡(luò)設(shè)備。had代表第一個(gè)硬盤,hdb代表第二個(gè)硬盤。Hdb2代表第二塊硬盤的第二個(gè)分區(qū)。3,67代表主設(shè)備為3,從設(shè)備為67./etc:存放的是系統(tǒng)的配置文件。Inittab文件存放不同啟動(dòng)方式下必須啟動(dòng)的進(jìn)程。Inittab文件中有6個(gè)啟動(dòng)level,wait中對(duì)應(yīng)著6個(gè)level的目錄,respawn代表當(dāng)一個(gè)進(jìn)程被意外終止了,但會(huì)自動(dòng)啟動(dòng)的進(jìn)程,如守護(hù)進(jìn)程。rc.d目錄中存放了一個(gè)rc.sysinit文件,里面存放系統(tǒng)初始化配置信息。/etc還有一個(gè)vsftpd里面存放tcp、ftp的配置。

/home : 用戶目錄,存放用戶的文件,/lib:存放庫(kù)文件,后綴為so的文件代表動(dòng)態(tài)鏈接庫(kù)。

/lost+found:系統(tǒng)意外終止,存放一些可以找回的文件。

/mnt:掛載外部設(shè)備,如掛載光驅(qū):mount –t /dev/cdrom/mnt/cdrom,如

果在雙系統(tǒng)中,要查看windows中D盤的文件,首先應(yīng)該將D盤的文件映射過(guò)來(lái),mount –t /dev/hda2/mnt/windows/d

/opt:用戶安裝的應(yīng)用程序

/proc:是系統(tǒng)運(yùn)行的映射,比較重要。里面的文件數(shù)字代表進(jìn)程號(hào)。每個(gè)進(jìn)程號(hào)目錄下包含進(jìn)程的基本信息。還有其他信息,如cpuinfo等,內(nèi)核支持的文件系統(tǒng)filesystem等。系統(tǒng)支持的中斷interrupts,iomen代表內(nèi)存分配情況。ioport存放IO端口號(hào)。還有分區(qū)信息,modole信息,狀態(tài)信息,版本信息

對(duì)于Linux的設(shè)備驅(qū)動(dòng)程序,有兩種加載模式,一種是直接加載進(jìn)linux內(nèi)核,一種是以模塊的方式加載到內(nèi)核。

/sbin: 系統(tǒng)管理的一些工具。如poweroff關(guān)機(jī)工具。

/usr: 安裝系統(tǒng)時(shí)很多文件放在此目錄下面,包含一些更新等,include包含的頭文件,lib 是Linux的庫(kù)文件,src包含Linux2.4的內(nèi)核源碼

/var:存放是臨時(shí)變量

3、

第三篇:親子關(guān)系中斷[范文]

“親子關(guān)系中斷”與療愈

“親子關(guān)系中斷”。通常來(lái)說(shuō),0-7歲的孩子,尤其是0-3歲之間的孩子,最好和父母在一起,受到父母的照顧。如果要和父母分開(kāi)的話,分開(kāi)的時(shí)間也不要太長(zhǎng)。因?yàn)?-3歲的孩子,神經(jīng)系統(tǒng)還沒(méi)有足夠的承受力,如果跟父母分離很長(zhǎng)時(shí)間,會(huì)產(chǎn)生極度的恐懼,對(duì)孩子來(lái)講是一個(gè)很大的情緒創(chuàng)傷。孩子長(zhǎng)大之后,他/她內(nèi)心的安全感,他/她與人連結(jié)的能力都會(huì)受到影響。

“鐵臉實(shí)驗(yàn)”,把一群一兩歲的孩子放在一個(gè)游戲室里,讓這些孩子去玩,然后讓媽媽全部出去。孩子玩了一會(huì),發(fā)現(xiàn)媽媽不見(jiàn)了,就開(kāi)始哭,開(kāi)始叫。實(shí)驗(yàn)人員規(guī)定,這種情況下,不管孩子怎么哭怎么叫,媽媽都不要理他/她,媽媽都要拒絕他/她。這樣幾輪下來(lái)之后,突然有一刻,所有的孩子都不再哭了,都安靜下來(lái)了。這時(shí)候媽媽再上來(lái)逗孩子,孩子的表情都成了“鐵臉”,沒(méi)表情了,麻木了,不理媽媽了。

實(shí)驗(yàn)到了這里,無(wú)法在進(jìn)行下去,因?yàn)閶寢寕兺对V得很厲害。由此也可以看到,當(dāng)小孩子被媽媽拒絕,被媽媽忽略,被媽媽不理會(huì),離開(kāi)媽媽的時(shí)候,遭到的創(chuàng)傷。

當(dāng)孩子比較小的時(shí)候,你可以上班,可以出差,但是請(qǐng)盡量多的與孩子待在一起。你每次回家,最好多擁抱他/她一會(huì)。孩子在父母的懷抱里,感覺(jué)是最安全的。父母,尤其是媽媽,既是創(chuàng)傷的開(kāi)始,也是療愈的開(kāi)始。

在孩子0-3歲這段時(shí)間,誰(shuí)在照顧他/她,他/她就可能把這個(gè)人當(dāng)成自己的爸爸媽媽。所以養(yǎng)育孩子,最好父母自己帶;第二給自己的父母帶,也就是爺爺奶奶、姥姥姥爺帶,再其次是給自己的兄弟姐妹帶,比如叔叔姑姑;最次是給陌生人帶,比如讓阿姨帶,讓保姆帶,而且父母也不經(jīng)常去看孩子,這對(duì)孩子會(huì)是相當(dāng)大的心理創(chuàng)傷。

問(wèn):如果創(chuàng)傷已經(jīng)發(fā)生,怎樣去彌補(bǔ)?

答:剛才說(shuō)了,有一種方式叫“強(qiáng)抱”,緊緊地去擁抱孩子,不管孩子愿不愿意,你都去擁抱他/她。例如七八歲的孩子,調(diào)皮搗蛋,父母去抱他/她,他/她往往會(huì)把父母推開(kāi)。但是你耐心一點(diǎn),多抱一會(huì)兒,比如一個(gè)小時(shí),你會(huì)發(fā)現(xiàn)孩子會(huì)軟化下來(lái),孩子其實(shí)很需要你。

問(wèn):如果早年有親子關(guān)系的創(chuàng)傷,父母已經(jīng)去世了,該怎么辦?

答:有個(gè)方法,找個(gè)老婆回來(lái),先當(dāng)她是媽,然后再把她當(dāng)成伴侶,也有療愈效果。

第四篇:廠用電中斷熱工總結(jié)

廠用電中斷熱工總結(jié)

2014年4月22日變電站#1母線接地導(dǎo)致事故停機(jī),全廠廠用電丟失,導(dǎo)致某些設(shè)備在點(diǎn)爐過(guò)程中出現(xiàn)一些問(wèn)題,現(xiàn)將點(diǎn)爐檢修過(guò)程中出現(xiàn)的問(wèn)題以及處理方法做以下總結(jié):

1、廠用電丟失會(huì)導(dǎo)致熱控電源柜及繼電器柜斷電,在廠用

電正常之檢查熱控電源柜及熱控繼電器柜供電電壓是否恢復(fù)正常,有無(wú)斷路器或空開(kāi)跳閘現(xiàn)象。

2、檢查火焰電視冷卻風(fēng)壓力是不是正常,需不需要退出視

情況而定。

3、現(xiàn)場(chǎng)檢修過(guò)程中發(fā)現(xiàn)羅托克電動(dòng)門顯示屏上顯示電量

低的部分電動(dòng)門出現(xiàn)閥位丟失現(xiàn)象,需要在送電后重新設(shè)定閥位。

4、在點(diǎn)爐過(guò)程中需要我們強(qiáng)制或者恢復(fù)一些信號(hào),我們一

定要在強(qiáng)制信號(hào)切除記錄登記本上登記并在值長(zhǎng)簽字以及唐凱的同意下強(qiáng)制或者恢復(fù)信號(hào)。

5、主控LED屏在斷電后組態(tài)工程數(shù)據(jù)丟失,導(dǎo)致LED屏

在送電后無(wú)顯示,需要我們?cè)谌粘9ぷ髦凶鰯?shù)據(jù)備份。

6、脫硫電除塵在斷電后高、低壓側(cè)組態(tài)畫面無(wú)顯示,需要

在送電后重新啟動(dòng)組態(tài)畫面,如無(wú)法啟動(dòng)需強(qiáng)制關(guān)機(jī)啟動(dòng)。

第五篇:場(chǎng)用電中斷應(yīng)急演練總結(jié)

場(chǎng)用電中斷應(yīng)急演練總結(jié)

一、演練成果

(一)全場(chǎng)員工高度重視,認(rèn)真組織開(kāi)展

全場(chǎng)員工對(duì)本次事故應(yīng)急演練,從演練策劃、前期準(zhǔn)備、組織實(shí)施到模擬演練,都認(rèn)真參與、親臨實(shí)戰(zhàn),尤其是剛開(kāi)始通知過(guò)程較為真實(shí)。

(二)演練目的明確,預(yù)案策劃周密

從風(fēng)場(chǎng)實(shí)際出發(fā),確定場(chǎng)用電中斷事故的應(yīng)急演練。

演練檢驗(yàn):

1、應(yīng)急人員對(duì)場(chǎng)用電中斷應(yīng)急預(yù)案的熟悉程度。

2、調(diào)度系統(tǒng)對(duì)接聽(tīng)電話、記錄等的規(guī)范、時(shí)效;

3、風(fēng)場(chǎng)負(fù)責(zé)人及相關(guān)人員對(duì)現(xiàn)場(chǎng)的應(yīng)急處置能力;

4、應(yīng)急物資、材料的準(zhǔn)備情況。

通過(guò)本次演練,對(duì)風(fēng)場(chǎng)備用電源、供電系統(tǒng)的可靠程度進(jìn)行了論證,并認(rèn)識(shí)到了事故應(yīng)急設(shè)備設(shè)施的實(shí)際能力。制定出具有實(shí)效性的應(yīng)急處理方案,對(duì)廠用電中斷應(yīng)急預(yù)案進(jìn)行完善和補(bǔ)充。提高全場(chǎng)在突發(fā)事故發(fā)生時(shí),做到人心不慌亂、統(tǒng)一指揮、分級(jí)負(fù)責(zé)、有序進(jìn)行、安全撤離,實(shí)現(xiàn)重大事故傷亡降至最低點(diǎn)。

這次演練貫徹實(shí)施了統(tǒng)一領(lǐng)導(dǎo)、綜合協(xié)調(diào)、分級(jí)處理的應(yīng)急處理原則,人員齊全、內(nèi)容豐富,讓參演人員得到了真實(shí)的體驗(yàn),豐富了應(yīng)急知識(shí),對(duì)促進(jìn)安全應(yīng)急管理工作具有重要意義。

二、演練存在的不足

(一)現(xiàn)場(chǎng)演練的匯報(bào)程序亂,沒(méi)有達(dá)到實(shí)戰(zhàn)的要求。

(二)在應(yīng)急人員對(duì)場(chǎng)用電中斷應(yīng)急救援預(yù)案的熟悉程度方面:

1、部分應(yīng)急人員對(duì)應(yīng)急救援預(yù)案還不熟悉,演練時(shí)應(yīng)用得不太熟悉;

2、責(zé)任分工還不太明細(xì)。

(三)在調(diào)度系統(tǒng)對(duì)接聽(tīng)電話、記錄等規(guī)范、時(shí)效方面:

1、調(diào)度在啟動(dòng)演練程序出現(xiàn)錯(cuò)誤。

2、所有人員在對(duì)待演練只是走走過(guò)程。

3、記錄不規(guī)范,沒(méi)有完整的演練情況記錄下來(lái):

4、接聽(tīng)電話也有個(gè)別記錄錯(cuò)誤;

5、現(xiàn)場(chǎng)應(yīng)急人員對(duì)匯報(bào)的內(nèi)容不規(guī)范。

(四)本次演練未能對(duì)安全工器具進(jìn)行全面的檢驗(yàn)。

(五)本次演練也反應(yīng)出我場(chǎng)對(duì)場(chǎng)用電中斷應(yīng)急演練方面的工作做得還很不完善,在組織協(xié)調(diào)、演練程序存在較大差距,在突發(fā)事故面前,不能夠按照調(diào)度指揮、分級(jí)管理、快速反應(yīng)、通力協(xié)作。

(六)風(fēng)場(chǎng)檢修人員對(duì)站內(nèi)系統(tǒng)不清楚,對(duì)場(chǎng)用變切換程序模糊,對(duì)開(kāi)關(guān)名稱不能對(duì)應(yīng)。

三、以后需做好的工作:

(一)要進(jìn)一步健全組織指揮體系,理順各崗位職責(zé),加強(qiáng)統(tǒng)籌領(lǐng)導(dǎo)。

完善應(yīng)急預(yù)案,提高應(yīng)急處置能力。通過(guò)本次演練發(fā)現(xiàn)部分員工對(duì)應(yīng)急預(yù)案相關(guān)內(nèi)容不熟悉,在演練中緊張、表達(dá)不連貫,在以后需加強(qiáng)對(duì)應(yīng)急預(yù)案的培訓(xùn)、學(xué)習(xí),多搞實(shí)戰(zhàn)演練,提高員工的應(yīng)變能力。

加強(qiáng)系統(tǒng)圖培訓(xùn)。風(fēng)場(chǎng)部分新入場(chǎng)員工,對(duì)場(chǎng)內(nèi)一次系統(tǒng)圖不夠熟悉,對(duì)站用變相關(guān)開(kāi)關(guān)不熟悉,對(duì)基本的倒閘操作程序不熟悉,以后要加強(qiáng)基本知識(shí)的培訓(xùn)。增強(qiáng)事故應(yīng)急處理能力。

加強(qiáng)運(yùn)行人員事故時(shí)調(diào)度通話、記錄能力。在本次演練中發(fā)現(xiàn)運(yùn)行人員在向調(diào)度匯報(bào)時(shí)緊張,事故說(shuō)不清楚,思路不清晰、不規(guī)范,需加強(qiáng)培訓(xùn)。值班員對(duì)事故記錄需加強(qiáng)培訓(xùn),杜絕事故時(shí)無(wú)記錄。

下載linux中斷總結(jié)word格式文檔
下載linux中斷總結(jié).doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    中華文明未曾中斷

    中華文化未曾中斷的原因探析 世界四大文明古國(guó)----巴比倫、埃及、印度和中國(guó),各自都有悠久的歷史和文化。但是,古埃及文化、巴比倫文化、印度的哈拉巴文化、古希臘文化毀滅殆......

    廠用電中斷演練總結(jié)報(bào)告

    高配倒閘演練總結(jié) 一、演練成果 (一)參加員工高度重視,認(rèn)真組織開(kāi)展 參加員工對(duì)本次事故應(yīng)急演練,都認(rèn)真參與、親臨實(shí)戰(zhàn),尤其是剛開(kāi)始通知過(guò)程較為真實(shí)。 (二)演練目的明確,預(yù)案......

    51單片機(jī)中斷學(xué)習(xí)

    51單片機(jī)中斷學(xué)習(xí) 一、中斷的概念 CPU在處理某一事件A時(shí),發(fā)生了另一事件B請(qǐng)求CPU迅速去處理(中斷發(fā)生);CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù)); 待CPU將事件B處......

    消防系統(tǒng)中斷申請(qǐng)書(精選5篇)

    消防系統(tǒng)中斷申請(qǐng)書 Fire Protection Impairment Application FormLocation地點(diǎn): Site Impairment Coordinator消防系統(tǒng)中斷負(fù)責(zé)人: The Following Impairment此項(xiàng)消防系統(tǒng)中......

    營(yíng)業(yè)中斷保險(xiǎn)所需材料

    機(jī)損險(xiǎn)項(xiàng)下?tīng)I(yíng)業(yè)中斷保險(xiǎn)所需材料 上海東大保險(xiǎn)經(jīng)紀(jì)有限責(zé)任公司: 關(guān)于河北建投集團(tuán)的營(yíng)業(yè)中斷保險(xiǎn)案件,請(qǐng)盡快提供以下材料。以便盡快處理相關(guān)賠案。 1. 索賠申請(qǐng)書 2. 報(bào)損......

    淺論訴訟時(shí)效中斷制度及其意義

    淺論訴訟時(shí)效中斷制度及其意義 淺論訴訟時(shí)效中斷制度 一、訴訟時(shí)效的概念及意義 訴訟時(shí)效是權(quán)利人在法定期間內(nèi)不行使權(quán)利即喪失請(qǐng)求法院依法保護(hù)其民事權(quán)利的法律制度。訴......

    2014年通信中斷取費(fèi)標(biāo)準(zhǔn)

    通信光纜阻斷費(fèi)用計(jì)算參考 2017-03-27 原來(lái) 長(zhǎng)途光纜傳輸 通信光纜阻斷是指通信光纜在受外力作用下造成了損傷或斷裂,并影響了通信信息的正常傳送的事項(xiàng)。 通信光纜阻斷......

    單片機(jī)外部中斷實(shí)驗(yàn)報(bào)告[5篇材料]

    實(shí)驗(yàn)三 外部中斷實(shí)驗(yàn)報(bào)告 班級(jí):學(xué)號(hào):姓名:教師:一、實(shí)驗(yàn)?zāi)康?1、掌握單片機(jī)外部中斷的原理及過(guò)程。2、掌握單片機(jī)外部中斷程序的設(shè)計(jì)方法。3、掌握單片機(jī)外部中斷時(shí)中斷方式的選......

主站蜘蛛池模板: 高清无码免费视频| 一出一进一爽一粗一大视频| 依依成人精品视频在线观看| 人人综合亚洲无线码另类| 小罗莉极品一线天在线| 蜜臀av无码精品人妻色欲| 亚洲中文字幕无码久久2020| 日韩a无v码在线播放| 孕妇特级毛片ww无码内射| 久久99精品久久久久久齐齐| 天堂а在线中文在线新版| 亚洲一区二区三区在线观看精品中文| 北条麻妃在线观看| 色欲一区二区三区精品a片| 韩国三级丰满少妇高潮| 亚洲av无码国产精品色软件| 国产亚洲aⅴ在线电影| 成·人免费午夜视频香蕉| 精品国产乱码久久久久久影片| 亚洲精品美女久久久久久久| 欧美国产一区二区三区激情无套| 午夜精品久久久久久久久久久久| 日韩一欧美内射在线观看| 伊人久久大香线蕉综合色狠狠| 成人免费视频视频在线观看 免费| 国产人妻无码一区二区三区18| 亚洲女同性同志熟女| 伊人久久大香线蕉av一区| 亚洲午夜精品a片久久www慈禧| 中国丰满人妻videoshd| 人妻丰满熟妇av无码区hd| 精品久久人人妻人人做精品| 日本亚洲欧美色视频在线播放| 伊人久久综合狼伊人久久| 五月天精品视频在线观看| 欧美日韩国产综合草草| 国产成人无码免费视频麻豆| 粗大的内捧猛烈进出在线视频| 国产a√精品区二区三区四区| 亚洲国产精品久久久久婷婷老年| 久久亚洲国产精品亚洲老地址|