日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]《嵌入式Linux初級實驗s3c2410》設備驅動開發(fā)=硬件控制+內核API+內核驅動框架1.設備驅動和操作系統1.1無操作系統時的設備驅動在沒有操作系統的情況下,設備驅動的接口直接提交給應用軟件工程師,應用軟件沒有跨越

《嵌入式Linux初級實驗s3c2410》

設備驅動開發(fā)=硬件控制+內核API+內核驅動框架

1.設備驅動和操作系統

1.1無操作系統時的設備驅動

在沒有操作系統的情況下,設備驅動的接口直接提交給應用軟件工程師,應用軟件沒有跨越任何層次就可以直接訪問設備驅動的接口。驅動包含的接口函數也與硬件的功能直接吻合,沒有任何附加功能。

1.2有操作系統時的設備驅動

沒有操作系統時,設備驅動直接被應用程序調用,不與任何操作系統關聯。當系統中包含操作系統后,設備驅動會變得怎樣?

首先,無操作系統時設備驅動的硬件操作仍然是必不可少的,沒有這一部分,設備驅動不可能與硬件打交道,也就是說在無操作系統時驅動所做的工作,在有操作系統時也是要做的。

其次,我們還需要將設備驅動融入操作系統內核。應用程序是通過調用操作系統的API來實現對硬件的操作的,所以設備驅動需要融入到內核中。為了實現這種融合,必須在所有的設備驅動中設計面向操作系統內核的接口,這樣的接口由操作系統規(guī)定,對一類設備而言結構一致,獨立于具體的設備。不同的操作系統中定義的設備驅動架構是不一樣的,要將設備驅動融入系統內核中,就需要按照操作系統給出的獨立于設備的接口架構設計,如此這般,應用程序就可以使用統一的系統調用接口來訪問各種設備。其中內核的API包括并發(fā)/同步控制、阻塞/喚醒、中斷底半部調度、內存和I/O訪問等。

由此可見,當系統中存在操作系統時,設備驅動變成了鏈接硬件和內核的橋梁,操作系統的存在使得單一的“驅動硬件設備工作”變?yōu)椴僮飨到y與硬件交互的模塊,它對外呈現為操作系統API,不再給應用軟件工程師直接提供接口。因此,驅動工程師不僅需要牢固的硬件基礎,如硬件的工作原理、寄存器設置等,還需要對驅動中所涉及的內核知識有良好的掌握,包括內核支持的API、內核驅動架構等,才能設計開發(fā)出好的設備驅動程序。也就是說設備驅動從無操作系統時的應用程序和硬件設備之間的橋梁轉變成操作系統和硬件設備之間的溝通紐帶。

2. Linux設備驅動

2.1 Linux設備的分類及特點

驅動針對的對象是存儲器和外設(包括CPU內部集成的存儲器和外設),而不是針對CPU核。Linux系統中將存儲器和外設分為3個基礎大類:字符設備、塊設備和網絡設備。

2.1.1字符設備

概括的講,字符設備指那些必須以串行順序依次進行訪問的設備,如觸摸屏、磁帶驅動器、鼠標等。字符設備是一種可以當作一個字節(jié)流來存取的設備,字符驅動就負責實現這種行為。這樣的驅動常常至少實現open,close,read,和write系統調用。字符驅動很好地展

現了流的抽象,它通過文件系統結點來存取,也就是說,字符設備被當作普通文件來訪問。字符設備和普通文件之間唯一的不同就是:你可以在普通文件中移來移去,但是大部分字符設備僅僅是數據通道,你只能順序存取。然而,也存在看起來象數據區(qū)的字符設備,你可以在里面移來移去的訪問數據。例如,frame grabber經常這樣,應用程序可以使用mmap或者lseek存取整個要求的圖像。

2.1.2塊設備

塊設備是可以用任意順序訪問,以塊為單位進行操作,如硬盤、軟驅等。一般來說,塊設備和字符設備并沒有明顯的界限。如同字符設備,塊設備也是通過文件系統結點進行存取。一個塊設備是可以駐有一個文件系統的。Linux系統中允許應用程序讀寫一個塊設備象一個字符設備一樣,它允許一次傳送任意數目的字節(jié),當然也包括一個字節(jié)。塊和字符設備的區(qū)別僅僅在內核在內部管理數據的方式上,如字符設備不經過系統的快速緩沖,而塊設備經過系統的快速緩沖,并且在內核/驅動的軟件接口上不同。雖然它們之間的區(qū)別對用戶是透明的,它們都使用文件系統的操作接口open()、close()、read()、write()等函數進行訪問,但是它們的驅動設計存在很大的差異。

