文章目錄
一、字符設備驅動概念
字符設備就是一個一個字節,按照字節流進行讀寫操作的設備,讀寫數據是分先後順序的。比如我們最常見的串口、SPI、LCD、鍵盤等等都是字符設備,這些設備的驅動就叫做字符設備驅動。
二、驅動工作模式層級流程圖
從應用到底層,各個層級之間函數調用流程、對應關係,如下圖:
三、驅動知識點思維導圖
3.1 設備號
**備註:輸入命令“cat /proc/devices”可以查看當前已經被使用掉的設備號 **
主設備號:
次設備號:
3.2 設備名
3.3 設備操作函數集合:file_operations結構體
驅動中實現對設備操作的具體函數,都在內核中的file_operations這個結構體中定義好了。我們需要什麼功能或者說需要對驅動設備進行什麼操作,只需要實現具體對應的函數內容即可。
該結構體非常重要:
當我們在實現一個驅動的時候,主要有如下步驟:
(1)首先需要分析需求,即:我們需要對驅動設備進行哪些操作,比如打開設備、關閉設備、讀設備、寫設備等。
(2)確定好要實現的所有功能需求後,然後在file_operations結構體查找適合的函數指針,並逐一實現這些指針對應的功能函數。
(3)最後,將實現的每個函數賦值給file_operations結構體中對應的指針即可。
三、字符設備驅動框架思維導圖
3.1 【舊字符驅動代碼框架】思維導圖
舊字符設備驅動代碼框架所用到的主要函數、結構體等如下:
實現框架流程如下圖:
3.2 【新字符驅動代碼框架】思維導圖
四、驅動常用命令
4.1 驅動模塊加載 & 卸載
insmod xxx.ko
rmmod xxx
4.2 創建節點命令
mknod /dev/xxx c 主設備號 次設備號