《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實踐》課件第12章_第1頁
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實踐》課件第12章_第2頁
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實踐》課件第12章_第3頁
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實踐》課件第12章_第4頁
《基于ARM9的嵌入式Linux系統(tǒng)開發(fā)原理與實踐》課件第12章_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第12章USB驅(qū)動程序開發(fā)12.1USB簡介12.2LinuxUSB子系統(tǒng)12.3USB客戶端驅(qū)動程序架構(gòu)和開發(fā)12.4在Linux內(nèi)核中加入USB模塊12.5USB驅(qū)動程序開發(fā)實例本章小結(jié)

12.1USB簡介

12.1.1USB

計算機(jī)技術(shù)與通信技術(shù)的結(jié)合將是下一代生產(chǎn)力的基礎(chǔ)。人們總是希望能通過方便且廉價的方法把信息從一個地方傳輸?shù)搅硪粋€地方,不幸的是計算機(jī)技術(shù)與通信技術(shù)最初是沿著各自的發(fā)展軌跡前進(jìn)的。?USB(UniversalSerialBus)是主機(jī)和外圍設(shè)備之間的一種連接技術(shù),技術(shù)最初的目的正是希望能實現(xiàn)兩者的有機(jī)結(jié)合而提出來的。12.1.2USB的結(jié)構(gòu)及傳輸方式

1.?USB的結(jié)構(gòu)

USB規(guī)范將USB分為以下五個部分:

(1)控制器:主要負(fù)責(zé)執(zhí)行由控制器驅(qū)動程序發(fā)出的命令。

(2)控制器驅(qū)動程序:在控制器與USB設(shè)備之間建立通信信道。

(3)?USB芯片驅(qū)動程序:提供對USB的支持。

(4)?USB設(shè)備:包括與PC相連的USB外圍設(shè)備。分為兩類:一類設(shè)備本身可再接其他USB外圍設(shè)備;另一類設(shè)備本身不可再連接其他外圍設(shè)備。前者稱為USB集線器(USBHUB),后者稱為設(shè)備?;蛘哒f,集線器帶有連接其他外圍設(shè)備的USB端口,而設(shè)備則是連接在計算機(jī)上用來完成特定功能并符合USB規(guī)范的設(shè)備單元,如鼠標(biāo)、鍵盤等。

(5)設(shè)備驅(qū)動程序:就是用來驅(qū)動USB設(shè)備的程序,通常由操作系統(tǒng)或USB設(shè)備制造商提供,如平常所說Modem驅(qū)動程序、打印機(jī)驅(qū)動程序等。

2.?USB的傳輸方式

針對設(shè)備對系統(tǒng)資源需求的不同,在USB規(guī)范中規(guī)定了四種不同的數(shù)據(jù)傳輸方式:

(1)等時傳輸方式。

(2)中斷傳輸方式。

(3)控制傳輸方式。

(4)批傳輸方式。12.1.3USB設(shè)備的使用

要使用USB設(shè)備,首先要求主板具有支持USB設(shè)備的功能,其次要求操作系統(tǒng)支持USB設(shè)備。12.1.4USB的優(yōu)勢

USB之所以能得到廣泛支持和迅速的普及,是因為其具備如下一些優(yōu)點:

1.?USB的即插即用

USB的即插即用充分體現(xiàn)了易用性。USB的協(xié)議從硬件層上支持USB設(shè)備帶電接入,即熱插拔,在軟件層上實現(xiàn)了自動配置。這樣,在操作系統(tǒng)(Windows,Linux)工作的情況下就可以接入或拔出USB設(shè)備,而不用重新啟動PC。此外,當(dāng)設(shè)備第一次接入到PC時,系統(tǒng)可以自動檢測到設(shè)備的接入,并自動加載設(shè)備的驅(qū)動,對于系統(tǒng)不默認(rèn)支持的設(shè)備,用戶也只是需要為操作系統(tǒng)提供驅(qū)動,因此使用起來很方便。

2.可選擇的多種速度模式

USB提供了低速、全速、高速三種速度模式,分別為1.5Mb/s、12Mb/s和480Mb/s。用戶可以在性能和價格上做各種選擇。

3.完備的總線拓?fù)浣Y(jié)構(gòu)

USB的拓?fù)溥B接結(jié)構(gòu)是一種和串口并口不同的層次化結(jié)構(gòu)。整個結(jié)構(gòu)由三種元素組成:主機(jī)、集線器和設(shè)備。HUB是每個星形結(jié)構(gòu)的中心,用來連接主機(jī)和設(shè)備。USBl.1規(guī)范,一個USB拓?fù)渚W(wǎng)絡(luò)能支持4個HUB以及127個外部設(shè)備。在USB2.0中對HUB層的支持已經(jīng)達(dá)到了6層連帶最后一級的設(shè)備層共7層。如圖12-1所示。圖12-1USB的連接結(jié)構(gòu)

