linux驅動開發前奏

來源:互聯網
上載者:User

標籤:linux   驅動開發   硬體訪問   靜態映射   動態映射   

1.驅動開發概述驅動分類:1.常規分類:字元裝置,塊裝置,網路裝置字元裝置:是一種按位元組來訪問的裝置,字元驅動則負責驅動字元裝置,這樣的驅動通常實現open,close,read等系統調用,例如:串口,LED,按鍵塊裝置:在大部分unix系統中,塊裝置定義為:以塊(通常是512位元組)為最小傳輸單位的裝置,塊裝置不能按位元組處理資料。                而linux則允許塊裝置傳送任意數目的位元組。因此,塊和字元裝置的區別僅僅是驅動的與核心的介面不同。常見的塊裝置包括硬碟,flash,SD卡等。網路裝置:網路裝置可以是一個硬體裝置,如網卡等;也可以是一個純粹的軟體裝置,如迴環介面lo,一個網路介面負責發送和接收資料報文。
2.匯流排分類法USB裝置,PCI裝置,平台匯流排裝置
2.硬體訪問技術硬體訪問實質驅動程式控制裝置,主要是通過訪問裝置內的寄存器來達到控制目的,因此我們討論如何訪問硬體,就成了如何訪問這些寄存器。
地址映射在linux系統中,不論是核心程式還是應用程式,都智能使用虛擬位址,而晶片手冊給出的寄存器地址或RAM地址等都是物理地址,無法直接使用,因此我們讀寫寄存器的第一步就是講物理地址映射為虛擬位址。
1.動態映射在驅動程式中採用ioremap函數將物理地址映射為虛擬位址函數原型: void *ioremap(physaddr, size);參數說明:physaddr:待映射的物理地址    size:映射的地區長度返回值:映射後的虛擬位址
2.靜態映射所謂靜態映射,是指linux系統根據使用者事先指定的映射關係,在核心啟動後,自動的將物理地址映射為虛擬位址。問題1:如何事先指定映射關係?        在靜態映射中,使用者是通過map_desc結構來指明物理地址與虛擬位址的映射關係。
struct map_desc {    unsigned long virtual; /* 映射後的虛擬位址 */    unsigned long pfn;     /* 物理地址所在的頁幀號 */    unsigned long length;  /* 映射長度 */    unsigned int type;     /* 映射的裝置類型 */};
pfn:利用_phys_to_pfn(物理地址)可以計算出物理地址所在的物理頁幀號
問題2:核心啟動時,在什麼地方完成自動對應?以s3c6410cpu為例:在arch/arm/mach-s3c64xx目錄下有一個結構數組
static struct map_desc s3c_iodesc[] __initdata = { ... };
裡面儲存的全是這種映射關係,目錄下還有個初始化函數如下:
void __init s3c64xx_init_io(struct map_desc *mach_desc, int size){    unsigned long idcode;    /* initialise the io descriptors we need for initialisation */    iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));    ...}
內部調用iotable_init完成映射
寄存器讀寫在完成地址映射後,就可以讀寫寄存器了,linux核心提供了一系列的函數用來讀寫寄存器。
unsigned ioread8(void *addr)unsigned ioread16(void *addr)unsigned ioread32(void *addr)unsigned readb(address)unsigned readw(address)unsigned readw(address)unsigned readl(address)
void iowrite8(u8 value, 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驅動開發前奏

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.