字元裝置驅動程式設計思想

2021-07-23 14:39:34 字數 1343 閱讀 3381

linux字元裝置驅動程式設計

1,實現入口函式 ***_init()和解除安裝函式 ***_exit()

2,申請主裝置號  register_chrdev_region (與核心相關)

3,註冊字元裝置驅動 cdev_alloc  cdev_init  cdev_add (與核心相關)

4,利用udev/mdev機制建立裝置檔案(節點) class_create, device_create (與核心相關)

5,硬體部分初始化

io資源對映 ioremap,核心提供gpio庫函式 (與硬體相關)

註冊中斷(與硬體相關)

初始化等待佇列 (與核心相關)

初始化定時器 (與核心相關)

6,構建 file_operation結構 (與核心相關)

7,實現操作硬體方法  ***_open,***_read,***x_write...(與硬體相關)

linux程式框架的概念

1,核心引入程式框架思想:**可重用,可維護,可伸縮

2,通用功能  寫一次    可重用性好

3,差異功能  平台不同  可移植性好

4,核心框架採用分層

5,建立裝置模型,它外在表現 平台裝置驅動(匯流排,裝置,驅動來實現的)

6,物件導向程式設計方式

物件導向**實現

struct a

struct b

b是a的子類

分層**的實現

1 定義結構體 抽象類

struct mydriver

2 初始化(底層硬體初始化)

構建mydriver物件

struct mydriver *drv=alloc(...);

設定mydriver物件

drv->irq=...

drv->addr=...

drv->func=key_func

註冊register(mydriver物件)

***_add(mydriver物件)

定義void key_func()

分層:上層

struct mydriver *temp

tmp->name

tmp->func()

***************====呼叫核心核心層介面

核心層: 全域性變數,鍊錶

struct mydriver *head

head->a->b;

***************==== 註冊到核心核心層

底層struct mydriver a;

a.name="key";

a.irq=eintx

a.func=...

定義void key_func()

字元裝置驅動程式設計 一

當我們對字元裝置進行程式設計的時候,需要做一些常有的準備工作,獲取裝置號,對裝置檔案操作函式的註冊,檔案資訊的初始化,檔案的核心表現形式,向核心的註冊等等.對字元裝置的訪問是通過檔案系統內的裝置名稱進行的,通常在 dev目錄下.使用ls l 每行的第乙個字元用來識別該檔案型別,c就是字元裝置驅動檔案...

Linux裝置驅動程式 字元裝置驅動程式設計

linux對裝置的操作與對檔案的操作是一樣的,可以看到乙個裝置所對應的檔案。我們平時用的read write等函式也可以用於裝置檔案。字元裝置 以字元為單位 按照順利操作 沒有快取區,故不支援隨機讀寫 例外 幀快取裝置,如顯示卡,是可以隨機訪問的 裝置號由主裝置號與次裝置號組成。主裝置號標識裝置對應...

裝置驅動例項 字元裝置驅動

在整個linux裝置驅動學習中,字元裝置驅動較為基礎。通過對它的學習,對裝置驅動進一步加深了解 cdev 結構體struct cdev 講下比較重要的成員變數 dev t dev 定義了32位的裝置號,其中12位是主裝置號,20位是從裝置號。獲取主裝置號 major dev t dev 獲取從裝置號...