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 獲取從裝置號...