當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]操作系統(tǒng)是通過各種驅動程序來駕馭硬件設備的,它為用戶屏蔽了各種各樣的設備,驅動硬件是操作系統(tǒng)最基本的功能,并且提供統(tǒng)一的操作方式。設備驅動程序是內核的一部分,硬件驅動程序是操作系統(tǒng)最基本的組成部分,在Linux內核源程序中也占有60%以上。因此,熟悉驅動的編寫是很重要的。

11.1設備驅動概述11.1.1設備驅動簡介及驅動模塊

操作系統(tǒng)是通過各種驅動程序來駕馭硬件設備的,它為用戶屏蔽了各種各樣的設備,驅動硬件是操作系統(tǒng)最基本的功能,并且提供統(tǒng)一的操作方式。設備驅動程序是內核的一部分,硬件驅動程序是操作系統(tǒng)最基本的組成部分,在Linux內核源程序中也占有60%以上。因此,熟悉驅動的編寫是很重要的。

在第2章中已經提到過,Linux內核中采用可加載的模塊化設計(LKMs,LoadableKernelModules),一般情況下編譯的Linux內核是支持可插入式模塊的,也就是將最基本的核心代碼編譯在內核中,其他的代碼可以編譯到內核中,或者編譯為內核的模塊文件(在需要時動態(tài)加載)。

常見的驅動程序是作為內核模塊動態(tài)加載的,比如聲卡驅動和網卡驅動等,而Linux最基礎的驅動,如CPU、PCI總線、TCP/IP協(xié)議、APM(高級電源管理)、VFS等驅動程序則直接編譯在內核文件中。有時也把內核模塊叫做驅動程序,只不過驅動的內容不一定是硬件罷了,比如ext3文件系統(tǒng)的驅動。因此,加載驅動就是加載內核模塊。

這里,首先列舉一些模塊相關的命令。

n lsmod列出當前系統(tǒng)中加載的模塊,其中左邊第一列是模塊名,第二列是該模塊大小,第三列則是使用該模塊的對象數(shù)目。如下所示:

$lsmod

ModuleSizeUsedby

Autofs120680(autoclean)(unused)

eepro100181281

iptable_nat 192520(autoclean)(unused)

ip_conntrack185401(autoclean)[iptable_nat]

iptable_mangle22720(autoclean)(unused)

iptable_filter22720(autoclean)(unused)

ip_tables119365[iptable_natiptable_mangleiptable_filter]

usb-ohci193280(unused)

usbcore545281[usb-ohci]

ext3677282

jbd444802[ext3]

aic7xxx1147043

sd_mod115843

scsi_mod985122[aic7xxxsd_mod]

n rmmod是用于將當前模塊卸載。

n insmod和modprobe是用于加載當前模塊,但insmod不會自動解決依存關系,即如果要加載的模塊引用了當前內核符號表中不存在的符號,則無法加載,也不會去查在其他尚未加載的模塊中是否定義了該符號;modprobe可以根據模塊間依存關系以及/etc/modules.conf文件中的內容自動加載其他有依賴關系的模塊。

11.1.2設備分類

本書在前面也提到過,Linux的一個重要特點就是將所有的設備都當做文件進行處理,這一類特殊文件就是設備文件,它們可以使用前面提到的文件、I/O相關函數(shù)進行操作,這樣就大大方便了對設備的處理。它通常在/dev下面存在一個對應的邏輯設備節(jié)點,這個節(jié)點以文件的形式存在。

Linux系統(tǒng)的設備分為3類:字符設備、塊設備和網絡設備。

n 字符設備通常指像普通文件或字節(jié)流一樣,以字節(jié)為單位順序讀寫的設備,如并口設備、虛擬控制臺等。字符設備可以通過設備文件節(jié)點訪問,它與普通文件之間的區(qū)別在于普通文件可以被隨機訪問(可以前后移動訪問指針),而大多數(shù)字符設備只能提供順序訪問,因為對它們的訪問不會被系統(tǒng)所緩存。但也有例外,例如幀緩存(framebuffer)是一個可以被隨機訪問的字符設備。

n 塊設備通常指一些需要以塊為單位隨機讀寫的設備,如IDE硬盤、SCSI硬盤、光驅等。塊設備也是通過文件節(jié)點來訪問,它不僅可以提供隨機訪問,而且可以容納文件系統(tǒng)(例如硬盤、閃存等)。Linux可以使用戶態(tài)程序像訪問字符設備一樣每次進行任意字節(jié)的操作,只是在內核態(tài)內部中的管理方式和內核提供的驅動接口上不同。

通過文件屬性可以查看它們是哪種設備文件(字符設備文件或塊設備文件)。

$ls–l/dev

crw-rw----1rootuucp4,6408-3022:58ttyS0/*串口設備,c表示字符設備*/

brw-r-----1rootfloppy2,008-3022:58fd0/*軟盤設備,b表示塊設備*/

