91精品国产综合久久福利软件_国产伊人久_精品毛片_亚洲一区二区中文字幕_中文字幕在线观看_日日操狠狠操

學術(shù)咨詢

讓期刊論文更省時、省事、省心

基于Linux操作系統(tǒng)字符設(shè)備驅(qū)動程序開發(fā)

時間: 分類:電子論文 次數(shù):

摘要:本文詳細介紹了基于Linux操作系統(tǒng)中字符設(shè)備驅(qū)動開發(fā)。首先介紹了字符設(shè)備驅(qū)動開發(fā)的相關(guān)概念,簡述了驅(qū)動程序開發(fā)的基本知識和字符設(shè)備驅(qū)動程序開發(fā)的基本流程,重點闡述了Linux內(nèi)核相關(guān)程序結(jié)構(gòu)。為字符設(shè)備驅(qū)動開發(fā)的完整性,舉例說明了字符設(shè)備驅(qū)

  摘要:本文詳細介紹了基于Linux操作系統(tǒng)中字符設(shè)備驅(qū)動開發(fā)。首先介紹了字符設(shè)備驅(qū)動開發(fā)的相關(guān)概念,簡述了驅(qū)動程序開發(fā)的基本知識和字符設(shè)備驅(qū)動程序開發(fā)的基本流程,重點闡述了Linux內(nèi)核相關(guān)程序結(jié)構(gòu)。為字符設(shè)備驅(qū)動開發(fā)的完整性,舉例說明了字符設(shè)備驅(qū)動開發(fā)的編譯下載和測試等實踐知識。通過本論文能達到掌握字符設(shè)備驅(qū)動開發(fā)的基本能力,進而為復雜設(shè)備驅(qū)動開發(fā)打下基礎(chǔ)。

  關(guān)鍵詞:Linux;字符設(shè)備;驅(qū)動程序

