linux的驱动开发——字符设备驱动
1.字符設(shè)備驅(qū)動(dòng)
\qquad字符設(shè)備驅(qū)動(dòng)是最基本,最常用的設(shè)備。它將千差萬(wàn)別的硬件設(shè)備采用統(tǒng)一的接口封裝起來(lái),屏蔽了硬件的差異,簡(jiǎn)化了應(yīng)用層的操作。
2.描述所有字符設(shè)備的結(jié)構(gòu)體
\qquad描述所有字符設(shè)備的結(jié)構(gòu)體在linux內(nèi)核目錄下的\include\linux\cdev.h中,結(jié)構(gòu)體為:
struct cdev {struct kobject kobj;struct module *owner;const struct file_operations *ops;struct list_head list;dev_t dev; //設(shè)備號(hào)unsigned int count; //設(shè)備個(gè)數(shù) };\qquadcdev結(jié)構(gòu)體中的struct file_operations位于linux內(nèi)核目錄下的\include\linux\fs.h中,除了第一個(gè)結(jié)構(gòu)體變量是結(jié)構(gòu)體指針,其它的都是函數(shù)指針。我們稱struct file_operations為提供給應(yīng)用層的操作方法集。
\qquaddev_t用于唯一的標(biāo)識(shí)設(shè)備的號(hào)碼,也是內(nèi)核設(shè)備管理驅(qū)動(dòng)設(shè)備的唯一標(biāo)識(shí)符。其一系列定義如下,所以dev_t是32位無(wú)符號(hào)整型。設(shè)備號(hào):主設(shè)備號(hào)+次設(shè)備號(hào)
3.編寫字符設(shè)備驅(qū)動(dòng)
3.1為cdev結(jié)構(gòu)體分配空間
\qquadcdev結(jié)構(gòu)體分配內(nèi)存空間,內(nèi)核內(nèi)存空間分配函數(shù)cdev_alloc()
\qquad功能:為cdev結(jié)構(gòu)體分配空間
\qquad參數(shù):void
\qquad返回值:成功就返回分配到的結(jié)構(gòu)體地址;失敗就返回NULL
3.2初始化cdev結(jié)構(gòu)體
\qquadcdev結(jié)構(gòu)體初始化,初始化函數(shù)cdev_init()
\qquad功能:初始化cdev設(shè)備
\qquad參數(shù):第一個(gè)參數(shù):cdev結(jié)構(gòu)體指針;第二個(gè)參數(shù):操作方法集的指針
\qquad返回值:void
3.3添加(注冊(cè))字符設(shè)備到內(nèi)核中,由內(nèi)核統(tǒng)一管理
\qquad函數(shù):int cdev_add(struct cdev *p, dev_t dev, unsigned count)
\qquad功能:添加字符設(shè)備到內(nèi)核
\qquad參數(shù):第一個(gè)參數(shù):結(jié)構(gòu)體指針;第二個(gè)參數(shù):設(shè)備號(hào);第三個(gè)參數(shù):設(shè)備個(gè)數(shù)
\qquad返回值:成功返回0;失敗返回錯(cuò)誤碼
3.4刪除(注銷)字符設(shè)備
\qquad函數(shù):void cdev_del(struct cdev *p)
\qquad功能:刪除(注銷)字符設(shè)備
總結(jié)
以上是生活随笔為你收集整理的linux的驱动开发——字符设备驱动的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【计算机网络复习】1.1.2 标准化工作
- 下一篇: Hadoop分布式集群安装配置