Linux設備驅動程序 之 open和release


open方法

open方法提供給驅動程序以初始化的能力,在大部分驅動程序匯總,open應該完成以下工作:

1. 檢查特定設備的錯誤,如設備為准備就緒或者硬件問題;

2. 如果設備是首次打開,則對其進行初始化;

3. 如有必要,更新f_op指針;

4. 分配並填寫置於filp->private_data里面的數據結構;

 

open方法的原型如下:

1 int (*open) (struct inode *, struct file *);

其中inode參數在其i_cdev字段中包含了我們所需要的信息,即我們先前設置的cdev結構;

release方法

release方法的作用正好與open相反,這個方法完成以下工作:

1. 釋放由open分配的、保存的filp->private_data中的所有內容;

2. 在最后一次關閉操作時關閉設備;

 

release方法的原型如下:

1 int (*release) (struct inode *, struct file *);

 

close系統調動與release方法

並不是每個close系統調用都會引起對release方法的調用,只有那些真正釋放設備數據結構的close調用才會調用這個方法。內核對每個file結構維護一個引用計數器;無論是fork還是dup,都不會創建數據結構(僅由open創建),它們只是增加了已有數據結構中的計數;只有在file結構的計數器為0時,close系統調用才會執行release方法,這只是刪除結構是才發生;release和close的關系保證了對於每次open驅動程序,只有一次release調用;

flush在應用程序每次調用close時都會被調用;

內核在進程退出的時候,通過在內部使用close系統調用自動關閉所有相關文件;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM