日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式Linux設(shè)備驅(qū)動開發(fā)之:字符設(shè)備驅(qū)動編程

          嵌入式Linux設(shè)備驅(qū)動開發(fā)之:字符設(shè)備驅(qū)動編程

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

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

          3.程序主要組成

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

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

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

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

          表11.1 register_chrdev()函數(shù)語法要點

          所需頭文件

          #includelinux/fs.h>

          函數(shù)原型

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

          函數(shù)傳入值

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

          name:設(shè)備名

          fops:對各個調(diào)用的入口點

          函數(shù)返回值

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

          出錯:-1

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

          表11.2 unregister_chrdev()函數(shù)語法要點

          所需頭文件

          #includelinux/fs.h>

          函數(shù)原型

          intunregister_chrdev(unsignedintmajor,constchar*name)

          函數(shù)傳入值

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

          name:設(shè)備名

          函數(shù)返回值

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

          出錯:-1

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

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

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

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

          通過unregister_chrdev_region()函數(shù)釋放已分配的(無論是靜態(tài)的還是動態(tài)的)設(shè)備號。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

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




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