• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Linux的溫度傳感器驅(qū)動程序的設(shè)計

      2011-07-23 00:28:34羅東華李海崗王忠民
      關(guān)鍵詞:驅(qū)動程序流程圖指針

      羅東華,李海崗,王忠民

      (1.山東傳媒職業(yè)學(xué)院信息工程系,山東濟南250200;2.72946部隊,山東淄博255000;3.山東省科學(xué)院自動化研究所,山東濟南250014)

      隨著計算機控制技術(shù)的不斷發(fā)展,嵌入式系統(tǒng)已經(jīng)廣泛滲透到儀器儀表、工業(yè)控制等各個領(lǐng)域,成為備受關(guān)注的熱點[1].而Linux作為一個源碼公開、結(jié)構(gòu)清晰、功能強大,且穩(wěn)定可靠的操作系統(tǒng),在嵌入式系統(tǒng)中占據(jù)主流位置[2].在工業(yè)控制與監(jiān)測領(lǐng)域,溫度監(jiān)控是一項必不可少的功能模塊.文中介紹了基于模擬量傳輸?shù)臏囟葌鞲衅髟贚inux系統(tǒng)下驅(qū)動程序的開發(fā)方法,闡述了可動態(tài)加載的設(shè)備驅(qū)動程序的配置、設(shè)計和調(diào)試步驟.

      1 驅(qū)動程序的原理

      驅(qū)動程序的目的是驅(qū)動硬件正常工作,所以編寫驅(qū)動程序要針對特定的硬件來進行.Linux設(shè)備驅(qū)動程序是為特定的硬件提供給應(yīng)用程序的一組標準化接口,它隱藏了設(shè)備工作的細節(jié).設(shè)備驅(qū)動程序從總體上看分為兩部分:驅(qū)動程序與Linux內(nèi)核的接口、驅(qū)動程序與設(shè)備的接口[3].其代碼結(jié)構(gòu)大致可以分為如下幾個部分:驅(qū)動程序的注冊與注銷、設(shè)備的打開與釋放、設(shè)備的讀寫操作、設(shè)備的控制操作、設(shè)備的中斷和輪詢處理[4].

      Liunx系統(tǒng)的設(shè)備分為三種類型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備.基于模數(shù)轉(zhuǎn)換模塊(ADC)的溫度傳感器屬于字符設(shè)備,其實現(xiàn)流程包括設(shè)備的注冊,文件操作結(jié)構(gòu)體(file_operations)賦值,以及編寫文件操作結(jié)構(gòu)體中用到的函數(shù).模數(shù)轉(zhuǎn)換模塊功能非常簡單,所以在文件操作結(jié)構(gòu)體中只需要設(shè)置打開函數(shù)(open)、釋放函數(shù)(release)以及讀取函數(shù)(read)的指針,相應(yīng)的僅需要實現(xiàn)open函數(shù)、release函數(shù)和read函數(shù).

      2 驅(qū)動程序的設(shè)計

      open函數(shù)提供給驅(qū)動程序以初始化的能力,主要工作內(nèi)容如下:

      1)檢查設(shè)備特定的錯誤(諸如設(shè)備未就緒或類似的硬件問題).

      2)如果設(shè)備是首次打開,則對其進行初始化.

      3)如果有必要,更新file_operations指針[5].在Linux系統(tǒng)用戶空間的應(yīng)用程序中,如果要打開溫度傳感器設(shè)備,需要調(diào)用此內(nèi)核函數(shù)(device_open).另外,還可以在此函數(shù)中使用一個全局變量,記錄設(shè)備打開次數(shù),以標識設(shè)備是否為第一次打開.

      release函數(shù)作用與open正好相反,它釋放由open分配的所有資源,并關(guān)閉設(shè)備.同樣的,記錄設(shè)備打開次數(shù)的全局變量需要在此函數(shù)中進行減操作.

      read函數(shù)的作用是拷貝數(shù)據(jù)到應(yīng)用程序空間,其表達式為:

      static ssize_t device_read(struct file*file,char*buffer,size_t length,loff_t*offset)

      參數(shù)file是文件指針,參數(shù)buffer是指向用戶空間的緩沖區(qū),參數(shù)length是數(shù)據(jù)長度,參數(shù)loff_t是指向長偏移量類型(long offset type)對象的指針.該函數(shù)內(nèi)部的程序流程圖如圖1所示.

      圖1 read函數(shù)程序流程圖

      read函數(shù)還檢查用戶空間的指針是否有效,如果指針無效,就不會進行拷貝;如果在拷貝過程中遇到無效地址,則僅僅會復(fù)制部分數(shù)據(jù).

      3 驅(qū)動程序的加載和測試

      驅(qū)動程序編寫完成后,還需要建立該程序的makefile文件,代碼如下:

      其中,obj-m是生成目標文件的名稱,KERNELDIR是內(nèi)核路徑.

      有了adcdriver.c和makefile文件,使用make命令即可得到驅(qū)動文件adcdriver.ko.然后使用insmod命令動態(tài)加載驅(qū)動程序,基于模數(shù)轉(zhuǎn)換模塊的溫度傳感器驅(qū)動就加載進了Linux內(nèi)核中.

      為了測試該驅(qū)動程序,需要編寫Linux系統(tǒng)用戶空間下的應(yīng)用程序adc.c,程序流程圖如圖2所示.

      圖2 應(yīng)用程序adc.c的流程圖

      在Linux的用戶空間運行此應(yīng)用程序,能夠得到嵌入式處理器S3C2440模數(shù)轉(zhuǎn)換模塊的有效數(shù)據(jù),根據(jù)溫度傳感器模擬量數(shù)值與溫度的對應(yīng)關(guān)系,即可獲取外部環(huán)境溫度.

      4 結(jié)束語

      文中介紹了Linux操作系統(tǒng)下驅(qū)動程序的基本原理和框架,編寫了基于模數(shù)轉(zhuǎn)換模塊(ADC)的溫度傳感器的驅(qū)動程序和應(yīng)用程序,并給出實際項目中的操作步驟,對實現(xiàn)同類芯片的其他硬件驅(qū)動有很好的參考價值.

      [1] 張威,黃沖.嵌入式Linux設(shè)備驅(qū)動的設(shè)計方法研究[J] .江西師范大學(xué)學(xué)報:自然科學(xué)版,2007,31(4):391-393.

      [2] 巍鶩,張煥強,方貴明.基于Linux的USB驅(qū)動程序?qū)崿F(xiàn)[J] .計算機應(yīng)用,2002,22(8):17-19.

      [3] 李亞峰,歐文盛.ARM嵌入式Linux系統(tǒng)開發(fā)從入門到精通[M] .北京:清華大學(xué)出版社,2007.

      [4] 陳濤,余學(xué)才,朱良銷.信號發(fā)生模塊的Linux驅(qū)動程序設(shè)計[J] .化工自動化及儀表,2010,37(11):88-91.

      [5] Corbet J,Rubini A,Hartman G K.Linux設(shè)備驅(qū)動程序[M] .北京:中國電力出版社,2006.

      猜你喜歡
      驅(qū)動程序流程圖指針
      偷指針的人
      娃娃畫報(2019年5期)2019-06-17 16:58:10
      為什么表的指針都按照順時針方向轉(zhuǎn)動
      專利申請審批流程圖
      河南科技(2016年8期)2016-09-03 08:08:22
      專利申請審批流程圖
      河南科技(2016年6期)2016-08-13 08:18:29
      基于改進Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
      電測與儀表(2015年5期)2015-04-09 11:30:42
      寧海縣村級權(quán)力清單36條
      ARM Cortex—MO/MO+單片機的指針變量替換方法
      《天津醫(yī)藥》稿件處理流程圖
      驅(qū)動程序更新與推薦
      驅(qū)動程序更新與推薦
      高密市| 靖安县| 浮山县| 石柱| 吉隆县| 陆良县| 藁城市| 安仁县| 遵义市| 杂多县| 尼勒克县| 外汇| 阿图什市| 兰州市| 宜川县| 陕西省| 丘北县| 鄯善县| 凌海市| 那坡县| 观塘区| 汾西县| 吉首市| 河东区| 鹤岗市| 黑水县| 阳原县| 阿拉善右旗| 沿河| 海门市| 沧源| 宁阳县| 耿马| 阜新市| 安国市| 宁波市| 汉川市| 临沂市| 吉林市| 浮梁县| 巨野县|