基于嵌入式Linux的中斷驅(qū)動(dòng)程序設(shè)計(jì)_第1頁(yè)
基于嵌入式Linux的中斷驅(qū)動(dòng)程序設(shè)計(jì)_第2頁(yè)
基于嵌入式Linux的中斷驅(qū)動(dòng)程序設(shè)計(jì)_第3頁(yè)
基于嵌入式Linux的中斷驅(qū)動(dòng)程序設(shè)計(jì)_第4頁(yè)
基于嵌入式Linux的中斷驅(qū)動(dòng)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、圖像編碼與軟件電子科技2009年第22卷第10期收稿日期:2009201215作者簡(jiǎn)介:常赟杰(1980-,男,碩士研究生,助教。研究方向:嵌入式系統(tǒng)。劉連浩(1959-,男,博士,教授。研究方向:信息安全與嵌入式系統(tǒng)。基于嵌入式L inux 的中斷驅(qū)動(dòng)程序設(shè)計(jì)常赟杰1,2,劉連浩1(11中南大學(xué)信息科學(xué)與工程學(xué)院,湖南長(zhǎng)沙410083;21湖南工學(xué)院計(jì)算機(jī)科學(xué)系,湖南衡陽(yáng)421002摘要首先闡述了嵌入式L inux 操作系統(tǒng)下,設(shè)備驅(qū)動(dòng)程序的實(shí)現(xiàn)原理和編寫(xiě)方法,然后說(shuō)明了中斷處理在設(shè)備驅(qū)動(dòng)程序中的應(yīng)用,并詳細(xì)論述了中斷方式下,編寫(xiě)設(shè)備驅(qū)動(dòng)程序的具體開(kāi)發(fā)流程,進(jìn)一步分析了編寫(xiě)中斷處理程序時(shí)所用

2、到一些數(shù)據(jù)結(jié)構(gòu)。應(yīng)用證明,在編寫(xiě)L inux 設(shè)備驅(qū)動(dòng)程序的時(shí)候,采用中斷方式的程序效率會(huì)更高。關(guān)鍵詞AR M;L inux;設(shè)備驅(qū)動(dòng);中斷中圖分類(lèi)號(hào)TP316文獻(xiàn)標(biāo)識(shí)碼A 文章編號(hào)1007-7820(200910-074-03D esi gn of I n terrupt D ev i ce D r i vers Ba sed onE m bedded L i n uxChang Yunjie1,2,L iu L ianhao2(11School of Infor mati on Science and Engineer,Central South University,Changsha 4

3、10083,China;21Depart m ent of Computer Science,Hunan I nstitute of Technol ogy,Hengyang 421002,China Abstract First,the p rincip le of i m p lementation and p r ogramm ing method of device drivers on embedded L inux operati on system is intr oduced .Then,the app lication of interrup t handling in de

4、vice drivers is p resen 2ted,with a detailed discussi on of the devel opment p r ocesses of device drivers under interrup t .Finally,s omei m portant data structures used in interrup t handling p r ogramm ing are further analyzed .Practical app lication in 2dicates that higher p r ogram efficiency i

5、s achieved with the use of interrup t in the L inux device driver p rogram 2m ing .Keywords ARM;L inux;devices drivers;interrup t隨著電子技術(shù)的飛速發(fā)展,嵌入式L inux 有著廣泛的適用硬件平臺(tái),高效穩(wěn)定的內(nèi)核代碼、豐富的應(yīng)用軟件、良好的網(wǎng)絡(luò)接口等特點(diǎn),已經(jīng)成為嵌入式系統(tǒng)領(lǐng)域中的研究熱點(diǎn)。在嵌入式系統(tǒng)中,對(duì)硬件的管理是通過(guò)內(nèi)核中的驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)的,因此在嵌入式系統(tǒng)開(kāi)發(fā)中,大量工作是對(duì)各種設(shè)備進(jìn)行驅(qū)動(dòng)程序的開(kāi)發(fā)。中斷管理是嵌入式操作系統(tǒng)的核心任務(wù)之一,設(shè)備驅(qū)動(dòng)程序中使

6、用中斷可以提高應(yīng)用程序的效率。L inux 為中斷處理提供了良好的接口,L inux 設(shè)備驅(qū)動(dòng)程序中有很多都是通過(guò)中斷方式來(lái)實(shí)現(xiàn)的。1中斷方式L inux 驅(qū)動(dòng)程序?qū)崿F(xiàn)方法111設(shè)備驅(qū)動(dòng)程序概述設(shè)備驅(qū)動(dòng)程序是為特定的硬件提供給用戶(hù)程序的一組標(biāo)準(zhǔn)化接口,它隱藏了設(shè)備的工作細(xì)節(jié)。L inux 系統(tǒng)中,硬件設(shè)備被抽象為一個(gè)設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣來(lái)對(duì)硬件設(shè)備進(jìn)行操作。(1設(shè)備驅(qū)動(dòng)程序的注冊(cè)和注銷(xiāo)。L inux 系統(tǒng)為每個(gè)設(shè)備分配了一個(gè)主設(shè)備號(hào)(Maj or 和次設(shè)備號(hào)(M inor ,主設(shè)備號(hào)標(biāo)識(shí)設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序,次設(shè)備號(hào)對(duì)應(yīng)具體設(shè)備的實(shí)例。通常在應(yīng)用中,主設(shè)備號(hào)都是采用動(dòng)態(tài)分配的

7、方式獲取,即以設(shè)備號(hào)“0”進(jìn)行申請(qǐng),然后由系統(tǒng)返回一個(gè)可用設(shè)備號(hào)作為主設(shè)備號(hào)。(2設(shè)備操作。在L inux 內(nèi)核中,結(jié)構(gòu)struct file_op reti ons 中定常赟杰,等:基于嵌入式L inux的中斷驅(qū)動(dòng)程序設(shè)計(jì)圖像編碼與軟件義了對(duì)設(shè)備的各種操作,例如打開(kāi)設(shè)備使用open (,關(guān)閉設(shè)備使用cl ose(,從設(shè)備讀取數(shù)據(jù)用read(,將數(shù)據(jù)寫(xiě)入設(shè)備用write(。編寫(xiě)驅(qū)動(dòng)程序,主要是實(shí)現(xiàn)struct file_op reti ons中的函數(shù)。(3模塊化設(shè)計(jì)。L inux內(nèi)核中采用了可加載的模塊化設(shè)計(jì)。驅(qū)動(dòng)采用模塊化編寫(xiě)以后,它可以在系統(tǒng)啟動(dòng)后的任何時(shí)刻把驅(qū)動(dòng)程序添加到內(nèi)核代碼中;當(dāng)不

8、需要這個(gè)模塊時(shí),可以將模塊從內(nèi)核中卸載和刪除。當(dāng)模塊被加載時(shí),程序從int_module(函數(shù)開(kāi)始執(zhí)行;卸載的時(shí)候,程序從exit_module(函數(shù)開(kāi)始執(zhí)行,釋放掉它占用的系統(tǒng)資源2。L inux提供兩個(gè)宏,module_int和module_exit來(lái)顯示的命名模塊的注冊(cè)和注銷(xiāo)函數(shù),即為Moudle_int(init_module;Moudle_exit(exit_module;112L inux中的中斷處理L inux在驅(qū)動(dòng)程序中應(yīng)用到中斷的時(shí)候,必須先把中斷處理程序注冊(cè)到系統(tǒng)中。當(dāng)有硬件中斷請(qǐng)求發(fā)生后,操作系統(tǒng)調(diào)用中斷處理程序,完成對(duì)設(shè)備的操作4。注冊(cè)中斷處理程序采用的函數(shù)是reque

9、st_iqr,其原型為int request_irq(unsigned int irq,Void(3handler(int irq,void dev_id, struct p t_ges3ges,Unsigned l ong irq_flags,const char3 devna me,void3dev_id函數(shù)調(diào)用成功時(shí),返回0;失敗時(shí)返回負(fù)值。其中的參數(shù)irq為要申請(qǐng)的硬件中斷號(hào);handle為中斷處理子程序,中斷產(chǎn)生時(shí)由系統(tǒng)來(lái)調(diào)用,調(diào)用參數(shù)iqr為中斷類(lèi)型號(hào),dev_id為申請(qǐng)時(shí)告訴系統(tǒng)的設(shè)備;標(biāo)識(shí)regs為中斷發(fā)生時(shí)寄存器的內(nèi)容; irq_flags決定中斷處理程序的特性,例如設(shè)置sa

10、_ interrup t就是個(gè)快中斷,不設(shè)置就是慢中斷; devna me指向設(shè)備名稱(chēng)的字符指針,記錄了哪個(gè)設(shè)備使用這個(gè)中斷號(hào);dev_id為申請(qǐng)中斷時(shí)間告訴系統(tǒng)的設(shè)備標(biāo)識(shí),由于中斷可以被共享,不同的中斷處理通過(guò)dev_id來(lái)區(qū)分。注銷(xiāo)中斷采用的函數(shù)是free_irq,其原型為Void free_irq(unsigned int irq,void3dev_id它的參數(shù)與request_iqr函數(shù)中參數(shù)意義完全一樣。113中斷處理函數(shù)的實(shí)現(xiàn)中斷處理程序的功能,就是將有關(guān)中斷接收的信息反饋給設(shè)備,并根據(jù)要服務(wù)中斷的不同含義進(jìn)行相應(yīng)的讀寫(xiě)。由于中斷處理程序是在中斷時(shí)間內(nèi)運(yùn)行的,它不能向用戶(hù)空間發(fā)送或

11、接收數(shù)據(jù),因?yàn)樗辉谌魏芜M(jìn)程的上下文中執(zhí)行。通常在中斷處理程序中用到以下幾個(gè)數(shù)據(jù)結(jié)構(gòu)3:(1等待隊(duì)列。當(dāng)應(yīng)用程序?qū)υO(shè)備進(jìn)行讀的時(shí)候,如果暫時(shí)還沒(méi)有數(shù)據(jù)可讀,就必須讓進(jìn)程睡眠來(lái)等待數(shù)據(jù)。如果中斷向進(jìn)程發(fā)出了信號(hào),指示它們等待的事件已經(jīng)發(fā)生,那么就可以喚醒在設(shè)備上睡眠的那些進(jìn)程。進(jìn)程的睡眠和喚醒就是通過(guò)一個(gè)叫做等待隊(duì)列的數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)的。在L inux中,等待隊(duì)列由一個(gè)wait_queue_head_t類(lèi)型的數(shù)據(jù)結(jié)構(gòu)來(lái)管理。interrup tible_sleep_on(函數(shù)用來(lái)讓進(jìn)程睡眠, wake_up_interrup tible(函數(shù)用來(lái)喚醒睡眠的進(jìn)程。(2環(huán)形緩沖區(qū)。在驅(qū)動(dòng)程序使用循環(huán)緩

12、沖區(qū)是處理并發(fā)訪問(wèn)問(wèn)題的一種有效方法。當(dāng)設(shè)備的一些操作來(lái)不及處理的時(shí)候,就先存放到緩沖區(qū)中。緩沖區(qū)共有兩個(gè)指針進(jìn)行尋址:head和tail。Head指向數(shù)據(jù)的寫(xiě)入位置,tail指向數(shù)據(jù)的讀出位置。(3系統(tǒng)時(shí)鐘。在編寫(xiě)中斷處理程序的時(shí)候,必須要保證程序執(zhí)行的時(shí)間盡可能短。系統(tǒng)執(zhí)行時(shí)間由系統(tǒng)時(shí)鐘來(lái)控制。系統(tǒng)時(shí)鐘是通過(guò)ti m e_list結(jié)構(gòu)可以實(shí)現(xiàn)的5。使用時(shí)鐘時(shí),首先調(diào)用init_ti m e_list進(jìn)行初始化。ti m e_list結(jié)構(gòu)中參數(shù)exp ires表示時(shí)鐘的周期,其單位采用L inux全局變量jiffies。系統(tǒng)內(nèi)核還提供了Hz來(lái)定義每秒種最小時(shí)間間隔的數(shù)目。系統(tǒng)計(jì)時(shí)到一定時(shí)間就

13、調(diào)用functi on函數(shù),并把此子程序從定時(shí)隊(duì)列里刪除,如果想要每隔一定時(shí)間都執(zhí)行一次的話(huà),就必須在functi on函數(shù)里再一次調(diào)用addt_i m er函數(shù)。2中斷方式驅(qū)動(dòng)程序設(shè)計(jì)211按鍵控制原理硬件采用s3c2410處理器I/O口的GPF3, GPF4,GPF5,GPF6這4個(gè)端口對(duì)應(yīng)4個(gè)按鍵。當(dāng)按鍵按下時(shí),分別產(chǎn)生eint3,eint4,eint5,eint64個(gè)外部低電平的中斷請(qǐng)求。s3c2410根據(jù)中斷來(lái)判圖像編碼與軟件常赟杰,等:基于嵌入式L inux的中斷驅(qū)動(dòng)程序設(shè)計(jì)斷按鍵被按下。212按鍵驅(qū)動(dòng)程序的實(shí)現(xiàn)(1首先設(shè)計(jì)一個(gè)按鍵的設(shè)備結(jié)構(gòu)體。該結(jié)構(gòu)體中包含一個(gè)緩沖區(qū),當(dāng)多次按鍵

14、無(wú)法被及時(shí)處理的時(shí)候,使用該緩沖區(qū)緩存按鍵。此外,還包含按鍵狀態(tài)標(biāo)志和一個(gè)等待隊(duì)列。為了實(shí)現(xiàn)軟件延時(shí),定時(shí)器也是必要的,但不包含在設(shè)備結(jié)構(gòu)體中;(2接著定義一個(gè)按鍵結(jié)構(gòu)體,來(lái)保存4個(gè)按鍵的所對(duì)應(yīng)的中斷號(hào),GP I O引腳及鍵值;(3按鍵驅(qū)動(dòng)的模塊加載和卸載函數(shù);(4按鍵設(shè)備中斷處理函數(shù)。在鍵被按下后,將發(fā)生中斷,在中斷處理程序中,延時(shí)20m s,去除抖動(dòng);(5按鍵設(shè)備的打開(kāi)、釋放函數(shù)。按鍵設(shè)備驅(qū)動(dòng)的打開(kāi)和釋放函數(shù)比較簡(jiǎn)單,主要是設(shè)置keydev1head、keydev1tail和按鍵事件函數(shù)指針keyEvent的值;(6按鍵設(shè)備的讀取函數(shù)。按鍵設(shè)備驅(qū)動(dòng)的讀函數(shù)是驅(qū)動(dòng)程序和用戶(hù)的接口,在讀取/d

15、ev/key2 board/ra w文件的時(shí)候被讀取。當(dāng)keydev1head!= keydev1tail時(shí),表示緩沖區(qū)有數(shù)據(jù),它從緩沖區(qū)的尾部讀取一個(gè)按鍵事件,直接返回給用戶(hù)。當(dāng)緩沖區(qū)為空時(shí),根據(jù)用戶(hù)空間是阻塞讀還是非阻塞讀,分為如下兩種情況來(lái)處理:1若采用非阻塞讀,則因?yàn)闆](méi)有按鍵緩存,直接返回-Eagain;2若采用阻塞讀,則在keydev1wq等待隊(duì)列上睡眠,直到有按鍵被記錄入緩沖區(qū)后再被喚醒。3結(jié)束語(yǔ)L inux216內(nèi)核中,添加了可搶占(Pree mp tible的處理中斷方式,使中斷處理的實(shí)時(shí)性更加強(qiáng)大。在編寫(xiě)L inux設(shè)備驅(qū)動(dòng)程序的時(shí)候,采用中斷方式的程序效率會(huì)更高。參考文獻(xiàn)1

16、劉淼.嵌入式系統(tǒng)接口設(shè)計(jì)與L inux驅(qū)動(dòng)程序設(shè)計(jì)M.北京:北京航空航天大學(xué)出版社,2006.2田澤.AR M9嵌入式開(kāi)發(fā)與實(shí)踐M.北京:北京航空航天大學(xué)出版社,2006.3Rubini A,Corbet J.L inux設(shè)備驅(qū)動(dòng)程序M.魏永明,駱勇,姜均,譯.北京:中國(guó)電力出版社,2002.4董志國(guó),李式巨.嵌入式L inux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)J.計(jì)算機(jī)工程與設(shè)計(jì),2006,27(20:3737-3740.5李世勇,肖竟華.基于L inux驅(qū)動(dòng)的編寫(xiě)技術(shù)J.電腦與信息技術(shù),2006,14(3:43-45.(上接第21頁(yè)6結(jié)束語(yǔ)文中給出了該新型智能化變換器式功率表6的設(shè)計(jì),綜述了該儀表系統(tǒng)的工作原理和設(shè)計(jì)思想,重點(diǎn)介紹了功率檢測(cè)電路的原理和設(shè)計(jì)。本儀表經(jīng)實(shí)際使用證明,具有體積小、成本低、精度高、可靠性好等優(yōu)點(diǎn),有較好的市場(chǎng)前景。此外,還可以針對(duì)不同的用戶(hù),進(jìn)一步修改軟硬件系統(tǒng),增加功

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論