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

基于Linux設備模型的單總線接口的設計

2014-09-28 01:13:51王龍奇樊明輝陳麗紅
電子器件 2014年1期
關鍵詞:用戶設備設計

王龍奇,樊明輝,陳麗紅

(福州大學物理與信息工程學院,福建福州350000)

基于Linux設備模型的單總線接口的設計

王龍奇,樊明輝*,陳麗紅

(福州大學物理與信息工程學院,福建福州350000)

單總線是一些傳感器和低速器件與主機通信常用一種總線協議,如智能溫度傳感器DS18B20,A/D轉換芯片等。隨著物聯網的發展,這些傳感器的應用將越來越廣泛,而這些接口沒有與內核緊密聯系,內核無法進行統一管理,穩定性和可靠性無法得到保證。在符合Linux內核設備模型[2]的前提下,實現一個穩定的單總線接口,將整個控制器分為頂層設備接口、核心層、底層硬件接口由上到下3個部分;同時對驅動和設備分離、頂層設備接口和具體硬件操作分離。

單總線;Linux;嵌入式系統;分層;分離

Linux系統以其開放、穩定、功能強大著稱,在其內核源碼中提供眾多接口和協議的實現,其中包括PCI、USB、I2C、SPI等等,各種總線的實現都是基于內核的設備模型,具有穩定、功能豐富、擴展性強的優點。而單總線,由于其應用的特殊性——主要應用于EEPROM存儲器控制、數字電位器控制、傳感器控制、時鐘控制等方面,Linux內核尚未提供總線的支持。而這些應用正漸漸成為許多完整系統不可或缺的一部分、如智能系統中傳感器的控制,同步系統中同步時鐘的獲取等等,課題正是基于這種現狀,遵循Linux內核的分層、分離思想,實現了一個符合Linux內核設備模型的單總線控制器。

1 單總線協議簡介

單總線協議[3],即1-wire protocol,是 Dallas公司提出一種串行總線協議。與其他的串行總線如I2C、SPI類似,1-wire的命令、數據傳輸也是通過串行方式,但是1-wire具備了最少資源占用的優勢,僅使用一根信號線,同時用于傳輸時鐘、數據、命令,并且是雙向傳輸。除此之外,它還具有成本低廉、可擴展性強、維護方便等特點。

單總線協議只適用于單主機場合,易于實現一主多從的網絡連接,如常用的多點溫度采集系統[4]。節點之間的識別通過一串64bit專用ID進行識別[5-6]。單總線協議還定義了單主單從的簡單通信方式,主機不用發送識別碼即可與從機進行通信。

單總線協議包含了3種最基本時序,即復位時序、寫時序和讀時序[7]。在3種基本時序的基礎上,總線協議定義了尋址方式、命令傳輸方式、數據傳輸方式,這就是課題要實現的物理層部分。

2 系統結構

在linux內核中,幾乎所有的設計都是基于模塊化、分層、分離[8]等思想,在這些思想的指導下,以切合實際應用為出發點,課題實現了一種基于Linux設備模型的分層單總線控制器,它的整體原理框圖如圖1所示。

圖1 單線總線協議實現的原理框圖

2.1 物理層

在物理層中,本層向上層(核心層)屏蔽了下層通信線路的機械、電氣特性等。機械特性主要是指總線連接的接口、外設的拓撲結構、引腳數量及其排列等。而電氣特性規定了系統的供電范圍、比特與電平的對應關系、比特流的組織方式等。該層最重要的功能是提供了硬件的操作接口,上層通過這些API實現了命令的傳送和數據的收發,所以,對上層而言,下層是完全透明的,不需要直接參與底層物理特性的控制。

2.2 核心層

核心層是本系統最重要的一層,起到了承上啟下的作用,包括了設備、設備驅動、通用API接口、適配器4個部分。

在完整的內核驅動中,Linux正是通過設備模型實現設備的統一管理——也就是在kobject、kset等底層內核對象的基礎上,將設備device、設備驅動devive_driver和總線bus_type[9]以合適的方式組織在一起,它們的關系如圖2所示。

