使用cdev add註冊字元裝置

2021-10-12 12:41:23 字數 1247 閱讀 5895

實際上register chrdev函式呼叫了 cdev_add函式。在linux核心中的字元裝置用cdev 結構來描述,其定項如下:

struct cdev

{struct kobject kobj;

struct module *owner; 〃所屬模組

const struct file operations *ops; //檔案操作結構

struct list head list;

dev_tdev; 〃裝置號,int型別,高12位為主裝置號,低20位為次裝置號 unsigned int count;

下面一組函式用來對cdev結構進行操作:

struct cdev *cdev_alloc(void);//分配乙個 cdev

void cdev_init(struct cdev *, const struct file operations *)//初始化 cdev 的 file operation void cdev_put(struct cdev *p);//〃減少使用計數 〃註冊裝置,通常發生在驅動模組的載入函式中 int cdev_add(struct cdev *p, dev t dev, unsigned count);

〃登出近備,通常發生在驅動蘿塊的解除安裝函式中

void cdev del(struct cdev *p);

使用 cdev add 註冊字元裝置前應該先呼叫 register chrdev region 或 alloc_chrdev_region 分配裝置號。register chrdevregion函式用於指定裝置號的情況,alloc chrdev region函式用 於動態申請裝置號,系統自動返回沒有占用的裝置號。

int register_chrdev_region(dev_t from, unsigned count, const char *name);

int alloc_chrdev_region(dev_t *dev,unsigned baseminor,unsigned count,const char *name);

register_chrdev region 函式申請從 from 開始的 count 個主裝置號。alloc chrdev region 申 請乙個動態主裝置號,並申請一系列次裝置號。baseminor是起始次裝置號,count為次裝置 號的數量。登出裝置號(cdev_del)後使用unregister chrdev region:

void unregister_chrdev_region(dev_t from,unsigned count);

字元裝置的註冊

核心中每個字元裝置都對應乙個 cdev 結構的變數,下面是它的定義 struct cdev 乙個 cdev 一般它有兩種定義初始化方式 靜態的和動態的。靜態記憶體定義初始化 struct cdev my cdev cdev init my cdev,fops my cdev.owner this m...

字元裝置的註冊

前面提到,核心內部使用struct cdev結構來表示字元裝置。在核心呼叫裝置的操作之前,必須分配並註冊乙個或者多個上述結構。在 linux cdev.h 中定義了這個結構以及與其相關的一些輔助函式。如果需要動態的初始化,應該編寫如下 struct cdev my cdev cdev alloc m...

02 註冊字元裝置驅動

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