轉個scull筆記

2021-09-30 05:57:06 字數 1965 閱讀 6298

ldd3原始碼學習筆記之scull_main

/*scull.h*/

/*main.c*/

/*****************************************=*/

/*標頭檔案相關定義*/

1.定義scull_dev結構體用來描述scull裝置儲存結構

/*主函式流程分析*/

1.在程式的開始處使用module_param定義模組引數

2.初始化模組module_init(scull_init_module);/*注意這裡標記化結構體初始化的語法*/

c.cdev的初始化,指定所有者 dev->cdev.owner = this_module;

d.註冊cdev cdev_add (&dev->cdev, devno, 1);

(4)初始化其他相關友好的裝置/*這裡是指pipe和有open control機制的裝置實現,本次不學習*/

(5)呼叫scull_create_proc建立通過proc檔案的debug機制需要的proc檔案

/*注意:這裡使用goto的方式對每步驟出現的錯誤進行恢復*/

呼叫scull_cleanup_module進行上述步驟的錯誤退出.

}3.退出並登出模組module_exit(scull_cleanup_module)

4.關於對裝置讀寫等的file-ops函式的定義()

(2)release()

(3)read()

(4)write()

(5)llseek()

5.iotcl的實現()

}/*****************************************=*/

/*收穫*/

/*****************************************=*/

1.怎麼用巨集定義來實現debug除錯()

/*--------------------------------*/

2.ioctl向驅動程式發出請求在驅動中的實現()

/*--------------------------------*/

3.裝置訪問區域使用semaphore實現mutual exclusion的流程()

/*--------------------------------*/

4.怎麼建立通過proc的debug機制();

2.建立file-ops需要的函式open,同時也註冊好上述seq的ops

static int scull_proc_open(struct inode *inode, struct file *file)

/*由於seq檔案(iterator)需要特別的尋找方法,即seq ops提供的*/

3.建立檔案ops結構體,指定對該檔案的相關操作的函式

static struct file_operations scull_proc_ops = ;/*使用seq的函式*/

4.建立真實的檔案,並指定檔案的ops

entry = create_proc_entry("scullseq", 0, null);

if (entry)

entry->proc_fops = &scull_proc_ops;

關於登出對應檔案兩種方法的做法是相同的

remove_proc_entry("name", null /* parent dir */);

/*注意對裝置有互斥鎖部分訪問時候的down up機制的運用.*/

}/*****************************************=*/

/*遺留*/

/*****************************************=*/

1. 主函式分析 2->(4)步驟涉及用pipe實現和有open control機制,本次暫不學習

類似的有3->(7)

/*****************************************=*/

理解scull裝置

scull裝置是乙個操作記憶體的字元裝置,不是真正的裝置,只是向核心註冊為字元裝置,並使用記憶體來訪問資料。當使用者向其中寫資料時,它就申請空閒記憶體來存放使用者資料 當使用者讀取其資料時,便按順序讀取資料。接下來兩個結構貫穿整個驅動,理解它是很必要的。struct scull qset struc...

scull驅動學習!

linux裝置裝置驅動程式 第三版 學習筆記之一 scull裝置的使用 by 吳垠 date 2007 07 05 email lazy.fox.wu gmail.com homepage 1.寫在前面 a.在進行下面的工作之前請先閱讀我 的文章 在 linux 2.6核心下編譯可以載入的核心模組 ...

SCULL簡單執行測試

上次把scull編譯和鏈結都完成了,後來一直沒有時間仔細看 和使用一下,今天抽出時間來用了一把,有些小心得,自己記錄一下 1.安裝scull可以通過insmod或者自帶的那個scull load指令碼,指令碼預設沒有執行許可權,所以需要chmod x一把 2.安裝完之後,在系統中可以用ls l de...