總線是連接設備和設備驅動的媒介,當有新的設備接入時,系統自動匹配總線上掛載的所有驅動,一旦匹配成功就將設備和設備驅動進行綁定。這個過程比較繁瑣,首先是總線注冊后會在/sys文件系統下生成總線目錄,相應地也會在該目錄下創建devices、drivers兩個目錄,以及關于自動匹配和熱插拔的一些屬性文件。當一個設備驅動注冊并匹配成功后,會在總線目錄下的驅動目錄生成關于這個設備驅動的屬性文件和鏈接文件。設備注冊會復雜一些,內核會先判斷該設備是否指明父設備,是否指明所屬類,也就是說至少存在4種組合,這里,設備都沒有指定父設備,但指定了所屬類,適配器所屬的類是oneWire_adapter_class,單總線設備所屬的類是oneWire_dev_class,那么設備注冊之后,屬性文件并不存在于總線目錄,而是存在于類目錄下,同時會創建總線到設備、設備到總線、設備到類等鏈接。總線目錄如下所示。

圖2 Linux的設備模型

設備目錄如下所示:.

除了探測功能,總線和設備驅動還要承擔設備刪除、熱插拔事件、電源控制等處理。設備刪除完成的是與探測相反的工作,判斷設備是否處于忙狀態,如果忙則拒絕刪除,只有當設備處于空閑狀態才會完成刪除操作,包括阻止設備的新請求、等待未執行請求、與綁定的驅動脫離、刪除sys文件系統下的目錄和節點。電源管理主要是指某些硬件設備支持多種工作模式,設備驅動的suspend和resume方法可以實現工作模式的切換,使設備進入休眠,或者恢復到正常工作狀態。

2.3 設備層

設備層相對簡單,主要是將底層的API封裝成統一的文件接口提供給應用層。Linux下的設備一般可分為3類——字符設備、網絡設備、塊設備[10],每一種設備都有各自的應用場合和特點,差別比較大,這里單總線接口也屬于字符設備,所以使用的是字符設備接口。字符設備通過一個核心結構體——file_operations封裝所有接口函數原型,最新版的內核已經提供了25種操作接口,而事實上常用的只有不到10種,這里用到的包括:

(1)設備打開——oneWire_open,分配一個新的用戶句柄,綁定適配器,同時將用戶句柄也作為設備注冊進內核由內核統一管理。

(2)設備關閉——oneWire_close,從內核中卸載用戶句柄,將用戶句柄和適配器分離,注銷用戶句柄。

(3)設備控制——oneWire_ioctl,用于除讀寫之外的一些特殊控制,比如復位、設置句柄標志等等。

(4)設備讀——oneWire_read,用于從片外設備讀取數據到應用層。

(5)設備寫——oneWire_write,用于將應用層數據傳輸到片外設備。

2.4 應用層

應用層已經涉及到了應用程序的編寫,并不是課題要討論的部分,但考慮到系統的完整性,還是將其作為測試,用來驗證系統設計的可行性,在最后一節展開介紹。

3 關鍵問題的解決

3.1 多用戶句柄問題

課題設計的最終目標是要求能夠在多用戶態下正常使用,那就不可避免地會遇到這樣的問題——不同用戶下多應用程序同時打開設備的問題。課題采用了動態分配用戶句柄的方式解決這個問題,每次有新的應用程序打開設備都會創建一個用戶句柄,而適配器是共用的,新增加的用戶句柄作為一個節點添加到適配器關于用戶句柄的鏈表上,在驅動卸載時遍歷所有句柄,處理所有請求。

3.2 多適配器問題

多適配器問題和多用戶句柄問題不同,適配器包含具體外設信息,直接對外實現控制,是最接近外設的實際意義上的設備。每一個適配器都要求有一個次設備號,用于標識其對應的外設。這部分內容與平臺相關,是驅動移植主要修改的部分。課題采用的解決方案是——用S3C2440的GPB作為單總線接口,GPB共有11個端口,也就是說可以有11個單總線接口,GPB0對應的次設備號為0,GPB1對應的次設備號為1,其他的類似。