4.多種設(shè)備子類

USB協(xié)議對外部設(shè)備進(jìn)行了標(biāo)準(zhǔn)化,包括底層的物理和電器特性,上層的軟件協(xié)議、數(shù)據(jù)通訊等。根據(jù)設(shè)備完成的功能不同,設(shè)備被劃分為不同的子類:如大規(guī)模存儲類包括常見的U盤;人機(jī)接口設(shè)備類包括鼠標(biāo)、鍵盤等與人的交互較多的設(shè)備;音頻、視頻設(shè)備類;打印機(jī)類和圖像設(shè)備類等。圖12-2USB系統(tǒng)構(gòu)成

12.2LinuxUSB子系統(tǒng)

在Linux中,通過USB子系統(tǒng)或稱USB內(nèi)核來實現(xiàn)與USB設(shè)備的接口。這個USB內(nèi)核包括兩方面的功能:管理USB總線,使USB控制器符合openHCI和UHCI協(xié)議;為用戶設(shè)備驅(qū)動程序提供一個方便的接口與相應(yīng)的USB外設(shè)進(jìn)行數(shù)據(jù)交換。圖12-3描述了USB內(nèi)核在Linux系統(tǒng)中的地位。

LinuxUSB子系統(tǒng)的結(jié)構(gòu)分為三個層次。USBD層為USB內(nèi)核,內(nèi)核分別為客戶端驅(qū)動程序?qū)雍椭鳈C(jī)控制器驅(qū)動程序?qū)犹峁┮惶缀瘮?shù)集,這樣可以更好地擴(kuò)展客戶端驅(qū)動程序和主機(jī)控制器程序,如圖12-3所示。圖12-3LinuxUSB子系統(tǒng)結(jié)構(gòu)12.2.1文件系統(tǒng)

Linux下USB相關(guān)文件系統(tǒng)由文件devices.c、drivers.c、devio.c和inode.c組成。

devices.c:主要為應(yīng)用者提供一個可以觀看當(dāng)前系統(tǒng)所有USB設(shè)備和連接情況的窗口。

drivers.c:為應(yīng)用提供了一個觀看客戶端驅(qū)動程序的窗口,通過它可以了解到目前系統(tǒng)中每一個客戶端驅(qū)動程序的名稱和所能分配的從設(shè)備號。

devio.c:為用戶空間提供設(shè)備的函數(shù)調(diào)用接口。

inode.c:主要為設(shè)備創(chuàng)建節(jié)點,維護(hù)計算機(jī)上的USB系統(tǒng)等操作。12.2.2USB驅(qū)動程序(USBD)

Linux下USBD主要由文件USB.c和USB.h組成。

USBD主要負(fù)責(zé)為客戶端驅(qū)動程序?qū)雍椭鳈C(jī)控制器驅(qū)動程序?qū)犹峁┙涌诤瘮?shù),使系統(tǒng)層次分明。另外,它還負(fù)責(zé)維護(hù)設(shè)備的加載和卸載、設(shè)備配置、客戶端驅(qū)動程序的安裝和卸載等操作。12.2.3主機(jī)控制器驅(qū)動程序(hcd)

Linux下hcd主要由文件USB-uhci.h、USB-uhci.c、USB-ohci.h和USB-ohci.c組成。Linux提供兩種主機(jī)控制器驅(qū)動程序:OHCI、UHCI。這也是目前通用性最好并形成規(guī)范的兩種主機(jī)控制器驅(qū)動程序。12.2.4客戶端驅(qū)動程序

當(dāng)前Linux支持諸多的USB設(shè)備類驅(qū)動程序,如HID類、打印機(jī)類、語音類、存儲設(shè)備類等。USB客戶端驅(qū)動程序的作用相當(dāng)于普通設(shè)備的驅(qū)動程序,但是由于系統(tǒng)提供USBD和HCD兩層協(xié)議,既簡化驅(qū)動程序軟件通訊協(xié)議的復(fù)雜度,又使它與硬件的操作隔離開,簡化了和設(shè)備的通信工作。另外,客戶端驅(qū)動程序?qū)?yīng)USB設(shè)備的接口,而不是整個設(shè)備,如果設(shè)備有多個接口,那么可被多個不同的客戶端驅(qū)動程序所驅(qū)動。由于不和硬件直接打交道,因此驅(qū)動程序還避免了中斷處理的工作??傊?,客戶端驅(qū)動程序編寫簡化、易于開發(fā),也是USB設(shè)備得到廣泛應(yīng)用的原因。

