char dev 創立節點
以下是參考完網路上的一些資訊以及source code之後寫下的紀錄
以char dev的註冊流程來說,註冊編號似乎是第一步驟。
以char dev的註冊流程來說,註冊編號似乎是第一步驟。
這偏要說明create cdev node in /dev and /sys/class/ 下的方法:
首先要註冊cdev 的編號,kernel提供了三種方法來註冊,register_chrdev_region(), alloc_chrfev_region(), register_chrdev(),下面會分別說明這三個函式。
在說明這三個函式之前要先了解一下char_device_struct的struct,定義如下:
在說明這三個函式之前要先了解一下char_device_struct的struct,定義如下:
static struct char_device_struct {
struct char_device_struct *next; // 指向char_device_struct 中下一個元素的指標
unsigned int major; // Major Number
unsigned int baseminor; // Minor Number的起始號碼
int minorct; // 設備編號的範圍大小
char name[64]; // 處理該設備編號範圍內的設備驅動的名稱
struct file_operations *fops; //
struct cdev *cdev; // 指向cdev driver descriptor的指標
} *chrdevs[CHRDEV_MAJOR_HASH_SIZE];
struct char_device_struct *next; // 指向char_device_struct 中下一個元素的指標
unsigned int major; // Major Number
unsigned int baseminor; // Minor Number的起始號碼
int minorct; // 設備編號的範圍大小
char name[64]; // 處理該設備編號範圍內的設備驅動的名稱
struct file_operations *fops; //
struct cdev *cdev; // 指向cdev driver descriptor的指標
} *chrdevs[CHRDEV_MAJOR_HASH_SIZE];
留言
張貼留言