3.3 互斥問題

在多用戶句柄的情況下,適配器是共用的,這必然會產生互斥問題[11]。在Linux內核中,解決互斥問題的方法有自旋鎖、信號量、原子操作、讀寫鎖、順序鎖、RCU、完成事件等。每一種互斥機制根據自身的特點都有對應的應用場合。自旋鎖主要應用于多處理器環境下,它不會引起睡眠,當鎖已經被其他用戶搶占,當前請求者會不斷查詢鎖的保持者是否已經釋放鎖,這種特性避免了調用進程的掛起。信號量與自旋鎖的功能類似,但是實現的辦法完全不同,當請求者無法立即獲得信號量時將直接進入睡眠,它允許并行訪問,并行訪問的數量在信號量被創建時初始化,即可以由多個內核同時控制該信號量,所以信號量不僅適用于單處理器,也適用于多處理器系統。原子量是最底層的控制方式,是一系列不可中斷操作的集合,它的操作過程是封閉的,不可中斷的,一般很少直接使用。讀寫鎖的特性是對訪問者進行區分,分為讀者和寫者,這類鎖相對于自旋鎖而言,它可以同時有多個讀者進行讀訪問,而寫者一個時刻只能有一個,也就是說讀寫鎖同時只能有一個讀者或者多個讀者,但不能既有讀者又有寫者。完成事件,是基于資源保護而提出的,是一種簡單的同步機制,可以實現簡單休眠和喚醒,并且不會引起競爭。其他幾種鎖也各有優缺點。

基于上述介紹,課題的互斥機制采用的是自旋鎖和完成事件。在適配器注冊和卸載的時候采用自旋鎖,防止有未完成的任務存在時設備被卸載,以及當有新的適配器加入時,訪問設備鏈表發生沖突。用戶句柄的添加刪除到適配器關于用戶句柄的鏈表,也需要自旋鎖實現串行訪問,因為任何時刻對于新添加的句柄,僅有一個可以訪問到該鏈表,否則可能造成鏈表的添加和刪除操作紊亂。設備卸載使用的互斥機制是完成事件,等待設備注銷完成、刪除sys文件系統下的屬性文件以后,才允許退出設備卸載處理程序。

3.4 設備驅動、設備、總線的組織方式

設備驅動、設備、總線的組織方式最初只有一種方式,由設計者自行設計,也就是定義一種專用總線,而新的內核提供另一種組織方式,即平臺設備。對應的總線稱為平臺總線,由設計者提供一些私有參數,通過平臺設備結構體傳入探測函數實現設備的注冊和初始化。

3.4.1 專用總線

將相關的設備和驅動都掛載在專用總線上,這是傳統方式。像I2C、SPI等總線都提供了這種方式,它的一個特點就是專用性,可以做到高效簡潔,因為它負責專門的設備注冊、驅動注冊。多數設備都提供這種方式,課題的設計也提供了這種方式。

3.4.2 平臺總線

平臺總線是一種虛擬總線,相比于USB、PCI等專用總線,它主要用于描述片上資源,如LCD、看門狗等等,平臺設備所描述的資源有一個共同點——允許總線直接尋址。它需要分配一些特殊的資源,如中斷號、物理地址映射范圍等等。當有新的設備或驅動注冊時,內核會調用虛擬總線的探測函數,對分配到的資源進行初始化,注冊到內核,從本質上說,平臺設備只是標準設備一種擴展。課題在驗證設計的正確與否采用就是這種組織方式。

4 驗證

圖3是基于ARM920T平臺的外設連接方式,這里的驗證僅取兩條總線,每一條總線上掛載一個DS18B20[12]作為測試設備,在一個循環里每次輪流讀取溫度傳感器傳回的數據,并將其從二進制轉為十進制顯示(僅考慮正溫度的情況)。二進制小數的提取采用的是比較原始的辦法——查表法,因為DS18B20的小數只用4bit表示,也就是說只有16種取值,所以不會占用很大內存。

