www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

《嵌入式Linux初級(jí)實(shí)驗(yàn)s3c2410》

設(shè)備驅(qū)動(dòng)開發(fā)=硬件控制+內(nèi)核API+內(nèi)核驅(qū)動(dòng)框架

1.設(shè)備驅(qū)動(dòng)和操作系統(tǒng)

1.1無操作系統(tǒng)時(shí)的設(shè)備驅(qū)動(dòng)

在沒有操作系統(tǒng)的情況下,設(shè)備驅(qū)動(dòng)的接口直接提交給應(yīng)用軟件工程師,應(yīng)用軟件沒有跨越任何層次就可以直接訪問設(shè)備驅(qū)動(dòng)的接口。驅(qū)動(dòng)包含的接口函數(shù)也與硬件的功能直接吻合,沒有任何附加功能。

1.2有操作系統(tǒng)時(shí)的設(shè)備驅(qū)動(dòng)

沒有操作系統(tǒng)時(shí),設(shè)備驅(qū)動(dòng)直接被應(yīng)用程序調(diào)用,不與任何操作系統(tǒng)關(guān)聯(lián)。當(dāng)系統(tǒng)中包含操作系統(tǒng)后,設(shè)備驅(qū)動(dòng)會(huì)變得怎樣?

首先,無操作系統(tǒng)時(shí)設(shè)備驅(qū)動(dòng)的硬件操作仍然是必不可少的,沒有這一部分,設(shè)備驅(qū)動(dòng)不可能與硬件打交道,也就是說在無操作系統(tǒng)時(shí)驅(qū)動(dòng)所做的工作,在有操作系統(tǒng)時(shí)也是要做的。

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

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

2. Linux設(shè)備驅(qū)動(dòng)

2.1 Linux設(shè)備的分類及特點(diǎn)

驅(qū)動(dòng)針對(duì)的對(duì)象是存儲(chǔ)器和外設(shè)(包括CPU內(nèi)部集成的存儲(chǔ)器和外設(shè)),而不是針對(duì)CPU核。Linux系統(tǒng)中將存儲(chǔ)器和外設(shè)分為3個(gè)基礎(chǔ)大類:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。

2.1.1字符設(shè)備

概括的講,字符設(shè)備指那些必須以串行順序依次進(jìn)行訪問的設(shè)備,如觸摸屏、磁帶驅(qū)動(dòng)器、鼠標(biāo)等。字符設(shè)備是一種可以當(dāng)作一個(gè)字節(jié)流來存取的設(shè)備,字符驅(qū)動(dòng)就負(fù)責(zé)實(shí)現(xiàn)這種行為。這樣的驅(qū)動(dòng)常常至少實(shí)現(xiàn)open,close,read,和write系統(tǒng)調(diào)用。字符驅(qū)動(dòng)很好地展

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

2.1.2塊設(shè)備

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

2.1.3網(wǎng)絡(luò)設(shè)備

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

既然網(wǎng)絡(luò)設(shè)備不是一個(gè)面向流的設(shè)備,一個(gè)網(wǎng)絡(luò)接口就不象字符設(shè)備、塊設(shè)備那么容易映射到文件系統(tǒng)的一個(gè)結(jié)點(diǎn)上。Linux提供的對(duì)網(wǎng)絡(luò)設(shè)備的存取方式仍然是通過給它們分配一個(gè)名字,但是這個(gè)名字在文件系統(tǒng)中沒有對(duì)應(yīng)的入口,其并不用read和write等函數(shù),而是通過內(nèi)核調(diào)用和報(bào)文傳遞相關(guān)的函數(shù)來實(shí)現(xiàn)。

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

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

2.2不同設(shè)備的驅(qū)動(dòng)設(shè)計(jì)概述

上述的三類設(shè)備,除了網(wǎng)絡(luò)設(shè)備外,字符設(shè)備與塊設(shè)備都被映射到Linux文件系統(tǒng)的文件和目錄,通過文件系統(tǒng)的系統(tǒng)調(diào)用接口open()、write()、read()、close()等函數(shù)訪問。塊設(shè)備比字符設(shè)備復(fù)雜,在它上面會(huì)有一個(gè)磁盤/Flash文件系統(tǒng),該文件系統(tǒng)對(duì)存儲(chǔ)介質(zhì)上的文件和目錄進(jìn)行規(guī)范化的組織。

2.2.1字符設(shè)備驅(qū)動(dòng)

Linux字符設(shè)備驅(qū)動(dòng)的核心是file_operations結(jié)構(gòu)體,驅(qū)動(dòng)的主體是實(shí)現(xiàn)其中的read()、write()、ioctl()、open()、release()等方法,這些方法將完成系統(tǒng)需要對(duì)設(shè)備進(jìn)行的操作功能。

其結(jié)構(gòu)形式如下所示:

struct file_operations xxx_fops =

{

.owner = THIS_MODULE,

.read = xxx_read,

.write = xxx_write,

.ioctl = xxx_ioctl,

...

}

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

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

read()和write()方法:read方法完成將數(shù)據(jù)從內(nèi)核拷貝到應(yīng)用程序空間,write方法相反,將數(shù)據(jù)從應(yīng)用程序空間拷貝到內(nèi)核。

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

2.2.2塊設(shè)備驅(qū)動(dòng)

Linux塊設(shè)備驅(qū)動(dòng)并不直接實(shí)現(xiàn)file_operations成員函數(shù),其主體變成處理實(shí)現(xiàn)block_device_operations成員函數(shù)以及處理上層下達(dá)的I/O請(qǐng)求。block_device_operations結(jié)構(gòu)體中包含了ioctl()、open()、release()方法,因?yàn)樽址O(shè)備和塊設(shè)備的存取方法不同,其I/O處理請(qǐng)求可以看作是塊設(shè)備中的read()和write()方法。塊設(shè)備調(diào)用函數(shù)block_read( )和block_write( )來進(jìn)行數(shù)據(jù)讀寫,這兩個(gè)函數(shù)將向設(shè)備請(qǐng)求表中

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

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

關(guān)鍵字: 驅(qū)動(dòng)電源

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

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

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

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

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

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

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

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

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

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

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

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

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

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