999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于S3C2410和LINUX的觸摸屏驅動

2011-06-02 01:33:54內蒙古電子信息職業技術學院馬麗潔李占嶺
電子世界 2011年15期
關鍵詞:設備

內蒙古電子信息職業技術學院 馬麗潔 李占嶺

Linux設備驅動程序屬于Linux內核的一部分,并在Linux內核中扮演著十分重要的角色。它們像一個個“黑盒子”使某個特定的硬件響應一個定義良好的內部編程接口,同時完全隱蔽了設備的工作細節。用戶通過一組標準化的調用來完成相關操作,這些標準化的調用是和具體設備驅動無關的,而驅動程序的任務就是把這些調用映射到具體設備對于實際硬件的特定操作上。

可以把設備驅動作為內核的一部分,直接編譯到內核中,即靜態編譯,也可以單獨作為一個模塊編譯,在需要它的時候再動態的把它插入到內核中。在不需要時也可把它從內核中刪除,即動態連接。顯然動態連接比靜態連接有更多的好處,但在嵌入式開發領域往往要求進行靜態連接,尤其是像S3C44BO這種不帶MMU的芯片。但在S3C241O等帶MMU的ARM芯片中我們依然可以使用動態連接。

一、Linux設備分類

目前Linux支持的設備驅動可分為三種:字符設備,塊設備,網絡接口設備。當然它們之間的也并不是要嚴格的加以區分。

1.字符設備:所有能夠像字節流一樣訪問的設備比如文件等在Linux中都通過字符設備驅動程序來實現。在Linux中它們也被映射為文件系統的一個節點,常在/dev目錄下。字符設備驅動程序一般要包含open,close,read,write等幾個系統調用。

2.塊設備:Linux的塊設備通常是指諸如磁盤,內存,Flash等可以容納文件系統的存儲設備。與字符設備類似,塊設備也是通過文件系統來進行訪問,它們之間的區別僅僅在于內核內部管理數據的方式不同。它也允許像字符設備一樣的訪問,可以一次傳遞任意多的字節。Linux中的塊設備包含整數個塊,每個塊包含2的幾次冪的字節。

3.網絡接口設備:網絡接口設備是Linux中比較復雜的一種設備,通常它們指的是硬件設備,但有時也可是一個軟件設備。它們由內核中網絡子系統驅動,負責發送和接收數據包,而且它并不需要了解每一項事務是如何映射到實際傳送的數據包的。它們的數據傳送往往并不是面向流的,所以不容易把它們映射到一個文件系統的節點上。在Linux中采用給網絡接口設備分配一個唯一名字的方法來訪問該設備。

二、Linux關于字符設備的管理

驅動程序在Linux內核中往往是以模塊形式出現的。與應用程序的執行過程不同,模塊通常只是預先向內核注冊自己,當內核需要時響應請求。模塊中包含兩個重要的函數:init_module和cleanup_module。前者是模塊的入口,它為模塊調用做好準備工作,而后者則是在模塊即將卸載時被調用,做一些清掃工作。

驅動程序模塊通過函數:int register_chrdev(unsigned int major,const char *name,struct file_operations*fops);來完成向內核注冊的。其中unsi-gned int major為主設備號,const char *name為設備名,結構指針struct file_operations *fops內核就是通過這個結構來訪問驅動程序的。

在Linux中字符設備是通過文件系統中的設備名來進行訪問的。這些名稱通常放在/dev目錄下,通過命令ls-l/dev我們可以看到該目錄下的一大堆設備文件,其中第一個字母是“C”的為字符設備,而第一個字母是“b”的為塊設備文件。其中每個設備文件都具有一個主設備號和一個次設備號。當驅動程序調用open系統調用時,內核就是利用主設備號把該驅動與具體設備對應起來的。而次設備號內核并不關心,它是給主設備號已經確定的驅動程序使用的,一個驅動程序往往可以控制多個設備,如一個硬盤的多個分區,這時該硬盤擁有一個主設備號,而每個分區擁有自己的次設備號。