計算機程序

  任何一個計算機系統(tǒng)的運轉(zhuǎn)都是系統(tǒng)中軟硬件共同努力的結(jié)果,沒有硬件的軟件是空中樓閣,而沒有軟件的硬件則只是一堆廢鐵。計算機系統(tǒng)發(fā)現(xiàn)外部設(shè)備并與外部設(shè)備通信,依靠驅(qū)動程序。設(shè)備驅(qū)動程序運行在內(nèi)核空間,作為外部設(shè)備與應(yīng)用軟件橋梁。在所有嵌入式操作系統(tǒng)里,嵌入式Linux系統(tǒng)相比于其他的系統(tǒng),在嵌入式領(lǐng)域有著獨特的優(yōu)勢。首先是Linux開源免費;然后是Linux的內(nèi)核體積小且易于模塊化,適應(yīng)性和可配置性好適合各種平臺,它同時還支持多任務(wù)、多用戶;最后是Linux有很多開發(fā)論壇,提供豐富開發(fā)資料,對開發(fā)者而言是強大的技術(shù)外援。所以本論文是基于Linux操作系統(tǒng)上開發(fā)字符設(shè)備驅(qū)動程序。

  程序設(shè)計論文:以O(shè)J系統(tǒng)和學科競賽為核心的程序設(shè)計實踐教學

  1字符設(shè)備驅(qū)動程序設(shè)計基礎(chǔ)

  1.1基本原理

  1.1.1創(chuàng)建設(shè)備節(jié)點。

  在Linux操作系統(tǒng)中所有設(shè)備都當作文件來處理,每個設(shè)備在/dev目錄下都有一個設(shè)備文件與之相對應(yīng),對設(shè)備的打開、讀寫、控制和關(guān)閉等所有操作都是通過/dev/目錄下對應(yīng)的文件進行操作。設(shè)備節(jié)點有時會自動創(chuàng)建,可是字符設(shè)備驅(qū)動并不直接負責這一項操作。因此我們在設(shè)計字符設(shè)備驅(qū)動時會需要手動創(chuàng)建節(jié)點,使用mknod命令在文件系統(tǒng)上人工創(chuàng)建。除此之外Linux中有一組函數(shù)可以用來在/dev目錄下創(chuàng)建設(shè)備節(jié)點,即class_create()和device_create()。

  1.1.2主次設(shè)備號。Linux管理的所有設(shè)備都有與之對應(yīng)的目錄,內(nèi)核通過驅(qū)動程序來識別設(shè)備。一般來說驅(qū)動程序通過主設(shè)備號快速匹配外部設(shè)備,但同一類設(shè)備數(shù)量不只一個(或者說一個驅(qū)動程序可以同時匹配多個設(shè)備),所以必須增加次設(shè)備號,它給驅(qū)動程序提供了一種能從同一驅(qū)動管理下的同類型設(shè)備分辨出目標設(shè)備的方法。

  1.1.3用戶空間和內(nèi)核空間。嵌入式系統(tǒng)屬于多用戶、多任務(wù)操作系統(tǒng),不能因為某個用戶或某個任務(wù)的非法操作造成死機現(xiàn)象,所以用程序運行在用戶空間,而驅(qū)動程序則運行在內(nèi)核空間,內(nèi)核空間維護計算機系統(tǒng)全局穩(wěn)定性,驅(qū)動程序運行時受到內(nèi)核程序較多約束,因為在內(nèi)核中運行任一程序出現(xiàn)問題都會造成計算機系統(tǒng)死機。而應(yīng)用程序運行較“寬松”。

  1.1.4應(yīng)用程序與硬件設(shè)備的訪問。

  計算機系統(tǒng)中的應(yīng)用程序通過運行在內(nèi)核空間的驅(qū)動程序來訪問計算機外部設(shè)備。應(yīng)用程序按照其中的流程對硬件設(shè)備進行訪問。首先是應(yīng)用程序調(diào)用操作系統(tǒng)提供的系統(tǒng)函數(shù),從而訪問內(nèi)核空間,然后內(nèi)核空間的結(jié)構(gòu)file_operations來實現(xiàn)驅(qū)動程序中的相關(guān) 函數(shù),從而實現(xiàn)對設(shè)備的訪問。

  1.2重要結(jié)構(gòu)

  file_operations要實現(xiàn)用戶空間對內(nèi)核空間的調(diào)用,必須依賴Linux操作系統(tǒng)內(nèi)核中一個非常重要的數(shù)據(jù)結(jié)構(gòu):file_operations。此結(jié)構(gòu)存放在內(nèi)核include/linux/fs.h文件中,所以用到此結(jié)構(gòu)的代碼都應(yīng)包含此頭文件#include 。file_operations結(jié)構(gòu)如下:Linux使用file_operations訪問驅(qū)動中的函數(shù)時,file_operations中存儲著對設(shè)備進行各種操作的函數(shù)指針f_ops,file_operations中每一個成員名都對應(yīng)一個調(diào)用函數(shù),如:file_open()、file_allocate()、file_read()、file_write()、file_ioctl()、file_close()等。比如在對系統(tǒng)進行數(shù)據(jù)存取的時候,系統(tǒng)通過設(shè)備的設(shè)備號來找到驅(qū)動,然后讀取驅(qū)動,開始執(zhí)行函數(shù)。例如:應(yīng)用程序要對某個外部設(shè)備進行如open操作時,這時匹配該外部設(shè)備的驅(qū)動程序就會執(zhí)行對應(yīng)的fopen函數(shù)。

  2字符設(shè)備驅(qū)動程序開發(fā)

  字符設(shè)備驅(qū)動程序開發(fā)涉及到知識點較多,開發(fā)起來顯得有點復雜。但規(guī)律可循,總結(jié)如下流程:第一步:編寫驅(qū)動程序文件準備工作(定義設(shè)備名稱、定義主次設(shè)備號)、設(shè)備注冊、定義結(jié)構(gòu)體file_operations、實現(xiàn)結(jié)構(gòu)體內(nèi)的功能函數(shù)、設(shè)備注銷等。具體下來有以下工作:a.初始化外部設(shè)備的相關(guān)寄存器。包括定時寄存器、中斷寄存器、串口寄存器;b.初始化硬件設(shè)備參數(shù);c.注冊設(shè)備。通過主次設(shè)備號與次設(shè)備號將驅(qū)動程序與設(shè)備關(guān)聯(lián)起來,內(nèi)核會調(diào)用函數(shù)register_chrdev來注冊匹配的外部設(shè)備;d.注冊外部設(shè)備中斷函數(shù)。內(nèi)核會調(diào)用函數(shù)request_irq()來注冊匹配的外部設(shè)備的中斷函數(shù)。

  第二步:驅(qū)動程序放進Linux內(nèi)核將編輯好驅(qū)動程序源文件和頭文件放置內(nèi)核相對應(yīng)的文件下./kernel/drivers/char,同時修改Linux內(nèi)核配置文件***.config,在使用makemenuconfig命令時在配置頁面里出現(xiàn)相應(yīng)的配置選項,使用空格鍵選中,保存后退出,再使用預(yù)安裝好的交叉編譯工具鏈進行交叉編譯。需要說明的,設(shè)備驅(qū)動程序編譯有兩種方法,一種是編譯進內(nèi)核,另一種是編譯成模塊。一般來說,調(diào)試階段編譯成模塊形式,驅(qū)動程序穩(wěn)定后,編譯進內(nèi)核。

  3字符設(shè)備驅(qū)動程序舉例

  在Linux環(huán)境下,以鍵盤驅(qū)動程序為例進行說明。硬件基本情況是:S3C2410+HD7279(鍵盤數(shù)碼管模塊)。

  3.1編寫鍵盤驅(qū)動程序

  a.編寫file_operations結(jié)構(gòu)。structfile_operationsKey_Board_7279={open:Key_Board_7279_Open,//打開設(shè)備文件ioctl:Key_Board_7279_Ioctl,//設(shè)備文件其他操作release:Key_Board_7279_Close,//關(guān)閉設(shè)備文件};b.編寫Key_Board_7279_Open/。Key_Board_7279_Close/Key_Board_7279_Ioctl函數(shù)。打開/關(guān)閉函數(shù)為NULL,Key_Board_7279_Ioctl函數(shù)實現(xiàn)獲取鍵值c.鍵盤服務(wù)子程序。staticvoidKey_Board_7279_ISR(intirq,void*dev_id,structpt_regs*regs){disable_irq(33);//使用33號中斷key_number=Read_Key_Board_7279(cmd_read);//中斷方式讀取鍵值...}d.初始化鍵盤硬件函數(shù)。

  voidSetup_Key_Board_7279(void)e.注冊鍵盤設(shè)備,調(diào)用初始化函數(shù)。int__initKey_Board_7279_Init(void){register_chrdev(...)//注冊設(shè)備Setup_Key_Board_7279(...)//調(diào)用硬件初始化函數(shù)request_irq(...)//注冊中斷}f.卸載鍵盤設(shè)備。void__exitKey_Board_7279_Exit(void)3.2測試鍵盤驅(qū)動程序設(shè)備驅(qū)動編譯后,接著編寫測試程序kbd.c用來檢測驅(qū)動程序的效果。fd=open("/dev/Kbd7279",0)

  結(jié)束語

  本論文講述了字符設(shè)備驅(qū)動的基本原理及編寫字符設(shè)備驅(qū)動程序的方法。基于S3C2410+HD7279平臺上,演示了鍵盤字符設(shè)備驅(qū)動程序開發(fā)并進行了驗證。本文可認為是字符設(shè)備驅(qū)動開發(fā)范例,為初學字符設(shè)備驅(qū)動開發(fā)提供參考。

  參考文獻

  [1]周立功.單片機實驗與實踐[M].北京:北京航空航天大學出版社.

  [2]陸亞民.單片機原理及應(yīng)用[M].北京:輕工業(yè)出版社.

  [3]Corbet,Rubini&Kroah-Hartman著,魏永明等譯.《LinuxDevice設(shè)備驅(qū)動程序第三版》[M].北京:中國電力出版社,2006.

  [4]RobertLove著,陳莉君譯.Linux內(nèi)核設(shè)計與實現(xiàn)第二版[M].北京:機械工業(yè)出版社,2006.

  [5]JeanJ.Labrosse著,邵貝貝譯《嵌入.式實時操作系統(tǒng)μC/OS-Ⅱ(第2版)》[M].北京:北京航空航天大學出版社,2005.

  [6]倪繼利.Linux內(nèi)核分析及編程[M].北京:電子工業(yè)出版社,2005.

  [7]EL-arm-830+型教學實驗系統(tǒng)[M].北京:北京精儀達盛科技有限公司.

  作者:占華林徐濤濤陳亮亮于子正李明鑫

中文核心期刊推薦

SCI核心期刊推薦

主站蜘蛛池模板: 天堂在线视频tv | 国产九九热 | 国产一区二区三区免费 | 奇米av| 欧美性大战xxxxx久久久 | www.国产精品| 国产毛片av | 国产欧美一区二区三区在线看蜜臀 | 国产www | 日韩毛片在线播放 | 日本福利视频 | a在线免费观看 | 国产午夜三级 | 色哟哟入口国产精品 | 91精品国产99久久久久久红楼 | 久草资源在线 | 二区在线观看 | 色妞色视频一区二区三区四区 | 欧美一级二级三级 | 免费观看a级片 | 高潮毛片又色又爽免费 | 黄视频在线播放 | www.17c.com喷水少妇 | 亚洲黄色成人 | av在线天堂网 | 成人一级黄色片 | 日韩精品一区二区在线 | 日产毛片| 成人欧美一区二区三区白人 | 一区二区三区在线播放 | 国产精品1区 | 成年人视频在线播放 | 亚洲精品综合 | 日韩中文视频 | 一区二区色| 色综合久久天天综合网 | 91成人免费 | 久久久久婷婷 | 久草视频免费 | 日本男人的天堂 | www.男人天堂 |