




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、圖像編碼與軟件電子科技2009年第22卷第10期收稿日期:2009201215作者簡介:常赟杰(1980-,男,碩士研究生,助教。研究方向:嵌入式系統(tǒng)。劉連浩(1959-,男,博士,教授。研究方向:信息安全與嵌入式系統(tǒng)。基于嵌入式L inux 的中斷驅(qū)動(dòng)程序設(shè)計(jì)常赟杰1,2,劉連浩1(11中南大學(xué)信息科學(xué)與工程學(xué)院,湖南長沙410083;21湖南工學(xué)院計(jì)算機(jī)科學(xué)系,湖南衡陽421002摘要首先闡述了嵌入式L inux 操作系統(tǒng)下,設(shè)備驅(qū)動(dòng)程序的實(shí)現(xiàn)原理和編寫方法,然后說明了中斷處理在設(shè)備驅(qū)動(dòng)程序中的應(yīng)用,并詳細(xì)論述了中斷方式下,編寫設(shè)備驅(qū)動(dòng)程序的具體開發(fā)流程,進(jìn)一步分析了編寫中斷處理程序時(shí)所用
2、到一些數(shù)據(jù)結(jié)構(gòu)。應(yīng)用證明,在編寫L inux 設(shè)備驅(qū)動(dòng)程序的時(shí)候,采用中斷方式的程序效率會(huì)更高。關(guān)鍵詞AR M;L inux;設(shè)備驅(qū)動(dòng);中斷中圖分類號TP316文獻(xiàn)標(biāo)識碼A 文章編號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 有著廣泛的適用硬件平臺,高效穩(wěn)定的內(nèi)核代碼、豐富的應(yīng)用軟件、良好的網(wǎng)絡(luò)接口等特點(diǎn),已經(jīng)成為嵌入式系統(tǒng)領(lǐng)域中的研究熱點(diǎn)。在嵌入式系統(tǒng)中,對硬件的管理是通過內(nèi)核中的驅(qū)動(dòng)程序來實(shí)現(xiàn)的,因此在嵌入式系統(tǒng)開發(fā)中,大量工作是對各種設(shè)備進(jìn)行驅(qū)動(dòng)程序的開發(fā)。中斷管理是嵌入式操作系統(tǒng)的核心任務(wù)之一,設(shè)備驅(qū)動(dòng)程序中使
6、用中斷可以提高應(yīng)用程序的效率。L inux 為中斷處理提供了良好的接口,L inux 設(shè)備驅(qū)動(dòng)程序中有很多都是通過中斷方式來實(shí)現(xiàn)的。1中斷方式L inux 驅(qū)動(dòng)程序?qū)崿F(xiàn)方法111設(shè)備驅(qū)動(dòng)程序概述設(shè)備驅(qū)動(dòng)程序是為特定的硬件提供給用戶程序的一組標(biāo)準(zhǔn)化接口,它隱藏了設(shè)備的工作細(xì)節(jié)。L inux 系統(tǒng)中,硬件設(shè)備被抽象為一個(gè)設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣來對硬件設(shè)備進(jìn)行操作。(1設(shè)備驅(qū)動(dòng)程序的注冊和注銷。L inux 系統(tǒng)為每個(gè)設(shè)備分配了一個(gè)主設(shè)備號(Maj or 和次設(shè)備號(M inor ,主設(shè)備號標(biāo)識設(shè)備對應(yīng)的驅(qū)動(dòng)程序,次設(shè)備號對應(yīng)具體設(shè)備的實(shí)例。通常在應(yīng)用中,主設(shè)備號都是采用動(dòng)態(tài)分配的
7、方式獲取,即以設(shè)備號“0”進(jìn)行申請,然后由系統(tǒng)返回一個(gè)可用設(shè)備號作為主設(shè)備號。(2設(shè)備操作。在L inux 內(nèi)核中,結(jié)構(gòu)struct file_op reti ons 中定常赟杰,等:基于嵌入式L inux的中斷驅(qū)動(dòng)程序設(shè)計(jì)圖像編碼與軟件義了對設(shè)備的各種操作,例如打開設(shè)備使用open (,關(guān)閉設(shè)備使用cl ose(,從設(shè)備讀取數(shù)據(jù)用read(,將數(shù)據(jù)寫入設(shè)備用write(。編寫驅(qū)動(dòng)程序,主要是實(shí)現(xiàn)struct file_op reti ons中的函數(shù)。(3模塊化設(shè)計(jì)。L inux內(nèi)核中采用了可加載的模塊化設(shè)計(jì)。驅(qū)動(dòng)采用模塊化編寫以后,它可以在系統(tǒng)啟動(dòng)后的任何時(shí)刻把驅(qū)動(dòng)程序添加到內(nèi)核代碼中;當(dāng)不
8、需要這個(gè)模塊時(shí),可以將模塊從內(nèi)核中卸載和刪除。當(dāng)模塊被加載時(shí),程序從int_module(函數(shù)開始執(zhí)行;卸載的時(shí)候,程序從exit_module(函數(shù)開始執(zhí)行,釋放掉它占用的系統(tǒng)資源2。L inux提供兩個(gè)宏,module_int和module_exit來顯示的命名模塊的注冊和注銷函數(shù),即為Moudle_int(init_module;Moudle_exit(exit_module;112L inux中的中斷處理L inux在驅(qū)動(dòng)程序中應(yīng)用到中斷的時(shí)候,必須先把中斷處理程序注冊到系統(tǒng)中。當(dāng)有硬件中斷請求發(fā)生后,操作系統(tǒng)調(diào)用中斷處理程序,完成對設(shè)備的操作4。注冊中斷處理程序采用的函數(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為要申請的硬件中斷號;handle為中斷處理子程序,中斷產(chǎn)生時(shí)由系統(tǒng)來調(diào)用,調(diào)用參數(shù)iqr為中斷類型號,dev_id為申請時(shí)告訴系統(tǒng)的設(shè)備;標(biāo)識regs為中斷發(fā)生時(shí)寄存器的內(nèi)容; irq_flags決定中斷處理程序的特性,例如設(shè)置sa
10、_ interrup t就是個(gè)快中斷,不設(shè)置就是慢中斷; devna me指向設(shè)備名稱的字符指針,記錄了哪個(gè)設(shè)備使用這個(gè)中斷號;dev_id為申請中斷時(shí)間告訴系統(tǒng)的設(shè)備標(biāo)識,由于中斷可以被共享,不同的中斷處理通過dev_id來區(qū)分。注銷中斷采用的函數(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)的讀寫。由于中斷處理程序是在中斷時(shí)間內(nèi)運(yùn)行的,它不能向用戶空間發(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í)還沒有數(shù)據(jù)可讀,就必須讓進(jìn)程睡眠來等待數(shù)據(jù)。如果中斷向進(jìn)程發(fā)出了信號,指示它們等待的事件已經(jīng)發(fā)生,那么就可以喚醒在設(shè)備上睡眠的那些進(jìn)程。進(jìn)程的睡眠和喚醒就是通過一個(gè)叫做等待隊(duì)列的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)的。在L inux中,等待隊(duì)列由一個(gè)wait_queue_head_t類型的數(shù)據(jù)結(jié)構(gòu)來管理。interrup tible_sleep_on(函數(shù)用來讓進(jìn)程睡眠, wake_up_interrup tible(函數(shù)用來喚醒睡眠的進(jìn)程。(2環(huán)形緩沖區(qū)。在驅(qū)動(dòng)程序使用循環(huán)緩
12、沖區(qū)是處理并發(fā)訪問問題的一種有效方法。當(dāng)設(shè)備的一些操作來不及處理的時(shí)候,就先存放到緩沖區(qū)中。緩沖區(qū)共有兩個(gè)指針進(jìn)行尋址:head和tail。Head指向數(shù)據(jù)的寫入位置,tail指向數(shù)據(jù)的讀出位置。(3系統(tǒng)時(shí)鐘。在編寫中斷處理程序的時(shí)候,必須要保證程序執(zhí)行的時(shí)間盡可能短。系統(tǒng)執(zhí)行時(shí)間由系統(tǒng)時(shí)鐘來控制。系統(tǒng)時(shí)鐘是通過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來定義每秒種最小時(shí)間間隔的數(shù)目。系統(tǒng)計(jì)時(shí)到一定時(shí)間就
13、調(diào)用functi on函數(shù),并把此子程序從定時(shí)隊(duì)列里刪除,如果想要每隔一定時(shí)間都執(zhí)行一次的話,就必須在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è)端口對應(yīng)4個(gè)按鍵。當(dāng)按鍵按下時(shí),分別產(chǎn)生eint3,eint4,eint5,eint64個(gè)外部低電平的中斷請求。s3c2410根據(jù)中斷來判圖像編碼與軟件常赟杰,等:基于嵌入式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、無法被及時(shí)處理的時(shí)候,使用該緩沖區(qū)緩存按鍵。此外,還包含按鍵狀態(tài)標(biāo)志和一個(gè)等待隊(duì)列。為了實(shí)現(xiàn)軟件延時(shí),定時(shí)器也是必要的,但不包含在設(shè)備結(jié)構(gòu)體中;(2接著定義一個(gè)按鍵結(jié)構(gòu)體,來保存4個(gè)按鍵的所對應(yīng)的中斷號,GP I O引腳及鍵值;(3按鍵驅(qū)動(dòng)的模塊加載和卸載函數(shù);(4按鍵設(shè)備中斷處理函數(shù)。在鍵被按下后,將發(fā)生中斷,在中斷處理程序中,延時(shí)20m s,去除抖動(dòng);(5按鍵設(shè)備的打開、釋放函數(shù)。按鍵設(shè)備驅(qū)動(dòng)的打開和釋放函數(shù)比較簡單,主要是設(shè)置keydev1head、keydev1tail和按鍵事件函數(shù)指針keyEvent的值;(6按鍵設(shè)備的讀取函數(shù)。按鍵設(shè)備驅(qū)動(dòng)的讀函數(shù)是驅(qū)動(dòng)程序和用戶的接口,在讀取/d
15、ev/key2 board/ra w文件的時(shí)候被讀取。當(dāng)keydev1head!= keydev1tail時(shí),表示緩沖區(qū)有數(shù)據(jù),它從緩沖區(qū)的尾部讀取一個(gè)按鍵事件,直接返回給用戶。當(dāng)緩沖區(qū)為空時(shí),根據(jù)用戶空間是阻塞讀還是非阻塞讀,分為如下兩種情況來處理:1若采用非阻塞讀,則因?yàn)闆]有按鍵緩存,直接返回-Eagain;2若采用阻塞讀,則在keydev1wq等待隊(duì)列上睡眠,直到有按鍵被記錄入緩沖區(qū)后再被喚醒。3結(jié)束語L inux216內(nèi)核中,添加了可搶占(Pree mp tible的處理中斷方式,使中斷處理的實(shí)時(shí)性更加強(qiáng)大。在編寫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嵌入式開發(fā)與實(shí)踐M.北京:北京航空航天大學(xué)出版社,2006.3Rubini A,Corbet J.L inux設(shè)備驅(qū)動(dòng)程序M.魏永明,駱勇,姜均,譯.北京:中國電力出版社,2002.4董志國,李式巨.嵌入式L inux設(shè)備驅(qū)動(dòng)程序開發(fā)J.計(jì)算機(jī)工程與設(shè)計(jì),2006,27(20:3737-3740.5李世勇,肖竟華.基于L inux驅(qū)動(dòng)的編寫技術(shù)J.電腦與信息技術(shù),2006,14(3:43-45.(上接第21頁6結(jié)束語文中給出了該新型智能化變換器式功率表6的設(shè)計(jì),綜述了該儀表系統(tǒng)的工作原理和設(shè)計(jì)思想,重點(diǎn)介紹了功率檢測電路的原理和設(shè)計(jì)。本儀表經(jīng)實(shí)際使用證明,具有體積小、成本低、精度高、可靠性好等優(yōu)點(diǎn),有較好的市場前景。此外,還可以針對不同的用戶,進(jìn)一步修改軟硬件系統(tǒng),增加功
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 航天社團(tuán)考試題及答案
- 家長必看的考試題及答案
- 城管執(zhí)法源頭管理制度
- 技能培訓(xùn)考試題及答案
- 鋼鐵物流面試題及答案
- 中藥熏洗加熱敷治療老年退行性膝關(guān)節(jié)骨性關(guān)節(jié)炎58例總結(jié)模版
- 兒童急性早幼粒細(xì)胞白血病的臨床護(hù)理
- 新質(zhì)生產(chǎn)力落實(shí)
- 我的百寶箱三等獎(jiǎng)教學(xué)設(shè)計(jì)
- T/CADBM 67-2022戶外生態(tài)涼亭通用技術(shù)要求
- 護(hù)理科研課題申請書
- 開工預(yù)付款支付申請表
- 行政執(zhí)法實(shí)務(wù)講課課件PPT
- DB43∕T 604-2010 日用炻瓷-行業(yè)標(biāo)準(zhǔn)
- 《品牌策劃與管理(第4版)》知識點(diǎn)與關(guān)鍵詞解釋
- 國家開放大學(xué)《水利水電工程造價(jià)管理》形考任務(wù)1-4參考答案
- 司法局PPT模板
- 軸直線滑臺設(shè)計(jì)畢業(yè)論文
- 泄爆墻施工方案1
- FC西游記后傳金手指
- 飽和蒸汽、過熱蒸汽壓力與溫度、密度對照表
評論
0/150
提交評論