12.3USB客戶端驅(qū)動程序架構(gòu)和開發(fā)

12.3.1USB的協(xié)議規(guī)范初識

在USB的協(xié)議規(guī)范中,USB能夠自動監(jiān)測設(shè)備,并調(diào)用相應(yīng)的驅(qū)動程序處理設(shè)備,其規(guī)范是相當(dāng)復(fù)雜的,讀者可以不去理解大部分細(xì)節(jié)實現(xiàn)問題,因為Linux已經(jīng)提供相應(yīng)的解決方案。圖12-4LinuxUSB設(shè)置圖12.3.2Linux的USB驅(qū)動框架

Linux的設(shè)備驅(qū)動,特別是熱插拔(hotplug)的USB設(shè)備驅(qū)動,會被編譯成模塊,然后在需要時掛載到內(nèi)核。

Linux的驅(qū)動框架為usb-skeleton.c。其源碼可以在linux-2.6.14/drivers/usb下找到,其他版本的內(nèi)核程序源碼可能有所不同,但相差不大。

12.4在Linux內(nèi)核中加入USB模塊

12.4.1配置文件

USB作為一個驅(qū)動層,在內(nèi)核代碼中是很獨立的一個模塊,在往內(nèi)核中添加USB的支持時,需要改動控制這部分代碼編譯連接的文件。12.4.2調(diào)試

Linux2.6內(nèi)核對設(shè)備模型作了很大的改進(jìn),內(nèi)核對設(shè)備的感知通過device數(shù)據(jù)結(jié)構(gòu),內(nèi)核對驅(qū)動的感知是通過device_driver數(shù)據(jù)結(jié)構(gòu)。

12.5USB驅(qū)動程序開發(fā)實例

12.5.1S3C2410與USB模塊的連接電路

USBHUB,將2410的USBHOST擴(kuò)展為4口,芯片為AT43301。電源管理的總電流限制為500mA,采用總線供電模式,芯片為MIC2525-2。過流后,MIC2525會改變電平告知AT43301,然后AT43301發(fā)出信號使MIC2525關(guān)斷,同時會向處理器發(fā)送信息,可參考AT43301USBHUB文檔。電路連接圖如圖12-5所示。圖12-5S3C2410與USB模塊的連接電路12.5.2制作新的根文件系統(tǒng)

在第9章制作的根文件系統(tǒng)中沒有proc和mnt等目錄,在本章添加了proc和mnt,詳細(xì)制作過程可參見第9章內(nèi)容,本章根文件系統(tǒng)啟動后包含的根目錄如圖12-6所示。圖12-6新制作的Cramfs根文件系統(tǒng)啟動圖12.5.3修改代碼

1.修改mach-smdk2410.c文件

在第11章的內(nèi)核源代碼中將/linux-2.6.14.success20090807

/arch/arm/mach-s3c2410目錄下的mach-smdk2410.c文件打開:

[root@localhostlinux-2.6.14.success20090807]#viarch/arm/mach-s3c2410/mach-smdk2410.c

2.重新配置內(nèi)核

[root@localhostlinux-2.6.14.success20090807]#makemenuconfig

配置界面如圖12-7所示。圖12-7內(nèi)核配置USB驅(qū)動界面1)配置USB鼠標(biāo)鍵盤

2)增加SCSI支持

3)讓內(nèi)核支持熱插拔

4)添加MSDOS和VFAT文件系統(tǒng)

5)加入中文字體庫

圖12-8插入U盤時的錯誤信息

3.重新編譯內(nèi)核

編譯內(nèi)核:

[root@localhostlinux-2.6.14.success20090807]#makezImage

將重新制作的內(nèi)核映像文件燒寫到博創(chuàng)開發(fā)板,最后在超級終端中的啟動畫面如圖12-9所示。圖12-9USB驅(qū)動添加后的啟動信息

4.插入U盤

插入U盤會出現(xiàn)如下提示,可見系統(tǒng)將插入在第三個USB口,U盤成功掛載。

usb1-1.2:newfullspeedUSBdeviceusings3c2410-ohciandaddress3

ub(1.3):GetMaxLUNreturned0,using1LUNs

/dev/ub/a:p1圖12-10插入U盤后的提示信息圖12-11U盤中的內(nèi)容顯示

5.拔出U盤

撥出U盤會出現(xiàn)如下信息,如圖

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論