簡體   English   中英

關於如何為 Linux 字符設備驅動程序設置文件操作的困惑

[英]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 -> opsfile -> f_op

這些字段是否引用了每個設備的相同file_operations結構?

我還意識到我可能能夠更改file_operations結構的值。 如果我決定編輯結構中的字段,退出open()函數后是否會反映更改? 如果是這樣,此功能的意義何在?

對不起,如果我在這篇文章中要求太多。 任何幫助將不勝感激!

上面 Ian Abbott 的評論基本上回答了我的問題。

當它到達open()函數時, file->f_opinode->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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM