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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符设备驱动基础篇3——字符设备驱动工作原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

以下內(nèi)容源于朱有鵬嵌入式課程的學(xué)習(xí),如有侵權(quán),請告知刪除。

參考資料:http://www.cnblogs.com/biaohc/p/6575074.html。


1、系統(tǒng)整體工作原理

(1)應(yīng)用層-》API-》設(shè)備驅(qū)動-》硬件;

(2)API:open、read、write、close等操作邏輯(“吃飯”這個宏觀操作)

(3)驅(qū)動源碼中提供真正的open、read、write、close等函數(shù)實(shí)體(右手,用筷子等具體操作)



2、file_operations結(jié)構(gòu)體

結(jié)構(gòu)體成員的解釋,見博文:http://blog.csdn.net/oqqhutu12345678/article/details/78508273

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

(1)該結(jié)構(gòu)體的元素主要是函數(shù)指針,用來掛接實(shí)體函數(shù)地址;

(2)每個設(shè)備驅(qū)動都需要一個該結(jié)構(gòu)體類型的變量;

(3)設(shè)備驅(qū)動向內(nèi)核注冊時,提供該結(jié)構(gòu)體類型的變量。

(4)該結(jié)構(gòu)體的成員函數(shù)是字符設(shè)備驅(qū)動程序設(shè)計的主體內(nèi)容,這些函數(shù)實(shí)際會在應(yīng)用程序進(jìn)行l(wèi)inux的open()、read()等系統(tǒng)調(diào)用時最終被內(nèi)核調(diào)用。


3、注冊字符設(shè)備

  • 在沒有框架模型前,這里注冊驅(qū)動、注冊設(shè)備混為一談(設(shè)備號和file_opertion緊結(jié)合,一個驅(qū)動的信息包含兩者)。

(1)為何要注冊驅(qū)動?如果不注冊,內(nèi)核查無此人。

(2)誰去負(fù)責(zé)注冊?驅(qū)動去注冊自己。

(3)向誰注冊?向內(nèi)核注冊。

(4)注冊函數(shù)從哪里來?內(nèi)核提供了注冊函數(shù),驅(qū)動需要調(diào)用此函數(shù)來注冊自己。

(5)注冊前怎樣?注冊后怎樣?注冊產(chǎn)生什么結(jié)果?查有此人,內(nèi)核可以調(diào)用此驅(qū)動去驅(qū)動硬件。


4、register_chrdev函數(shù)詳解(#include <linux/fs.h>)



(1)作用是驅(qū)動向內(nèi)核注冊某設(shè)備的file_operations

  • 成功返回值為0,失敗返回負(fù)數(shù)。

(2)參數(shù)

  • major,可以自己指定,也可以讓內(nèi)核幫忙分配。表征當(dāng)前設(shè)備的編號,范圍是1~254;猶如身份證號。
  • name,表示當(dāng)前設(shè)備驅(qū)動的名字;猶如具體名字。
  • fops,file_operations結(jié)構(gòu)體指針。
  • cat /proc/devices,可以查看哪些設(shè)備號可用。

(3)inline和static

  • inline修飾:因?yàn)榇撕瘮?shù)定義在頭文件里面,如果被兩個文件包含,就會被重復(fù)定義,使用inline后,就只剩函數(shù)體了,而不是函數(shù)定義。本質(zhì)原因是此函數(shù)太短了。

5、內(nèi)核如何管理字符設(shè)備驅(qū)動

(1)內(nèi)核中用一個數(shù)組,來存儲注冊的字符設(shè)備驅(qū)動;

  • 數(shù)組的缺陷,因此只有1-254?

(2)register_chrdev函數(shù)將(要注冊的)驅(qū)動的信息(包括設(shè)備號和file_operations)存儲在數(shù)組中相應(yīng)的位置;


(3)使用cat /proc/devices,查看內(nèi)核中已經(jīng)注冊過的字符設(shè)備驅(qū)動和塊設(shè)備驅(qū)動;

  • 有些編號默認(rèn)分配給某些設(shè)備。
  • 理解主設(shè)備號(major)的概念。



總結(jié)

以上是生活随笔為你收集整理的字符设备驱动基础篇3——字符设备驱动工作原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。