專題 Linux驅動開發前奏

2021-07-30 21:37:11 字數 2082 閱讀 8988

硬體訪問技術

暫存器讀寫

驅動分類-常規分類法:字元裝置,塊裝置,網路裝置。

驅動分類-匯流排分類法:usb裝置,pci裝置,平台匯流排裝置。

字元裝置:字元裝置是一種按位元組來訪問的裝置,字元驅動則負責驅動字元裝置,這樣的驅動通常支援open,close,read,write系統呼叫。例如:串列埠,led,按鍵。

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

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

驅動學習方法:驅動模型,硬體操作。

驅動學習切忌:驅動學習初期(前半年)請不要過多的去閱讀核心**!

硬體訪問實質:

驅動程式控制裝置,主要是通過訪問裝置內的暫存器來達到控制的目的,因此我們討論如何訪問硬體,就成了如何訪問這些暫存器了。

靜態對映

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

如何事先指定對映關係?

核心啟動時,在什麼地方完成自動對映?

將對映植入核心**:

將對映**寫入核心檔案(cpu關聯檔案)中,

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

第一是填充如下結構(以下結構)

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

第二是填充好結構後還得告訴linux核心(將填充好的結構新增到對應陣列中的尾部)

(例如arch/arm/mach-s3c2440/mach-smdk2440.c)

(例如arch/arm/mach-s5p64x0/cpu.c)

static

struct map_desc smdk2440_iodesc __initdata = , , ,

};

static

void __init mini2440_map_io(void)

static

void __init smdk2440_map_io(void)

動態對映

動態對映:ioremap()

動態對映:所謂動態對映,是指在驅動程式中採用ioremap函式將物理位址對映為虛擬位址。

原型:void * ioremap (physaddr, size);

返回值:對映後的虛擬位址。

unsigned ioread8(void *addr);

unsigned ioread16(void *addr);

unsigned ioread32(void *addr);

unsigned readb(address);

unsigned readw(address);

unsigned readl(address);

unsigned iowrite8(u8 value, void *addr);

unsigned iowrite16(u16 value, void *addr);

unsigned iowrite32(u32 value, void *addr);

unsigned writeb(unsigned value, address);

unsigned writew(unsigned value, address);

unsigned writel(unsigned value, address);

linux驅動開發前奏

1.常規分類 字元裝置,塊裝置,網路裝置 字元裝置 是一種按位元組來訪問的裝置,字元驅動則負責驅動字元裝置,這樣的驅動通常實現open,close,read等系統呼叫,例如 串列埠,led,按鍵 塊裝置 在大部分unix系統中,塊裝置定義為 以塊 通常是512位元組 為最小傳輸單位的裝置,塊裝置不能...

R O R 開發前奏

裝好ruby以後,開啟命令列視窗輸入 ruby v 如果出現ruby的版本號 1.8.5 最新 就為安裝成功 出現版本號 1.2.2 最新 就為安裝成功,rails安裝在ruby目錄下 lib ruby gems 1.8 gems rails 1.2.2 如果你選用的開發ide是radrails的話...

linux驅動開發

這兩天在公司由於一直沒有太過於繁重的任務,於是便給分配了驅動開發的任務,之前一直不明白驅動開發和普通的嵌入式開發到底有什麼區別,然後有沒有經過系統的學習,於是就一直愣在那裡。不過慢慢的還是經過查資料,雖然 沒有編寫出來,但是對於系統的一些東西學習的終於有了一定的了解,感覺這個十分的重要,也為了給自己...