字元裝置驅動學習之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再一次初始化,進而提高效率。
相關文章
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- LED字元裝置驅動字元
- liunx驅動之字元裝置的註冊字元
- 字元驅動裝置踩坑字元
- mtd裝置驅動(待學習)
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- 字元裝置驅動——申請、建立、應用.字元
- ArmSoM系列板卡 嵌入式Linux驅動開發實戰指南 之 字元裝置驅動Linux字元
- Linux驅動實踐:你知道【字元裝置驅動程式】的兩種寫法嗎?Linux字元
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- 非同步通知和MISC裝置驅動非同步
- Linux驅動之I2C匯流排裝置以及驅動Linux
- linux驅動之獲取裝置樹資訊Linux
- 無作業系統時的裝置驅動和有作業系統時的裝置驅動作業系統
- 驅動Driver-MISC雜項驅動裝置
- 【linux】驅動-7-平臺裝置驅動Linux
- Linux驅動之裝置樹的基礎知識Linux
- platform 裝置驅動實驗Platform
- 【linux】驅動-6-匯流排-裝置-驅動Linux
- 在Linux中,什麼是裝置驅動程式?如何安裝和解除安裝裝置驅動程式?Linux
- 字元驅動框架字元框架
- 新字元驅動框架驅動LED字元框架
- 05_雜項裝置驅動
- linux 裝置驅動基本概念Linux
- win10驅動未知裝置怎麼辦_win10裝置管理器驅動未知裝置處理方法Win10
- 作業系統——裝置驅動和檔案系統作業系統
- pci匯流排驅動及pci裝置驅動註冊
- 裝置驅動程式包可以刪除嗎 win10裝置驅動程式包能刪嗎Win10
- 裝置樹學習
- iOS 裝置驅動 for windows 32&64iOSWindows
- linux裝置驅動編寫入門Linux
- platform_driver驅動及裝置驅動匹配識別符號Platform符號
- Linux驅動實踐:如何編寫【 GPIO 】裝置的驅動程式?Linux
- 裝置樹下的 LED 驅動實驗
- 【Linux SPI】RFID RC522 裝置驅動Linux
- 【linux】驅動-9-裝置樹外掛Linux
- 網路安全裝置概念的熟悉和學習
- Linux的匯流排-裝置-驅動三者之間的關係和框架的理解Linux框架