新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式Linux設備驅動開發之:字符設備驅動編程

        嵌入式Linux設備驅動開發之:字符設備驅動編程

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257111.htm

        3.程序主要組成

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

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

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

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

        表11.1 register_chrdev()函數語法要點

        所需頭文件

        #includelinux/fs.h>

        函數原型

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

        函數傳入值

        major:程序向系統申請的主設備號,如果為0則系統為此驅動程序動態地分配一個主設備號

        name:設備名

        fops:對各個調用的入口點

        函數返回值

        成功:如果是動態分配主設備號,此返回所分配的主設備號。且設備名就會出現在/proc/devices文件里

        出錯:-1

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

        表11.2 unregister_chrdev()函數語法要點

        所需頭文件

        #includelinux/fs.h>

        函數原型

        intunregister_chrdev(unsignedintmajor,constchar*name)

        函數傳入值

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

        name:設備名

        函數返回值

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

        出錯:-1

        (2)設備號相關函數。

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

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

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

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

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

        linux相關文章:linux教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阿拉善右旗| 图片| 峡江县| 东莞市| 宁强县| 阿城市| 白沙| 永城市| 苗栗市| 岗巴县| 平舆县| 丹江口市| 东平县| 长兴县| 沾益县| 定南县| 肃南| 绍兴市| 深水埗区| 赣州市| 碌曲县| 浑源县| 揭西县| 府谷县| 萝北县| 沐川县| 民和| 股票| 丰城市| 诸城市| 宁陵县| 射洪县| 沈丘县| 潼南县| 潜江市| 监利县| 上高县| 义乌市| 山东| 祁东县| 莱阳市|