圖3 外設拓撲圖

得益于字符設備的統一接口,應用層的調用非常簡單,只需要打開設備,就可以讀寫數據。而在退出程序時,關閉設備是必須的,這樣才能釋放不用的資源。測試程序比較簡短,其主程序片段如下所示(注:未寫出出錯處理代碼):

下面是程序運行結果,總共有4個模塊需要加載,分別是核心模塊、底層接口模塊、設備接口模塊、外設注冊模塊。當運行test程序時,就啟動溫度轉換和采集,然后將采集的數據進行處理后打印到終端,溫度的單位為開爾文,如23.2500+273.15K,表示當前環境溫度為23.2500攝氏度。Sensor1、sensor2分別標識傳感器1和傳感器2,通過對比可以發現它們的采樣還是有零點幾度的偏差的。

[root@EmbedSkywlq1988]#insmod oneWire_core.ko.

[root@EmbedSkywlq1988]#insmod oneWire_s3c2440.ko.

[root@EmbedSkywlq1988]#insmod oneWire_dev.ko.

[root@EmbedSkywlq1988]#insmod oneWire_device.ko.

[root@EmbedSkywlq1988]#./test

ds18b20 test.

open success.

cureent temperature:sensor1:23.2500+273.15 K

cureent temperature:sensor1:23.3125+273.15 K

cureent temperature:sensor1:23.2500+273.15 K

cureent temperature:sensor2:23.3125+273.15 K

測試程序簡單地驗證了設計的正確性,這是兩條總線一對一的情況。通過簡單配置還可以實現掛載更多的設備,也就一對多,多對多的情況。

5 結語

課題實現了linux框架下的單總線控制器,整個設計利用linux內核的一些同步措施保障了系統運行的穩定性。同時,由于整個設計過程采用了分離、分層思想,所以,使用者只需對底層接口稍加修改即可實現移植,并將其嵌入到更多的嵌入式系統中,具有一定的實用意義。

[1]李正平,徐超,陳軍寧.Linux 2.6內核設備模型分析[J].計算機技術與發展,2007,17(3):141-143.

[2]劉軍衛,李曦,陳香蘭.用戶態驅動框架的研究與實現[J].計算機系統與應用,2011,20(11):67-71.

[3]馮國進.嵌入式Linux驅動程序設計從入門到精通[M].北京:清華大學出版社,2008:10-35.

[4]秦芹.一種基于DS18B2O的溫度采集新方案[J].電子技術設計與運用,2010,37(37):62-64.

[5]張會新,龔進,樊姣榮.分布式數字無線測溫系統[J].化工自動化及儀表,2011,38(12):1493-1495.

[6]任兵,任小洪,李國志.基于ARM-Linux的多路溫度采集系統的設計[J].工業控制計算,2011,24(11):44-45.

[7]陳聰慧,蘇偉達,蔡聲鎮.一種單總線接口時序分析儀的研制木[J].微計算機應用,2008,29(6):50-53.

[8]陳曦,呂湘曄,劉艷防.基于嵌入式Linux新型模塊化工業控制器設計[J].儀表技術與傳感器,2010(11):27-29.

[9]陳生翰,劉其洪,丁注.單總線數字溫度傳感器DS18B20自動識別的設計與實現[J].儀表技術與傳感器,2010(5):16-18.

[10]舒克毅,胡榮強.嵌人式Linux字符設備驅動程序設計[J].儀表技術,2010(2):4-8.

[11]張祖昌,曾夏夏.互斥技術在嵌人式系統中的應用[J].閩江學院學報,2007,28(5):68-71.

[12]陳志英,李光輝.單總線(1-Wire Bus)技術及其應用[J].國外電子元器件,2003(8):4-7.

Imp lementation of 1-W ire Interface Based on Linux Devicemodel

WANG Longqi,FAN Minghui*,CHEN Lihong
(Department of Physics and Information Engineering,Fuzhou University,Fuzhou Fujian 350000,China)