n 網絡設備通常是指通過網絡能夠與其他主機進行數(shù)據通信的設備,如網卡等。

內核和網絡設備驅動程序之間的通信調用一套數(shù)據包處理函數(shù),它們完全不同于內核和字符以及塊設備驅動程序之間的通信(read()、write()等函數(shù))。Linux網絡設備不是面向流的設備,因此不會將網絡設備的名字(例如eth0)映射到文件系統(tǒng)中去。

對這3種設備文件編寫驅動程序時會有一定的區(qū)別,本書在后面會有相關內容的講解。

11.1.3設備號

設備號是一個數(shù)字,它是設備的標志。就如前面所述,一個設備文件(也就是設備節(jié)點)可以通過mknod命令來創(chuàng)建,其中指定了主設備號和次設備號。主設備號表明設備的類型(例如串口設備、SCSI硬盤),與一個確定的驅動程序對應;次設備號通常是用于標明不同的屬性,例如不同的使用方法、不同的位置、不同的操作等,它標志著某個具體的物理設備。高字節(jié)為主設備號,底字節(jié)為次設備號。

例如,在系統(tǒng)中的塊設備IDE硬盤的主設備號是3,而多個IDE硬盤及其各個分區(qū)分別賦予次設備號1、2、3…

$ls–l/dev

crw-rw----1rootuucp4,6408-3022:58ttyS0/*主設備號4,此設備號64*/

11.1.4驅動層次結構

Linux下的設備驅動程序是內核的一部分,運行在內核模式下,也就是說設備驅動程序為內核提供了一個I/O接口,用戶使用這個接口實現(xiàn)對設備的操作。圖11.1顯示了典型的Linux輸入/輸出系統(tǒng)中各層次結構和功能。

圖11.1Linux輸入/輸出系統(tǒng)


層次結構和功能

Linux設備驅動程序包含中斷處理程序和設備服務子程序兩部分。

設備服務子程序包含了所有與設備操作相關的處理代碼。它從面向用戶進程的設備文件系統(tǒng)中接受用戶命令,并對設備控制器執(zhí)行操作。這樣,設備驅動程序屏蔽了設備的特殊性,使用戶可以像對待文件一樣操作設備。

設備控制器獲得系統(tǒng)服務有兩種方式:查詢和中斷。因為Linux的設備驅動程序是內核的一部分,在設備查詢期間系統(tǒng)不能運行其他代碼,查詢方式的工作效率比較低,所以只有少數(shù)設備如軟盤驅動程序采取這種方式,大多設備以中斷方式向設備驅動程序發(fā)出輸入/輸出請求。

11.1.5設備驅動程序與外界的接口

每種類型的驅動程序,不管是字符設備還是塊設備都為內核提供相同的調用接口,因此內核能以相同的方式處理不同的設備。Linux為每種不同類型的設備驅動程序維護相應的數(shù)據結構,以便定義統(tǒng)一的接口并實現(xiàn)驅動程序的可裝載性和動態(tài)性。Linux設備驅動程序與外界的接口可以分為如下3個部分。

n 驅動程序與操作系統(tǒng)內核的接口:這是通過數(shù)據結構file_operations(在本書后面會有詳細介紹)來完成的。

n 驅動程序與系統(tǒng)引導的接口:這部分利用驅動程序對設備進行初始化。

n 驅動程序與設備的接口:這部分描述了驅動程序如何與設備進行交互,這與具體設備密切相關。

它們之間的相互關系如圖11.2所示。

圖11.2設備驅動程序與外界的接口

11.1.6設備驅動程序的特點

綜上所述,Linux中的設備驅動程序有如下特點。

(1)內核代碼:設備驅動程序是內核的一部分,如果驅動程序出錯,則可能導致系統(tǒng)崩潰。

(2)內核接口:設備驅動程序必須為內核或者其子系統(tǒng)提供一個標準接口。比如,一個終端驅動程序必須為內核提供一個文件I/O接口;一個SCSI設備驅動程序應該為SCSI子系統(tǒng)提供一個SCSI設備接口,同時SCSI子系統(tǒng)也必須為內核提供文件的I/O接口及緩沖區(qū)。

(3)內核機制和服務:設備驅動程序使用一些標準的內核服務,如內存分配等。

(4)可裝載:大多數(shù)的Linux操作系統(tǒng)設備驅動程序都可以在需要時裝載進內核,在不需要時從內核中卸載。

(5)可設置:Linux操作系統(tǒng)設備驅動程序可以集成為內核的一部分,并可以根據需要把其中的某一部分集成到內核中,這只需要在系統(tǒng)編譯時進行相應的設置即可。

(6)動態(tài)性:在系統(tǒng)啟動且各個設備驅動程序初始化后,驅動程序將維護其控制的設備。如果該設備驅動程序控制的設備不存在也不影響系統(tǒng)的運行,那么此時的設備驅動程序只是多占用了一點系統(tǒng)內存罷了。

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

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