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

基于Linux內核輸入子系統的驅動研究

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

劉少平

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

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

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

圖1 輸入子系統Fig.1 Input subsystem

1 Linux下的設備驅動基礎

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

Linux輸入子系統[2-3]是對物理形態各異的功能相似的輸

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

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

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

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

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

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

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

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

2 基于觸摸屏的驅動實現

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

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

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

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

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

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

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

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

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

void input_unregister_device(struct input_dev*dev)。

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

3 結束語

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

圖2 流程圖Fig.2 Flow chart

[1]Johnson MK,Troan EW.Linux應用程序開發[M].2版.武延軍,郭松柳,譯.北京:電子工業出版社,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驅動開發指南[M].北京:電子工業出版社,2005.

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

[6]楊衛功,丁忠林.嵌入式Linux系統中觸摸屏驅動的研究[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開發的設備管理信息系統
基于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免费国产高清观看| 精品视频福利| 国产日韩欧美在线播放| 国产在线麻豆波多野结衣| 欧美成人日韩| 韩国v欧美v亚洲v日本v| 久一在线视频| 国产成人免费手机在线观看视频| 国产精品无码作爱| 精品无码专区亚洲| 成人亚洲视频| 国产91导航| 就去吻亚洲精品国产欧美| 国产精选自拍| 国产国语一级毛片| 亚洲V日韩V无码一区二区| 国产一国产一有一级毛片视频| 国产青青草视频| 亚洲无码熟妇人妻AV在线| 人人91人人澡人人妻人人爽| 无码中字出轨中文人妻中文中| 老汉色老汉首页a亚洲| 国产天天射| 亚洲天堂精品视频| 国产亚洲精品自在久久不卡| 亚洲AV无码一二区三区在线播放| 天天综合网色中文字幕| 日韩毛片免费| 国产日韩精品一区在线不卡| 国产美女视频黄a视频全免费网站| 麻豆精品久久久久久久99蜜桃| 国产成本人片免费a∨短片| 国产欧美日韩在线在线不卡视频| 国产最新无码专区在线| 亚洲欧美日韩综合二区三区| 波多野结衣二区| 狠狠色丁香婷婷综合| 91成人在线观看| 免费99精品国产自在现线| 成人精品午夜福利在线播放| 亚洲嫩模喷白浆| 高清免费毛片| 在线国产欧美| 2019国产在线| 99999久久久久久亚洲| 久久99国产综合精品1| 99九九成人免费视频精品| 欧洲熟妇精品视频| 国产99视频精品免费观看9e| 国产乱子伦视频三区| 久久香蕉国产线看观看精品蕉| 欧美激情综合| 国产无码高清视频不卡| 97国产精品视频人人做人人爱| 免费无码网站| 最新无码专区超级碰碰碰| 国产精品亚洲欧美日韩久久| 国产成人亚洲日韩欧美电影| 精品无码国产一区二区三区AV| 国产精品视频久| 欧美另类第一页| 91丝袜乱伦| 99精品在线视频观看| 国产精品无码久久久久久| 亚洲人成日本在线观看| 国产一级精品毛片基地| 日韩第九页| 欧美成人手机在线观看网址| 日韩在线1| 91精品视频网站| 久久亚洲天堂| 精品人妻AV区| 四虎成人免费毛片| 波多野结衣亚洲一区| 亚洲不卡影院| 夜夜操国产| 久热中文字幕在线| 国产夜色视频| 亚洲无码精品在线播放| 色综合热无码热国产| 日韩无码视频网站| 91久久偷偷做嫩草影院精品|