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

基于Linux內核輸入子系統(tǒng)的驅動研究

2012-03-17 07:20:54劉少平
電子設計工程 2012年17期
關鍵詞:設備

劉少平

(陜西烽火電子股份有限公司 陜西 寶雞 721006)

嵌入式技術在工業(yè)和日常生活中變得越來越普及,Linux作為是目前最流行的操作系統(tǒng)之一,在桌面系統(tǒng)、服務器領域都有大量用戶,在嵌入式領域也備受青睞。盡管Linux內核完全由C語言和匯編語言寫成,但是卻頻繁的用到了面向對象的設計思想。具體到驅動方面,就是為同類的設備設計一個框架,而框架的核心層則實現了該設備通用的一些功能。

Linux系統(tǒng)提供了輸入子系統(tǒng),按鍵、鍵盤、觸摸屏、鼠標等設備都可以利用它的接口函數來實現設備驅動。基于輸入子系統(tǒng)的優(yōu)越性,這種設備程序接口得到了很好的應用,但目前為止介紹輸入子系統(tǒng)的相關資料卻較缺乏。文中基于Linux內核輸入子系統(tǒng)對設備驅動流程進行了研究,并以觸摸屏為例,詳細分析了驅動實現過程,通過程序移植,觸摸屏校準之后可以正常使用。入設備的抽象,是內核中字符設備驅動接口的封裝。輸入子系統(tǒng)由設備驅動層、核心層和事件處理層構成,如圖1所示。

圖1 輸入子系統(tǒng)Fig.1 Input subsystem

1 Linux下的設備驅動基礎

Linux系統(tǒng)主要將設備分成3種類型:字符設備、塊設備和網絡接口。分別對應字符模塊 (charmodule)、塊模塊(block module)和網絡模塊(network module)[1]。 比如:常用的按鍵、鍵盤、觸摸屏、鼠標等都是典型的字符設備。對于面向對象的程序設計,為了極大提高代碼的可重用能力,引入了輸入子系統(tǒng)。

Linux輸入子系統(tǒng)[2-3]是對物理形態(tài)各異的功能相似的輸

設備驅動層(Input Device Drivers)提供對硬件各寄存器的讀寫訪問和將底層硬件對用戶輸入訪問的響應轉換為標準的輸入事件,通過核心層提交給事件處理層 (Input Event Drivers);核心層(Input Core)對設備驅動層提供編程接口,對事件處理層的也提供編程接口;事件處理層為用戶空間的應用程序提供了統(tǒng)一訪問設備的接口和驅動層提交來的事件處理。

以字符設備為例,一般的工作原理是底層在這些輸入設備動作發(fā)生時產生一個中斷(或通過timer定時查詢),然后CPU通過SPI、I2C或者外部存儲器總線讀取鍵值、坐標等數據,放入一個緩沖區(qū),即字符設備驅動管理緩沖區(qū),而驅動的read()接口讓用戶可以讀取鍵值,坐標等數據。

顯然,在這些工作中,只有中斷、讀鍵值與坐標值是與設備相關的,而輸入事件的緩沖區(qū)管理以及字符設備驅動的文件管理接口對于輸入設備是通用的。因此,內核中的輸入子系統(tǒng)就用來處理公共的工作。所有的輸入事件,內核使用統(tǒng)一的數據結構input_event來描述,如下:

在input_dev結構體中,一個字段是evbit,它表示響應的事件類型。

基于輸入子系統(tǒng)的設備驅動層驅動的實現過程如下:

1)在驅動模塊加載函數中設置輸入設備支持輸入子系統(tǒng)的事件,Linux內核用input_dev代表一個輸入設備。

2)設備驅動通過set_bit()告訴子系統(tǒng)它支持哪些事件,如 :set_bit (EV_KEY,input_dev.evbit)。 通 過 內 核 提 供 的input_register_device()函數向輸入子系統(tǒng)注冊輸入設備。

3)在鍵被按下/抬起,觸摸屏被觸摸/抬起/移動,鼠標被移動/單擊/抬起時,輸入設備通過 input_report_xxx()報告發(fā)生的事件及對應的鍵值、坐標等狀態(tài)。

2 基于觸摸屏的驅動實現

驅動模塊初始化函數中,除了對驅動字符設備注冊外,還要進行中斷申請等多項工作。在設備驅動中,將實現open( )、release( )、read( )、fasync( )和 poll( )等函數。 以觸摸屏[4]為例,常規(guī)的觸摸屏驅動設計[5-6]需要處理更多的事務,還要向應用層實現設備的讀取入口函數等等。而利用輸入子系統(tǒng),通過對input_dev實例的evbit[0]的設置來支持同步(EN_SYN)、按鍵(EN_KEY)和絕對坐標(EV_ABS)事件。 觸摸屏使用輸入子系統(tǒng)提供的通用輸入事件驅動程序evdev,將事件信息打包成Input_event類型進行報告。其實現流程大致為:

1)定義一個輸入設備并進行初始化需要用到的結構體和參數。設置input_dev中的device的名字,名字以input0、input1、input2、input3的 形 式 出 現 在 sysfs文 件 系 統(tǒng) 中 :dev_set_name (&dev->dev,”input%d”, (unsigned long)atomic_inc_return(&input_no)-1)。

2)告知輸入子系統(tǒng),使用device_add()函數將input_dev包含的device結構注冊到Linux設備模型中,并可以在 sysfs文件系統(tǒng)中表現出來:device_add(&dev->dev);并將input_dev加入input_dev_list鏈表中,input_dev_list鏈表中包含了系統(tǒng)中所有input_dev設備,如下:

list_add_tail(&dev->node,&input_dev_list);

3)在觸摸屏設備驅動的模塊加載函數中,完成申請設備號、申請中斷、設置觸摸屏控制引腳等多項工作:

在觸摸屏設備驅動中,一次坐標及按下狀態(tài)的整個報告過程如下:

4) 中斷申請:request_irq(DEV_IRQ, dev_interrupt,0,“dev”,NULL))。觸摸屏驅動中會產生兩類中斷,一類是觸點中斷(INT-TC),一類是X/Y位置轉換中斷(INT-ADC)。在前一類中斷發(fā)生后,若之前處于PEN_UP狀態(tài),則應該啟動X/Y位置轉換。另外,將抬起中斷也放在INT-TC處理程序中,調用函數完成等待隊列和信號的釋放。當X/Y位置轉換中斷發(fā)生后,應讀取X、Y的坐標值,填入緩沖區(qū)。

5)觸摸屏設備驅動的讀函數實現緩沖區(qū)中信息向用戶空間的復制。當緩沖區(qū)有內容時,直接復制;否則,如果用戶阻塞訪問觸摸屏,則進程在等待隊列上睡眠,如果沒有阻塞,立即返回-EAGAIN。

6)在模塊的卸載函數中,要完成釋放設備號、釋放中斷等工作。注銷輸入設備函數為:

void input_unregister_device(struct input_dev*dev)。

最后,驅動應向應用層提供接口函數。當應用程序讀取和關閉該觸摸屏的設備節(jié)點時,將其調用,工作流程如圖2所示。通過試驗,使用該流程驅動的觸摸屏校準之后可以正常使用。

3 結束語

Linux輸入子系統(tǒng)是對分散的、不同類別的輸入設備進行統(tǒng)一處理的內核驅動模型。具有高效、無Bug和可重用等優(yōu)點。隨著信息技術的迅速發(fā)展和芯片制造工藝的不斷進步,從軍事電子設備,現代武器到工業(yè)過程控制,從網絡通信,辦公自動化到消費電子領域,基于Linux系統(tǒng)的產品將與人們的生活密不可分,并且也將有更多的輸入事件得到Linux輸入子系統(tǒng)的支持。

圖2 流程圖Fig.2 Flow chart

[1]Johnson MK,Troan EW.Linux應用程序開發(fā)[M].2版.武延軍,郭松柳,譯.北京:電子工業(yè)出版社,2005.

[2]Hards B.Using the Input Subsystem,PartⅠ[EB/OL].(2003-02).http://www.linuxjournal.com/article/6396.

[3]Hards B.Using the Input Subsystem, PartⅡ[EB/OL].(2003-02).http://www.linuxjournal.com/article/6429.

