裝置驅動開發實驗教程(9) 註冊字元類裝置號

2021-09-26 23:20:12 字數 2300 閱讀 7093

前面學習的雜項裝置,主裝置號已經固定為 10,這裡介紹申請標準的字元類裝置號,包括主裝置號以及次裝置號。

字元類裝置號分為靜態申請和動態申請,靜態申請就是主裝置號是程式設計師手動分配,動態申請是系統給分配。

字元裝置函式在檔案「include/linux/fs.h」中。

核心提供了三個函式來註冊一組字元裝置編號,這三個函式分別是:

– register_chrdev_region();     //靜態申請

– alloc_chrdev_region();    //動態申請

– register_chrdev()。

register_chrdev_region()是提前知道裝置的主次裝置號,再去申請裝置號。alloc_chrdev_region() 是動態分配主次裝置號。register_chrdev()。是老版本的裝置號註冊方式,只分配主裝置號。從裝置號在mknod的時候指定。

include/linux/cdev.h

– cdev型別是是字元裝置描述的結構;

– 其中的裝置號必須用「dev_t」型別來描述,高12位為主裝置號,低20位為次裝置號。

include/linux/kdev_t.h

– 在kdev_t.h標頭檔案中有一系列裝置號處理的巨集命令,用於處理各種裝置號相關的資料。

如下,是完整的申請字元類裝置號的程式:request_ascdev_num.c

以下**實現的功能是載入模組時若通過「numdev_major」、「numdev_minor」傳入引數則靜態註冊字元類裝置號;否則動態註冊字元類裝置號(驅動模組傳引數見博文:嵌入式linux系統:驅動程式設計_驅動模組傳引數 )。

#include /*包含初始化巨集定義的標頭檔案,**中的module_init和module_exit在此檔案中*/

#include /*包含初始化載入模組的標頭檔案,**中的module_license在此標頭檔案中*/

/*定義module_param module_param_array的標頭檔案*/

#include /*定義module_param module_param_array中perm的標頭檔案*/

#include /*三個字元裝置函式*/

#include /*mkdev轉換裝置號資料型別的巨集定義*/

#include /*定義字元裝置的結構體*/

#include #define device_name "ascdev"

#define device_minor_num 2

#define dev_major 0

#define dev_minor 0

module_license("dual bsd/gpl");

/*宣告是開源的,沒有核心版本限制*/

module_author("itopeet_dz");

/*宣告作者*/

int numdev_major = dev_major;

int numdev_minor = dev_minor;

/*輸入主裝置號*/

module_param(numdev_major,int,s_irusr);

/*輸入次裝置號*/

module_param(numdev_minor,int,s_irusr);

static int scdev_init(void)

else

if(ret<0)

printk(kern_emerg "scdev_init!\n");

/*列印資訊,kern_emerg表示緊急資訊*/

return 0;

}static void scdev_exit(void)

module_init(scdev_init);

/*初始化函式*/

module_exit(scdev_exit);

/*解除安裝函式*/

編譯生成驅動模組「request_ascdev_num.ko」。

程式執行時,若通過numdev_major傳入引數則靜態申請字元類裝置號;否則動態申請字元類裝置號。

使用命令 「cat /proc/devices」檢視裝置。

02 註冊字元裝置驅動

從核心中最簡單的驅動程式入手,描述linux驅動開發,主要文章目錄如下 持續更新中 01 第乙個核心模組程式 02 註冊字元裝置驅動 03 open close 函式的應用 04 read write 函式的應用 05 ioctl 的應用 06 ioctl led燈硬體分析 07 ioctl 控制l...

驅動 linux裝置驅動 字元裝置驅動開發

preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...

字元裝置驅動開發

一 驅動模組的載入和解除安裝 linux 驅動有兩種執行方式,第一種就是將驅動編譯進 linux 核心中,這樣當 linux 核心啟動的時候就會自動執行驅動程式。第二種就是將驅動編譯成模組 linux 下模組擴充套件名為 ko 在 linux 核心啟動以後使用 insmod 命令載入驅動模組。在除錯...