linux scull 中的設備注冊


在內部, scull 使用一個 struct scull_dev 類型的結構表示每個設備. 這個結構定義為:

 

struct scull_dev {

struct scull_qset *data;  /* Pointer to first quantum set */ int quantum;              /* the current quantum size */

int qset;  /* the current array size */

unsigned long size;  /* amount of data stored here */

unsigned int access_key;  /* used by sculluid and scullpriv */ struct semaphore sem;         /* mutual exclusion semaphore  */ struct cdev cdev; /* Char device structure */

};

 

我們在遇到它們時討論結構中的各個成員, 但是現在, 我們關注於 cdev, 我們的設備與內 核接口的 struct cdev. 這個結構必須初始化並且如上所述添加到系統中; 處理這個任務 的 scull 代碼是:

 

static void scull_setup_cdev(struct scull_dev *dev, int index)

{

int err, devno = MKDEV(scull_major, scull_minor + index);

 

cdev_init(&dev->cdev, &scull_fops); dev->cdev.owner = THIS_MODULE;

dev->cdev.ops = &scull_fops;

err = cdev_add (&dev->cdev, devno, 1);

 

/* Fail gracefully if need be */ if (err)

printk(KERN_NOTICE "Error %d adding scull%d", err, index);

}

 

因為 cdev 結構嵌在 struct scull_dev 里面, cdev_init 必須調用來進行那個結構的初 始化.


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: