註冊字元裝置
核心內部使用struct cdev型別的結構來代表字元裝置。要讓核心能提調你的驅動程式提供的作業方法,你必須配置並註冊一或多個struct cdev。為此你的程式必須引入
struct cdev *my_cdev = cdev_alloc();
my_cdev->ops = &my_fops;
然而,如果你的驅動程式需要將cdev嵌在自己設計的一個特殊資料結構中,在這種情形下,就必須使用cdev_init()函式來初始化所得到的cdev;
void cdev_init(struct cdev *dev,struct file_operations *fops);
無論用哪一種方法初始化struct cdev,你都必須自己設定他的另一個欄位:owner。如同file_operations結構,struct cdev的owner欄位應該要被設定為THIS_MODULE。 準備好cdev結構後,最後一步就是以cdev_add()的方式將它加入核心:
int cdev_add(struct cdev *dev, dev_t num, unsigned count);
此處的dev式設定好的cdev結構,num是第一個裝置編號,count是裝置編號的總數。通常count是設定為1,除非驅動程式要應付多個裝置編號。範例:
static struct cdev devone_cdev;
static dev_t devone_dev;
int err = 0;
cdev_init(&devone_cdev,&devone_fops);
devone_cdev.owner = THIS_MODULE;
devone_cdev.ops = &devone_fops;
err=cdev_add(&devone_cdev,MKDEV(major,minor),1);
if(err) printk(KERN_NOTICE "Error %d adding scull%d", err, index);
要註銷cdev,只要呼叫cdev_del()即可,
void dcdev_del(struct cdev *dev);