日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字符设备驱动基础篇3——字符设备驱动工作原理

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符设备驱动基础篇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——字符设备驱动工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。