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