我們編寫好一個驅動程序模塊后,按傳統的主次設備號的方法來進行設備管理,則我們應手工為該模塊建立一個設備節點。命令:mknod /dev/ts c 254 O其中/dev/ts表示我們的設備名是ts,“C”說明它是字符設備,“254”是主設備號,“O”是次設備號。一旦通過mknod創建了設備文件,它就一直保留下來,除非我們手工刪除它。我們用register_chrdev注冊模塊時,給major賦值為O,則系統就采用動態方式分配設備號。它會在所有未被使用的設備號中為我們選定一個,作為函數返回值返回給我們。一旦分配了設備號,我們就可以在/proc/devices中看到相關內容。/proc在前面關于操作系統移植的實驗中我們已經提到,它是一個偽文件系統,它實際并不占用任何硬盤空間,而是在內核運行時在內存中動態生成的。它可以顯示當前運行系統的許多相關信息。顯然這一點對我們動態分配主設備號是非常有意義的。因為,正如我們前面提到的一樣,我們采用主次設備號的方式管理設備文件,我們要在/dev目錄下為我們的設備創建一個設備名,可我們的設備號卻是動態產生的,每次都不一樣,這樣我們就不得不每次都從新運行一次mknod命令。這個過程我們通常通過編寫自動執行腳本來完成,而其中的主設備號我們就可以通過/proc/devices中獲得。

三、觸摸屏的控制

本系統觸摸屏的控制是使用的S3c241O處理器自帶的觸摸屏控制器,這部分的開發主要參考S3c241O處理器的芯片手冊。這部分的控制主要是設置觸摸屏的采樣模式,處理器提供的模式:

1.正常的轉換模式

2.手動的x/y位置轉換模式

3.自動的x/y位置轉換模式

我們這里使用的是第3種轉換模式。需要注意的是在完成一次x/y坐標采樣的過程中需要一次模式轉換即在點擊觸摸屏之前是等待中斷模式,當有觸摸動作產生觸摸屏中斷以后,在x/y的坐標采集驅動中設置成自動的x/y位置轉換模式,在完成采集以后再轉換回等待中斷模式,準備下一次的觸摸采樣。

四、程序分析

剖析S3C241O的觸摸屏驅動程序,部分代碼及注釋如下:

static ssize_t s3c241O_ts_read(str-uct file *filp,char *buffer,size_t count,loff_t *ppos)/*設備讀函數,各參數含義:*filp打開的文件,*buffer數據緩存,count請求傳送數據長度,*ppos用戶在文件中進行存儲操作的位置。*/

驅動程序運行在內核空間,而應用程序運行在用戶空間。用戶空間內存頁是可被換出的。當內核空間訪問用戶空間時有可能當前頁并不存在而造成錯誤。所以當我們要從內核空間拷貝整段數據到用戶空間時只能借助于內核函數:

unsigned long copy_to_user(void*to,const void *from,unsigned long count)

同樣從用戶空間往內核空間拷貝數據也只能借助于內核函數:

unsigned long copy_from_user(void*to,const void *from,unsigned long count)它將在驅動程序寫函數中用到。

//在該函數中添加自己的濾波算法,注意函數中對硬件寄存器操作的部分語句和函數static void s3c241O_isr_tc(int irq,void *dev_id,struct pt_regs*reg)//這是中斷處理函數,當觸摸屏事件發生時觸發中斷,內核捕捉該中斷后交由該函數處理。

static int s3c241O_ts_open(struct inode *inode,struct file *filp)//打開設備,該函數中往往要完成設備初始化和使用記數增值。

static int s3c241O_ts_release(str-uct inode *inode,struct file *filp)//設備釋放函數。

s3c241O_isr_adc、S3c241O_isr_tc:它是一個唯一的標志符,通過該指針多個設備可以共享信號線。驅動程序也可以用它指向自己的私有數據區,用來識別哪個設備產生了中斷。

