字符设备驱动基础篇3——字符设备驱动工作原理
以下內容源于朱有鵬嵌入式課程的學習,如有侵權,請告知刪除。
參考資料:http://www.cnblogs.com/biaohc/p/6575074.html。
1、系統整體工作原理
(1)應用層-》API-》設備驅動-》硬件;
(2)API:open、read、write、close等操作邏輯(“吃飯”這個宏觀操作);
(3)驅動源碼中提供真正的open、read、write、close等函數實體(右手,用筷子等具體操作);
2、file_operations結構體
結構體成員的解釋,見博文:http://blog.csdn.net/oqqhutu12345678/article/details/78508273
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
(1)該結構體的元素主要是函數指針,用來掛接實體函數地址;
(2)每個設備驅動都需要一個該結構體類型的變量;
(3)設備驅動向內核注冊時,提供該結構體類型的變量。
(4)該結構體的成員函數是字符設備驅動程序設計的主體內容,這些函數實際會在應用程序進行linux的open()、read()等系統調用時最終被內核調用。
3、注冊字符設備
- 在沒有框架模型前,這里注冊驅動、注冊設備混為一談(設備號和file_opertion緊結合,一個驅動的信息包含兩者)。
(1)為何要注冊驅動?如果不注冊,內核查無此人。
(2)誰去負責注冊?驅動去注冊自己。
(3)向誰注冊?向內核注冊。
(4)注冊函數從哪里來?內核提供了注冊函數,驅動需要調用此函數來注冊自己。
(5)注冊前怎樣?注冊后怎樣?注冊產生什么結果?查有此人,內核可以調用此驅動去驅動硬件。
4、register_chrdev函數詳解(#include <linux/fs.h>)
(1)作用是驅動向內核注冊某設備的file_operations
- 成功返回值為0,失敗返回負數。
(2)參數
- major,可以自己指定,也可以讓內核幫忙分配。表征當前設備的編號,范圍是1~254;猶如身份證號。
- name,表示當前設備驅動的名字;猶如具體名字。
- fops,file_operations結構體指針。
- cat /proc/devices,可以查看哪些設備號可用。
(3)inline和static
- inline修飾:因為此函數定義在頭文件里面,如果被兩個文件包含,就會被重復定義,使用inline后,就只剩函數體了,而不是函數定義。本質原因是此函數太短了。
5、內核如何管理字符設備驅動
(1)內核中用一個數組,來存儲注冊的字符設備驅動;
- 數組的缺陷,因此只有1-254?
(2)register_chrdev函數將(要注冊的)驅動的信息(包括設備號和file_operations)存儲在數組中相應的位置;
(3)使用cat /proc/devices,查看內核中已經注冊過的字符設備驅動和塊設備驅動;
- 有些編號默認分配給某些設備。
- 理解主設備號(major)的概念。
總結
以上是生活随笔為你收集整理的字符设备驱动基础篇3——字符设备驱动工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老卫带你学---keras中文文档
- 下一篇: 位操作实现加减乘除