[4]孫天澤,袁文菊,張海峰.嵌入式設計及Linux驅動開發(fā)指南[M].北京:電子工業(yè)出版社,2005.

[5]劉淼.嵌入式系統(tǒng)接口設計與Linux驅動程序開發(fā) [M].北京:北京航空航天大學出版社,2006.

[6]楊衛(wèi)功,丁忠林.嵌入式Linux系統(tǒng)中觸摸屏驅動的研究[J].微計算機信息,2007,23(1-2):103-105.

YANG Wei-gong,DING Zhong-lin.The embedded Linux system touch screen driver[J].Micro Computer Information,2007,23(1-2):103-105.

猜你喜歡
設備
諧響應分析在設備減振中的應用
調試新設備
當代工人(2020年13期)2020-09-27 23:04:20
基于VB6.0+Access2010開發(fā)的設備管理信息系統(tǒng)
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
廣播發(fā)射設備中平衡輸入與不平衡輸入的轉換
電子制作(2018年10期)2018-08-04 03:24:48
食之無味,棄之可惜 那些槽點滿滿的可穿戴智能設備
500kV輸變電設備運行維護探討
HTC斥資千萬美元入股虛擬現實設備商WEVR
IT時代周刊(2015年8期)2015-11-11 05:50:37
Automechanika Shanghai 2014 之“看” 汽保設備篇
如何在設備采購中節(jié)省成本
主站蜘蛛池模板: 国产高清在线观看91精品| 亚洲无码四虎黄色网站| 手机永久AV在线播放| 亚洲色大成网站www国产| 国产丝袜无码精品| 国产成人高精品免费视频| 亚洲国产理论片在线播放| 国产丰满成熟女性性满足视频| 真实国产乱子伦高清| 国产在线观看91精品亚瑟| 国产jizz| 四虎影视8848永久精品| 91在线高清视频| 97国产精品视频自在拍| 在线观看国产精美视频| 国产成人综合在线观看| 中文字幕中文字字幕码一二区| 国产精品久久久久鬼色| 国产综合精品日本亚洲777| 欧美人与牲动交a欧美精品 | 在线免费观看a视频| 亚洲大尺码专区影院| 国产一区二区三区在线观看免费| 在线永久免费观看的毛片| 久久综合五月| 又猛又黄又爽无遮挡的视频网站 | 99国产精品免费观看视频| 无码专区在线观看| 国产乱子伦一区二区=| 久久综合婷婷| a欧美在线| 欧美高清视频一区二区三区| 亚洲一本大道在线| 国产欧美日韩综合一区在线播放| 一本一道波多野结衣av黑人在线| 亚洲国产欧美国产综合久久| 国产精品亚洲一区二区三区z| 国产69囗曝护士吞精在线视频| 久久精品人人做人人| 国产免费黄| 波多野结衣中文字幕一区二区| 呦系列视频一区二区三区| 五月婷婷中文字幕| 国产精品无码AV片在线观看播放| 暴力调教一区二区三区| 国内老司机精品视频在线播出| 2020精品极品国产色在线观看| 99精品这里只有精品高清视频| 亚洲精品高清视频| 亚洲欧美成人影院| 伊人久综合| 国产精品思思热在线| 精品91自产拍在线| 伊人久久久久久久久久| 91亚洲国产视频| 99热这里只有免费国产精品 | 亚洲第一网站男人都懂| 久久综合伊人77777| 欧美一区国产| 国产精品福利在线观看无码卡| a网站在线观看| 91视频区| 亚洲手机在线| 狠狠躁天天躁夜夜躁婷婷| 欧美色伊人| 波多野结衣无码AV在线| 99国产在线视频| 免费一看一级毛片| 国产美女无遮挡免费视频| 18禁黄无遮挡网站| 亚洲日韩AV无码一区二区三区人| 免费高清自慰一区二区三区| Aⅴ无码专区在线观看| 久久永久视频| 久久情精品国产品免费| 日本在线免费网站| 在线观看av永久| 天堂成人在线视频| 一区二区午夜| 中文字幕第1页在线播| 天堂成人在线视频| 天堂中文在线资源|