3 09 Linux驅動初探

2021-07-23 15:48:22 字數 1891 閱讀 6329

一.  驅動開發概述

1.  驅動分類

1.1常規分類法

1.1.1字元裝置

字元裝置是一種一位元組為最小訪問單位的裝置,字元驅動負責驅動字元裝置,系統按照操作檔案的方式來對字元裝置進行訪問,這樣的驅動通常支援open,close,read、和write系統呼叫。例如:串列埠,led,按鍵。

1.1.2塊裝置

在大部分的unix系統中,塊裝置定義為:以塊(通常是512位元組)為最小傳輸單位的裝置,塊裝置不能按位元組處理資料,而linux則允許塊裝置傳輸任意數目的位元組,因此塊和字元裝置的區別僅僅是驅動的裝置與核心的介面不同。常見的塊裝置包括硬碟,flash,sd卡等。

1.1.3網路裝置

網路介面可以是乙個硬體裝置,如網絡卡eth0,也可以是乙個純粹的軟體裝置,如回環介面lo,乙個網路介面負責傳送和接受資料報文。

1.2匯流排分類法

usb裝置,pci裝置,平台匯流排裝置(如usb網絡卡)。

2.  驅動學習方法

先弄清某驅動的驅動模型,建立驅動**框架,再網框架中新增硬體相關的操作**。

1)驅動模型

分析範例**,總結出某類裝置的驅動模型,完成**框架。

2)硬體操作

把裸機中的硬體操作移植到linux驅動中。

3)驅動程式測試

編譯驅動模組,放入根檔案系統,編寫應用程式,載入模組進行測試。

//驅動學習初期,不需要過多的去閱讀核心**。

二.  硬體訪問技術

1.  硬體訪問流程

驅動程式控制裝置,主要通過訪問裝置內的暫存器來達到控制目的。

2.   linux系統位址對映

linux系統中,無論是核心程式還是應用程式,都只能使用虛擬位址,而晶元手冊中給出的硬體暫存器位址或ram位址確實實體地址。因此,要對暫存器進行讀寫,就要把物       理位址對映為虛擬位址。linux系統的位址對映方式分為動態對映和靜態對映。

2.1  動態對映

動態對映是指在驅動程式中採用ioremap函式將物理位址對映為虛擬位址。函式原型為void * ioremap(physaddr, size)。引數physaddr為待對映的實體地址,size為對映的區域長度(若是四個位元組,即為4),返回值為對映後的虛擬位址。

2.2  靜態對映

靜態對映是指linux系統根據使用者事先指定的對映關係,在核心啟動時自動地把物理位址對映為虛擬位址。

1)在靜態對映中,使用者通過map_desc結構來指明實體地址與虛擬位址的對映關係。

struct map_desc;

pfn:利用_phys_to_pfn(實體地址)可以計算出實體地址所在的物理頁幀號。

2)把該結構填充至位於核心原始碼\arch\arm\cpu.c中的struct map_desc結構陣列中。

3.  暫存器讀寫

在完成位址對映後,就可以讀寫暫存器了,linux核心提供了一系列函式,來對暫存器進行讀寫。

unsigned ioread8(void *addr)

unsigned ioread16(void *addr)

unsigned ioread32(void *addr)

unsigned readb(address)

unsigned readw(address)

unsigned readl(address)

void iowrite8(u8 balue, void *addr)

void iowrite16(u16 value, void *addr)

void iowrite32(u32 value, void *addr)

void writeb(unsigned value, address)

void writew(unsigned value, address)

void writel(unsigned value, address)

Linux字元裝置驅動初探

一 裝置驅動之資料結構 1 dev t 裝置編號,包含主裝置號 次裝置號。dev t是乙個32位的數,12位表示主裝置號,20為表示次裝置號 1 主裝置號 major dev t dev 2 次裝置號 minor dev t dev 3 裝置編號 mkdev int major,int minor ...

USB驅動初探

調了n久68013,最後還是放棄了,使用stm32的usb 調到驅動,建立驅動環境,win7調驅動總感覺格格不入,在xp下建立開發環境 vc6,xpddk 2600,driverstudio 3.2 先安裝vc6,安裝ddk,最後安裝driverstudio 安裝完後,開啟vc6,設定ddk bui...

Linux裝置驅動初探 準備Linux原始碼樹

剛看 o reilly 寫的 linux 裝置驅動程式 時。作者一再強調在編寫驅動程式時必須 建立核心樹。所謂核心樹,我的理解和網上資料說的一致就是核心原始碼的一種邏輯形式。那怎麼建立呢?為此上網 翻雲覆雨 起來而結果卻是 慘敗而歸 為 此託了一天又4個小時 當然包括吃飯睡覺的時間 連個簡單的 he...