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 之“看” 汽保設備篇
如何在設備采購中節省成本
主站蜘蛛池模板: 国产精品午夜电影| 亚洲天堂视频在线观看| 中文字幕天无码久久精品视频免费| 午夜不卡福利| 欧美专区日韩专区| 992Tv视频国产精品| 伊人91在线| 一区二区理伦视频| 热这里只有精品国产热门精品| 国产97视频在线观看| 国产成人无码AV在线播放动漫| 91人妻日韩人妻无码专区精品| 沈阳少妇高潮在线| 中文一区二区视频| 福利小视频在线播放| 国产区91| 欧美午夜网站| 亚洲一欧洲中文字幕在线| 国产裸舞福利在线视频合集| 日韩在线欧美在线| 欧洲成人在线观看| 99伊人精品| 午夜免费视频网站| 日本福利视频网站| 无码啪啪精品天堂浪潮av| 91蝌蚪视频在线观看| 亚洲精品无码人妻无码| 人妖无码第一页| 久久精品只有这里有| 国产成人精品男人的天堂下载| 在线观看国产精美视频| 久久中文字幕不卡一二区| 国产美女视频黄a视频全免费网站| 欧美激情二区三区| 欧美国产综合色视频| 色综合综合网| 综合色婷婷| 一区二区三区国产精品视频| 99免费视频观看| 一级做a爰片久久毛片毛片| 国产在线精品香蕉麻豆| 亚洲 日韩 激情 无码 中出| 91精品免费高清在线| 亚洲Av激情网五月天| 亚洲aaa视频| 一级毛片不卡片免费观看| 亚洲精品午夜天堂网页| 婷婷午夜影院| 99久久国产精品无码| 国产成人综合日韩精品无码不卡| 国产福利一区在线| 亚洲性视频网站| 91精品国产一区自在线拍| 国产精品欧美亚洲韩国日本不卡| 国产噜噜噜视频在线观看 | 久久精品视频亚洲| 极品尤物av美乳在线观看| 日韩福利视频导航| 欧美亚洲国产一区| 日韩黄色大片免费看| 国产午夜人做人免费视频中文| 国产新AV天堂| 九九视频免费看| 久久婷婷六月| 日韩欧美91| igao国产精品| 99精品伊人久久久大香线蕉| 666精品国产精品亚洲| 亚洲熟女偷拍| 精品视频一区二区三区在线播| 亚洲成人黄色网址| 午夜免费小视频| 青青青视频蜜桃一区二区| 欧美成人一级| 伊人网址在线| 日本不卡视频在线| 欧美成人一级| 国产午夜福利亚洲第一| 成年人国产视频| 国产精品美女网站| www.亚洲色图.com| 无码精油按摩潮喷在线播放|