中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux內核設備驅動之虛擬文件系統的示例分析

發布時間:2021-07-14 11:51:24 來源:億速云 閱讀:178 作者:小新 欄目:服務器

小編給大家分享一下Linux內核設備驅動之虛擬文件系統的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

/********************
 * 虛擬文件系統VFS
 ********************/

(1)VFS介紹

虛擬文件系統VFS作為內核的子系統,為用戶空間程序提供了文件系統的相關接口。

VFS使得用戶可以直接使用open()等系統調用而無需考慮具體文件系統和實際物理介質。

VFS提供了一個通用的文件系統模型,該模型囊括了我們所能想到的文件系統的常用功能和行為。通過這個抽象層,就可以實現利用通用接口對所有類新的文件系統進行操作。

a.調用模型

write(): 用戶空間 -->

sys_write(): VFS -->

文件系統的寫方法: 文件系統 -->

物理介質

(2)VFS采用的主要對象

VFS采用了面向對象的思路,采用一組數據結構來代表通用的文件對象。

這些結構體在包含數據的同時也包含了操作這些數據的指針。

VFS中包括了四個主要的對象類型。

a.超級塊對象super_block

所有文件系統都必須實現超級塊,該對象用于存儲特定文件系統的信息,通常存儲在磁盤的特定扇區中,每個文件系統只有一個超級塊。

對于不基于磁盤的文件系統,比如基于內存的文件系統sysfs,linux會在使用現場創建超級塊并將其保存到內存中。

超級塊的結構體為super_block,定義在<linux/fs.h>。

超級塊的操作方法結構體為super_operations,也定義在fs.h中。

創建、管理和銷毀超級塊對象的代碼位于/fs/super.c。

在文件系統安裝時,內核會調用alloc_super()函數從磁盤讀取文件系統超級塊,并將其信息填充到內存中的超級塊對象中。

b.索引節點對象inode

索引節點對象包含了內核在操作文件或目錄是需要的全部信息,如文件的訪問控制權限,大小,擁有者,創建時間等。

系統把這些信息存儲在一個單獨的數據結構中,稱為索引節點。

一個文件在內存中只有一個索引節點對象,特殊文件(比如管道和設備文件)也有其對應的索引節點。

inode結構體定義在<linux/fs.h>,其對應的操作函數結構體為inode_operations

c.目錄項對象dentry

每個目錄項對象代表一個路徑中的特定部分,比如路徑/bin/vi,/、bin和vi都屬于目錄項對象。

目錄項對象沒有對應的磁盤結構,VFS根據字符串形式的路徑名現場創建。每個文件只對應一個dentry對象。

dentry結構體定義在<linux/dcache.h>中,對應的目錄項操作函數結構體dentry_operations也定義在<linux/dcache.h>中。

d.文件對象file

文件對象表示進程已經打開的文件。這個對象在open的時候創建,在close的時候銷毀。

因為多個進程可以同時打開和操作一個文件,所以一個文件可能在內存中有多個file對象。

文件對象由file結構體表示,定義在<linux/fs.h>中。file對象的操作函數結構體為file_operations,定義在<linux/fs.h>中。

這個函數集非常重要,其中包括了對文件的實際操作函數,用戶空間調用write,最終會調用到file_operations里的write。

我們要實現一個char類型的字符設備,也就是要實現file_operations中支持的函數。

以上是“Linux內核設備驅動之虛擬文件系統的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金堂县| 和龙市| 太白县| 宜兰市| 科技| 淮阳县| 章丘市| 鲁山县| 张家口市| 福海县| 樟树市| 望都县| 宣城市| 罗山县| 从江县| 台东市| 景谷| 青河县| 双城市| 连城县| 安陆市| 若尔盖县| 宣威市| 涟源市| 长葛市| 乾安县| 铁岭县| 肇东市| 林周县| 新蔡县| 务川| 潼南县| 岳西县| 莎车县| 清镇市| 盘锦市| 都江堰市| 广丰县| 增城市| 嘉义县| 万全县|