字元裝置驅動學習之cdev_init和cdev_alloc
剛開始學習字元裝置驅動,看到核心中有的程式碼使用cdev_alloc函式申請了記憶體後使用了cdev_init函式初始化,有的則是直接對結構體變數ops賦值。分別人如下
我是分割線//
為了瞭解為什麼可以不使用cdev_init函式,找到原始碼,把cdev_alloc和cdev_alloc對比後發現cdev_alloc已經處理了cdev_init中的很多事情,所以可以在使用了cdev_alloc後,只初始化在cdev_init中沒有處理的部分。
下面先看一下cdec_alloc函式原型和cdev_init函式原型
struct cdev *cdev_alloc(void)
{
struct cdev *p = kzalloc(sizeof(struct cdev), GFP_KERNEL);
if (p) {
INIT_LIST_HEAD(&p->list);
kobject_init(&p->kobj, &ktype_cdev_dynamic);
}
return p;
}
void cdev_init(struct cdev *cdev, const struct file_operations *fops)
{
memset(cdev, 0, sizeof *cdev);
INIT_LIST_HEAD(&cdev->list);
kobject_init(&cdev->kobj, &ktype_cdev_default);
cdev->ops = fops;
}
對比後可以發現,兩者起始非常相似。
cdev_alloc函式使用裡的kzalloc申請了記憶體並且內部把申請到的記憶體清零了。
經過對比可以發現,如果使用了cdev_alloc函式申請的記憶體,可以在下面直接對ops變數賦值,而不需要呼叫cdev_init再一次初始化,進而提高效率。
相關文章
- Linux裝置驅動之字元裝置驅動Linux字元
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- 深入淺出:Linux裝置驅動之字元裝置驅動Linux字元
- 蛻變成蝶:Linux裝置驅動之字元裝置驅動Linux字元
- 蛻變成蝶~Linux裝置驅動之字元裝置驅動Linux字元
- LED字元裝置驅動字元
- liunx驅動之字元裝置的註冊字元
- 字元驅動裝置踩坑字元
- mtd裝置驅動(待學習)
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- 乾坤合一:Linux裝置驅動之USB主機和裝置驅動Linux
- 乾坤合一:Linux裝置驅動之塊裝置驅動Linux
- 字元裝置驅動——申請、建立、應用.字元
- linux核心cdev_init系列函式(字元裝置的註冊)Linuxdev函式字元
- 驅動學習之驅動和應用的介面
- ArmSoM系列板卡 嵌入式Linux驅動開發實戰指南 之 字元裝置驅動Linux字元
- Windows裝置和驅動的安裝Windows
- 基於宋寶華老師的字元裝置驅動字元
- Linux裝置驅動程式學習之分配記憶體Linux記憶體
- 非同步通知和MISC裝置驅動非同步
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- Linux驅動實踐:你知道【字元裝置驅動程式】的兩種寫法嗎?Linux字元
- 嵌入式Linux驅動學習筆記(十六)------裝置驅動模型(kobject、kset、ktype)Linux筆記模型Object
- Linux裝置驅動之非同步通知和非同步I/OLinux非同步
- linux驅動之獲取裝置樹資訊Linux
- 無作業系統時的裝置驅動和有作業系統時的裝置驅動作業系統
- 驅動Driver-MISC雜項驅動裝置
- Linux驅動之I2C匯流排裝置以及驅動Linux
- Linux塊裝置驅動Linux
- 蛻變成蝶:Linux裝置驅動之DMALinux
- 字元裝置、塊裝置、裸裝置、RAW裝置 .字元
- 【linux】驅動-7-平臺裝置驅動Linux
- Linux的input輸入子系統:裝置驅動之按鍵驅動Linux
- 字元裝置、塊裝置與裸裝置字元
- 簡單linux字元裝置驅動程式與程式設計小技巧(上)Linux字元程式設計
- Linux驅動之裝置樹的基礎知識Linux
- 【linux】驅動-6-匯流排-裝置-驅動Linux
- platform裝置驅動全透析 薦Platform