1-Wire Bus is a bus protocol which connects some sensors and low-speed devices with the host,such as the smart temperature sensor DS18B20,A/D chip,and so on.With the developmentof the internetof things,the application of these sensorswill becomemore widespread,but their interfaces are not closely linked with the kernel,the kernel can not unify themanagement,so stability and reliabilitymay not be guaranteed.In linewith the premise of the Linux kernel devicemodel,a stable 1-Wire interface is given.the controller will be divided into three parts,top-level device interface,the core layer and the underlying hardware interface;menuwhile the driver and the device,the top-level device interface and the specific hardware are seperated in operations.

the 1-Wwire bus;Linux;embedded system;stratification;separation

10.3969/j.issn.1005-9490.2014.01.025

TP316.2 文獻標識碼:A 文章編號:1005-9490(2014)01-0103-05

2013-04-11修改日期:2013-05-20

EEACC:6150M

王龍奇(1988-)男,碩士研究生,主要研究方向為嵌入式系統設計,393146277@ qq.com;

樊明輝(1974-),男,副研究員,博士,主要研究方向為計算機應用和地理信息系統,fanmh@fzu.edu.cn。

猜你喜歡
用戶設備設計
諧響應分析在設備減振中的應用
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
如何獲取一億海外用戶
創業家(2015年5期)2015-02-27 07:53:25
主站蜘蛛池模板: 成人在线第一页| 国产你懂得| 她的性爱视频| 亚洲香蕉在线| 国产免费一级精品视频| 丁香五月亚洲综合在线| 色综合天天综合中文网| 国产精品亚洲一区二区三区在线观看| 国产成人精品18| 欧美日韩一区二区在线免费观看 | 国产SUV精品一区二区| 自慰网址在线观看| 国产精品毛片一区视频播 | 亚洲一本大道在线| 欧美一区福利| 亚洲bt欧美bt精品| 国产av无码日韩av无码网站 | 国产精品七七在线播放| 美女被操91视频| 欧美三级视频网站| 尤物视频一区| 欧美一区二区三区欧美日韩亚洲 | 97青草最新免费精品视频| 免费午夜无码18禁无码影院| 久久九九热视频| 国产精品三级专区| 国产人妖视频一区在线观看| 黄色国产在线| 91精品国产自产91精品资源| 在线观看精品自拍视频| 蜜臀AVWWW国产天堂| 无码'专区第一页| 激情成人综合网| av尤物免费在线观看| 久久国产免费观看| 91久久大香线蕉| 国产成人精品一区二区不卡| 九九九久久国产精品| 丁香五月婷婷激情基地| 中国一级毛片免费观看| 四虎永久免费在线| 亚洲天堂久久新| 色婷婷天天综合在线| 成人国产精品网站在线看| 亚洲国产欧美国产综合久久 | 国产高清不卡视频| 欧美激情视频二区三区| 欧美亚洲国产精品久久蜜芽| 黄色网站不卡无码| 国产成人在线无码免费视频| 国产精品福利在线观看无码卡| 伦精品一区二区三区视频| AV网站中文| 国产精品2| 亚洲国产午夜精华无码福利| 99一级毛片| www.亚洲色图.com| 中文字幕av无码不卡免费| 波多野结衣视频网站| 国产丝袜第一页| 久久精品免费看一| 精品久久人人爽人人玩人人妻| 高清无码一本到东京热| 国产另类视频| 久久婷婷综合色一区二区| 丁香六月综合网| 久久综合九九亚洲一区| 亚洲首页国产精品丝袜| 亚洲最新在线| 国产在线精品人成导航| 国产欧美日韩视频怡春院| 青青热久免费精品视频6| 欧美亚洲另类在线观看| 国内熟女少妇一线天| 久久综合激情网| 狠狠色噜噜狠狠狠狠奇米777 | 日韩精品一区二区三区大桥未久| 成年看免费观看视频拍拍| 一本久道热中字伊人| 国产综合欧美| 国产免费久久精品44| 日韩在线影院|