cdev alloc和cdev init 的使用

2021-08-03 19:57:04 字數 1132 閱讀 2520

1.核心結構體定義:

struct cdev ;

2.兩種定義初始化方式:靜態的(在stack中生成物件)和動態的(在heap中生成物件)。

靜態記憶體定義初始化:

struct cdev my_cdev;//變數在stack中

cdev_init(&my_cdev, &fops);

my_cdev.owner = this_module;

動態記憶體定義初始化:

struct cdev *ptr_my_cdev = cdev_alloc();//變數在heap中

ptr_my_cdev ->ops = &fops;

ptr_my_cdev ->owner = this_module;

錯誤的定義初始化方式:

struct cdev *ptr_my_cdev = cdev_alloc();//變數在heap中

cdev_init(ptr_my_cdev 

, &fops);

ptr_my_cdev 

->owner = this_module;

錯誤原因分析:

相關函式原始碼如下:

struct cdev *cdev_alloc(void)

return p;

}void cdev_init(struct cdev *cdev, const struct file_operations *fops)

static void cdev_default_release(struct kobject *kobj)

static void cdev_dynamic_release(struct kobject *kobj)

static struct kobj_type ktype_cdev_default = ;

static struct kobj_type ktype_cdev_dynamic = ;

4.另類的定義初始化方式:

struct cdev my_cdev;//變數在stack中

struct cdev *ptr_my_cdev = &my_cdev;

cdev_init(ptr_my_cdev , &fops);

ptr_my_cdev ->owner = this_module;

和 區別和聯絡, 和 區別和聯絡

和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...

rpx和樣式和class和flex

5 style 靜態的樣式統一寫到 class 中。style 接收動態的樣式,在執行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。例 6 class 用於指定樣式規則,其屬性值是樣式規則中類選擇器名 樣式類名 的集合,樣式類名不需要帶上.樣式類名之間用空格分隔。關於f...

if和switch和for語句

if和switch很像。具體什麼場景下,應用那個語句呢?如果判斷的具體數值不多,而是符合byte,short,int,char,字串。這五種型別。雖然兩個語句都可以使用,建議使用switch語句,因為效率稍高。其他情況,對區間判斷,對結果為boolean型別判斷,使用if,if的使用範圍更廣。whi...