<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式Linux設備驅動(dòng)開(kāi)發(fā)之:字符設備驅動(dòng)編程

嵌入式Linux設備驅動(dòng)開(kāi)發(fā)之:字符設備驅動(dòng)編程

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257111.htm

3.程序主要組成

(1)早期版本的字符設備注冊。

早期版本的設備注冊使用函數register_chrdev(),調用該函數后就可以向系統申請主設備號,如果register_chrdev()操作成功,設備名就會(huì )出現在/proc/devices文件里。在關(guān)閉設備時(shí),通常需要解除原先的設備注冊,此時(shí)可使用函數unregister_chrdev(),此后該設備就會(huì )從/proc/devices里消失。其中主設備號和次設備號不能大于255。

當前不少的字符代碼仍然使用這些早期版本的函數接口,但在未來(lái)內核的代碼中,將不會(huì )出現這種編程接口機制。因此應該盡量使用后面講述的編程機制。

register_chrdev()函數格式如表11.1所示。

表11.1 register_chrdev()函數語(yǔ)法要點(diǎn)

所需頭文件

#includelinux/fs.h>

函數原型

intregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops)

函數傳入值

major:程序向系統申請的主設備號,如果為0則系統為此驅動(dòng)程序動(dòng)態(tài)地分配一個(gè)主設備號

name:設備名

fops:對各個(gè)調用的入口點(diǎn)

函數返回值

成功:如果是動(dòng)態(tài)分配主設備號,此返回所分配的主設備號。且設備名就會(huì )出現在/proc/devices文件里

出錯:-1

unregister_chrdev()函數格式如下表11.2所示:

表11.2 unregister_chrdev()函數語(yǔ)法要點(diǎn)

所需頭文件

#includelinux/fs.h>

函數原型

intunregister_chrdev(unsignedintmajor,constchar*name)

函數傳入值

major:設備的主設備號,必須和注冊時(shí)的主設備號相同

name:設備名

函數返回值

成功:0,且設備名從/proc/devices文件里消失

出錯:-1

(2)設備號相關(guān)函數。

在前面已經(jīng)提到設備號有主設備號和次設備號,其中主設備號表示設備類(lèi)型,對應于確定的驅動(dòng)程序,具備相同主設備號的設備之間共用同一個(gè)驅動(dòng)程序,而用次設備號來(lái)標識具體物理設備。因此在創(chuàng )建字符設備之前,必須先獲得設備的編號(可能需要分配多個(gè)設備號)。

在Linux2.6的版本中,用dev_t類(lèi)型來(lái)描述設備號(dev_t是32位數值類(lèi)型,其中高12位表示主設備號,低20位表示次設備號)。用兩個(gè)宏MAJOR和MINOR分別獲得dev_t設備號的主設備號和次設備號,而且用MKDEV宏來(lái)實(shí)現逆過(guò)程,即組合主設備號和次設備號而獲得dev_t類(lèi)型設備號。

分配設備號有靜態(tài)和動(dòng)態(tài)的兩種方法。靜態(tài)分配(register_chrdev_region()函數)是指在事先知道設備主設備號的情況下,通過(guò)參數函數指定第一個(gè)設備號(它的次設備號通常為0)而向系統申請分配一定數目的設備號。動(dòng)態(tài)分配(alloc_chrdev_region())是指通過(guò)參數僅設置第一個(gè)次設備號(通常為0,事先不會(huì )知道主設備號)和要分配的設備數目而系統動(dòng)態(tài)分配所需的設備號。

通過(guò)unregister_chrdev_region()函數釋放已分配的(無(wú)論是靜態(tài)的還是動(dòng)態(tài)的)設備號。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>