由于設備驅動是溝通底層硬件與上層應用程序的橋梁,它所涉及的內容相當多。要編寫一個完整的驅動程序,要求你不僅對硬件設備及其工作原理要相當熟悉,同時必需具備一定的內核結構的知識,此外對上層應用程序及開發語言也具有比較過硬的開發能力。

[1]毛德操,胡希明.Linux內核源代碼情景分析(上冊)[M].浙江:浙江大學出版社.

[2]劉淼.嵌入式系統接口設計與Linux驅動程序開發[M].北京:北京航空航天大學,2006,11.

猜你喜歡
設備
諧響應分析在設備減振中的應用
調試新設備
當代工人(2020年13期)2020-09-27 23:04:20
基于VB6.0+Access2010開發的設備管理信息系統
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
廣播發射設備中平衡輸入與不平衡輸入的轉換
電子制作(2018年10期)2018-08-04 03:24:48
食之無味,棄之可惜 那些槽點滿滿的可穿戴智能設備
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
HTC斥資千萬美元入股虛擬現實設備商WEVR
IT時代周刊(2015年8期)2015-11-11 05:50:37
Automechanika Shanghai 2014 之“看” 汽保設備篇
如何在設備采購中節省成本
主站蜘蛛池模板: 波多野结衣视频一区二区| 日韩高清无码免费| 国产剧情国内精品原创| 91丝袜美腿高跟国产极品老师| 伊人激情久久综合中文字幕| 夜夜操天天摸| 亚洲欧洲日产国产无码AV| 四虎亚洲国产成人久久精品| 亚洲日韩精品欧美中文字幕| 8090成人午夜精品| 成人欧美日韩| 亚洲人成成无码网WWW| 亚洲日韩Av中文字幕无码| 最新国产精品第1页| 成人午夜免费视频| 国产福利微拍精品一区二区| 国产一二视频| 久久国产精品电影| 国产97公开成人免费视频| 伊人久久大香线蕉综合影视| 91精品专区| 黄色国产在线| 欧美精品另类| 亚洲欧美不卡视频| 国产经典在线观看一区| 国产黑丝视频在线观看| 欧美人与动牲交a欧美精品| 久久综合九色综合97婷婷| 国产在线日本| 国产a网站| 波多野结衣一区二区三区AV| 欧美日韩一区二区三区在线视频| 国产精品无码一二三视频| 国产福利一区在线| 另类欧美日韩| 久久伊人久久亚洲综合| 视频一本大道香蕉久在线播放| 亚洲一区色| 中文字幕不卡免费高清视频| 亚洲精品欧美日本中文字幕| 极品尤物av美乳在线观看| 精品无码国产一区二区三区AV| 亚洲欧洲日韩综合色天使| 亚洲男人在线天堂| 中文国产成人精品久久一| 国产欧美日韩综合在线第一| 欧美中文字幕第一页线路一| 伊人无码视屏| 露脸一二三区国语对白| 免费不卡视频| 国产高清在线观看| 91免费国产高清观看| 欧美日韩一区二区在线免费观看 | 福利视频一区| 波多野衣结在线精品二区| 99精品在线看| 精品成人免费自拍视频| 另类专区亚洲| 亚洲全网成人资源在线观看| 国产XXXX做受性欧美88| 国产精品久久久久无码网站| 欧美精品亚洲二区| 欧美成a人片在线观看| av在线无码浏览| 精品视频一区二区观看| 99人体免费视频| 国产精品成人观看视频国产| 精品欧美一区二区三区在线| 国产成人一区二区| 欧美人与牲动交a欧美精品| 91精品人妻一区二区| 婷婷色在线视频| 综合天天色| 国产乱肥老妇精品视频| 精品国产香蕉伊思人在线| 国产大片喷水在线在线视频| 婷婷激情亚洲| 天堂成人av| 日本一区二区三区精品视频| 国产成人精品视频一区视频二区| 在线播放91| 强奷白丝美女在线观看|