[英]Confusion regarding how exactly file operations get set up for a Linux Character Device Driver
我目前正在閱讀 Oreilly 的 Linux 設備驅動程序第 3 卷,我有一個關於為特定設備驅動程序設置文件操作的問題。
我目前的理解是,在Linux的字符設備驅動中,cdev結構體需要在設備驅動初始化函數中進行分配,並傳遞給int cdev_add(struct cdev *dev, dev_t num, unsigned int count);
.
完成這一切后,內核現在將struct file_operations
指定的文件操作與添加的struct cdev
相關聯。
當我試圖了解設備驅動程序open(struct inode *, struct file *)
函數中發生了什么時,我感到困惑。 我們得到了一個文件指針和一個 inode 指針。 這兩個結構都包含struct file_operations *
字段,一個在inode -> i_cdev -> ops
和file -> f_op
。
這些字段是否引用了每個設備的相同file_operations
結構?
我還意識到我可能能夠更改file_operations
結構的值。 如果我決定編輯結構中的字段,退出open()
函數后是否會反映更改? 如果是這樣,此功能的意義何在?
對不起,如果我在這篇文章中要求太多。 任何幫助將不勝感激!
上面 Ian Abbott 的評論基本上回答了我的問題。
當它到達
open()
函數時,file->f_op
和inode->i_cdev->ops
應該指向驅動程序中相同的struct file_operations
。 在open()
修改 struct file_operations 的內容不是一個好主意,但是可以使用fops_get()
和replace_fops()
的組合切換file->f_op
以指向不同的struct file_operations
。 有關misc_open()
請參見“drivers/char/misc.c”中的misc_open()
。 – 伊恩·雅培 10 小時
謝謝!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.