2.1.3網絡設備

網絡設備是面向數據包的接收和發(fā)送而設計的,它與字符設備、塊設備不同,并不對應于文件系統中的節(jié)點。內核與網絡設備的通信和內核與字符設備、塊設備的通信方式可以說是完全不同的。任何網絡事務都通過一個接口來進行,就是說,一個能夠與其他主機交換數據的設備。通常,一個接口是一個硬件設備,但是它也可能是一個純粹的軟件設備,比如環(huán)回接口,因此網絡設備也可以稱為網絡接口。在內核網絡子系統的驅動下,網絡設備負責發(fā)送和接收數據報文。網絡驅動對單個連接一無所知,它只處理報文。

既然網絡設備不是一個面向流的設備,一個網絡接口就不象字符設備、塊設備那么容易映射到文件系統的一個結點上。Linux提供的對網絡設備的存取方式仍然是通過給它們分配一個名字,但是這個名字在文件系統中沒有對應的入口,其并不用read和write等函數,而是通過內核調用和報文傳遞相關的函數來實現。

近年來,某些設備驅動類別也已經添加到Linux內核中,如FireWire驅動。與內核處理USB和SCSI驅動相同的方式,內核開發(fā)者集合了類別范圍內的特性,并把它們輸出給驅動實現者,以避免重復工作,因此簡化和加強了編寫類似驅動的過程。

除了上面對設備的分類的方式之外,還有其他的劃分方式,與上面的設備類型是正交的。通常,某些類型的驅動與給定類型設備其他層的內核支持函數一起工作。例如,你可以說USB模塊,串口模塊,SCSI模塊等等。每個USB設備由一個USB模塊驅動,與USB子系統一起工作,但是設備自身在系統中表現為一個字符設備(比如一個USB串口),一個塊設備(一個USB內存讀卡器),或者一個網絡設備(一個USB以太網接口)。

2.2不同設備的驅動設計概述

上述的三類設備,除了網絡設備外,字符設備與塊設備都被映射到Linux文件系統的文件和目錄,通過文件系統的系統調用接口open()、write()、read()、close()等函數訪問。塊設備比字符設備復雜,在它上面會有一個磁盤/Flash文件系統,該文件系統對存儲介質上的文件和目錄進行規(guī)范化的組織。

2.2.1字符設備驅動

Linux字符設備驅動的核心是file_operations結構體,驅動的主體是實現其中的read()、write()、ioctl()、open()、release()等方法,這些方法將完成系統需要對設備進行的操作功能。

其結構形式如下所示:

struct file_operations xxx_fops =

{

.owner = THIS_MODULE,

.read = xxx_read,

.write = xxx_write,

.ioctl = xxx_ioctl,

...

}

open()方法:該方法提供給驅動程序初始化設備的能力,從而為以后的設備操作做好準備,主要完成如下工作:檢查設備特定的錯誤(例如設備沒準備好,或者類似的硬件錯誤);如果它第一次打開,初始化設備;如果需要,更新file_operations指針;分配并填充要放進filp->private_data的任何數據結構等。此外open操作一般還會遞增使用計數,用以防止文件關閉前模塊被卸載出內核。

release()方法:與open方法相反,它主要是釋放由open分配的filp->private_data中的所有內容;在最后一次關閉操作時關閉設備;使用計數減1等操作。

read()和write()方法:read方法完成將數據從內核拷貝到應用程序空間,write方法相反,將數據從應用程序空間拷貝到內核。

ioctl()方法:ioctl方法主要用于對設備進行讀寫之外的其他控制,比如配置設備、進入或退出某種操作模式,這些操作一般都無法通過read/write文件操作來完成。

2.2.2塊設備驅動

Linux塊設備驅動并不直接實現file_operations成員函數,其主體變成處理實現block_device_operations成員函數以及處理上層下達的I/O請求。block_device_operations結構體中包含了ioctl()、open()、release()方法,因為字符設備和塊設備的存取方法不同,其I/O處理請求可以看作是塊設備中的read()和write()方法。塊設備調用函數block_read( )和block_write( )來進行數據讀寫,這兩個函數將向設備請求表中

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統,而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