《基于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ù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

12.1USB簡介

12.1.1USB

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

1.?USB的結構

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

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

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

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

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

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

2.?USB的傳輸方式

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

(1)等時傳輸方式。

(2)中斷傳輸方式。

(3)控制傳輸方式。

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

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

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

1.?USB的即插即用

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

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

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

3.完備的總線拓撲結構

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

4.多種設備子類

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

12.2LinuxUSB子系統(tǒng)

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

LinuxUSB子系統(tǒng)的結構分為三個層次。USBD層為USB內核,內核分別為客戶端驅動程序層和主機控制器驅動程序層提供一套函數(shù)集,這樣可以更好地擴展客戶端驅動程序和主機控制器程序,如圖12-3所示。圖12-3LinuxUSB子系統(tǒng)結構12.2.1文件系統(tǒng)

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

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

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

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

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

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

USBD主要負責為客戶端驅動程序層和主機控制器驅動程序層提供接口函數(shù),使系統(tǒng)層次分明。另外,它還負責維護設備的加載和卸載、設備配置、客戶端驅動程序的安裝和卸載等操作。12.2.3主機控制器驅動程序(hcd)

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

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

12.3USB客戶端驅動程序架構和開發(fā)

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

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

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

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

12.4在Linux內核中加入USB模塊

12.4.1配置文件

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

Linux2.6內核對設備模型作了很大的改進,內核對設備的感知通過device數(shù)據(jù)結構,內核對驅動的感知是通過device_driver數(shù)據(jù)結構。

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

12.5.1S3C2410與USB模塊的連接電路

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

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

1.修改mach-smdk2410.c文件

在第11章的內核源代碼中將/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.重新配置內核

[root@localhostlinux-2.6.14.success20090807]#makemenuconfig

配置界面如圖12-7所示。圖12-7內核配置USB驅動界面1)配置USB鼠標鍵盤

2)增加SCSI支持

3)讓內核支持熱插拔

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

5)加入中文字體庫

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

3.重新編譯內核

編譯內核:

[root@localhostlinux-2.6.14.success20090807]#makezImage

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

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盤中的內容顯示

5.拔出U盤

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

溫馨提示

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

評論

0/150

提交評論