第一天,linux裝置驅動 字元裝置(雜)

2021-09-26 19:59:37 字數 1307 閱讀 4207

1.mkdev(int major, int minor)

巨集則可以通過主裝置號和次裝置號生成dev_t

dev_t是cdev結構體的成員變數,表示裝置號

cdev描述乙個字元裝置

2.container_of()

container_of()的作用是通過結構體成員的指標找到對應結構體的指標,

類似實現

#define nodeparent(node,parent,name) (parent *)((uint32_t)node - (uint32_t)&(parent *)0->name)

3.register_chrdev_region

ret = register_chrdev_region(devno, device_num, 「globalmem」);

ret = alloc_chrdev_region(&devno, 0, device_num, 「globalmem」);

register_chrdev_region()函式用於已知起始裝置的裝置號的情況,而alloc_chrdev_region()用於設 備號未知,向系統動態申請未被占用的裝置號的情況,函式呼叫成功之後,會把得到的裝置號放入第乙個 引數dev中。

失敗返回<0的乙個數

4.kzalloc(sizeof(struct globalmem_dev) * device_num, gfp_kernel);

kzalloc()申請了乙份globalmem_dev結構體的記憶體並清0。成功返回0,失敗記得登出裝置號,一般使用goto

5.gfp_kernel作用

————————————————

gfp_kernel是linux記憶體分配器的標誌,標識著記憶體分配器將要採取的行為。

分配器標誌分為行為修飾符,區修飾符及型別。行為修飾符表示核心應當如何分配所需的記憶體。

區修飾符表示記憶體區應當從何處分配。型別就是行為修飾符和區修飾符的合體。

6.globalmem_setup_cdev

globalmem_setup_cdev(globalmem_devp, 0);通過申請的到結構體內存將得到

cdev_add()函式和cdev_del()函式分別向系統新增和刪除乙個cdev,完成字元裝置的註冊和注 銷。

7.模組載入函式以「module_init(函式名)」的形式被指定。它返回整型值,若初始化成功,應返回0。 而在初始化失敗時,應該返回錯誤編碼。

畢設第一天小記

其實已經不是第一天了,已經過去了幾天,之所以選擇今天來記錄是因為昨天經歷了一些事情。首先我要坦白,我是乙個不優秀的人,相對所有主動學習的東西來說,我沒有什麼創新能力。可以說死記硬背是我的 強項 其實也不算,因為我的記憶力也不好。可能只有有一些我感興趣的東西才能記得住。算了,不說這些,我還是想說說我的...

linux學習第一天

shell unix作業系統 bash linux作業系統 本質 根據命令的名字,呼叫對應的可執行程式 1.命令補齊和路勁補齊都是用的tab這個按鍵 2.ctrl p,ctrl n 乙個是向上查詢命令,乙個是向下查詢命令 當然這個是在歷史記錄當中 3.游標移動位置 向左ctrl b,向右ctrl f...

Linux第一天筆記

1 linux指一套免費使用和自由傳播的類unix作業系統。linux一切皆檔案!2 fsf free software foundation 自由軟體聯盟 gnu gun s not unix general public license gpl 3 linux核心版本格式是x.y.zz www,...