www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > Linux閱碼場
[導讀]本文主要講解文件系統(tǒng)掛載核心邏輯,暫不涉及掛載命名空間和綁定掛載等內容(后面的內容可能會涉及),且以ext2磁盤文件系統(tǒng)為例講解掛載。

1.開場白

  • 環(huán)境:處理器架構:arm64內核源碼:linux-5.11ubuntu版本:20.04.1代碼閱讀工具:vim ctags cscope
我們知道,Linux系統(tǒng)中我們經常將一個塊設備上的文件系統(tǒng)掛載到某個目錄下才能訪問這個文件系統(tǒng)下的文件,但是你有沒有思考過:為什么塊設備掛載之后才能訪問文件?掛載文件系統(tǒng)Linux內核到底為我們做了哪些事情?是否可以不將文件系統(tǒng)掛載到具體的目錄下也能訪問?下面,本文將詳細講解Linxu系統(tǒng)中,文件系統(tǒng)掛載的奧秘。
注:本文主要講解文件系統(tǒng)掛載核心邏輯,暫不涉及掛載命名空間和綁定掛載等內容(后面的內容可能會涉及),且以ext2磁盤文件系統(tǒng)為例講解掛載。本專題文章分為上下兩篇,上篇主要介紹掛載全貌以及具體文件系統(tǒng)的掛載方法,下篇介紹如何通過掛載實例關聯掛載點和超級塊。

2. vfs 幾個重要對象

在這里我們不介紹整個IO棧,只說明和文件系統(tǒng)相關的vfs和具體文件系統(tǒng)層。我們知道在Linux中通過虛擬文件系統(tǒng)層VFS統(tǒng)一所有具體的文件系統(tǒng),提取所有具體文件系統(tǒng)的共性,屏蔽具體文件系統(tǒng)的差異。VFS既是向下的接口(所有文件系統(tǒng)都必須實現該接口),同時也是向上的接口(用戶進程通過系統(tǒng)調用最終能夠訪問文件系統(tǒng)功能)。
下面我們來看下,vfs中幾個比較重要的結構體對象:

2.1 file_system_type

這個結構來描述一種文件系統(tǒng)類型,一般具體文件系統(tǒng)會定義這個結構,然后注冊到系統(tǒng)中;定義了具體文件系統(tǒng)的掛載和卸載方法,文件系統(tǒng)掛載時調用其掛載方法構建超級塊、跟dentry等實例。
文件系統(tǒng)分為以下幾種:
1)磁盤文件系統(tǒng)
文件在非易失性存儲介質上(如硬盤,flash),掉電文件不丟失。
如ext2,ext4,xfs
2)內存文件系統(tǒng)
文件在內存上,掉電丟失。
如tmpfs
3)偽文件系統(tǒng)
是假的文件系統(tǒng),是利用虛擬文件系統(tǒng)的接口(可以對用戶可見如proc、sysfs,也可以對用戶不可見內核可見如sockfs,bdev)。
如proc,sysfs,sockfs,bdev
4)網絡文件系統(tǒng)
這種文件系統(tǒng)允許訪問另一臺計算機上的數據,該計算機通過網絡連接到本地計算機。
如nfs文件系統(tǒng)
結構體定義源碼路徑:include/linux/fs.h 2226

2.2 super_block

超級塊,用于描述塊設備上的一個文件系統(tǒng)總體信息(如文件塊大小,最大文件大小,文件系統(tǒng)魔數等),一個塊設備上的文件系統(tǒng)可以被掛載多次,但是內存中只能有個super_block來描述(至少對于磁盤文件系統(tǒng)來說)。
結構體定義源碼路徑:include/linux/fs.h 1414

2.3 mount

掛載描述符,用于建立超級塊和掛載點等之間的聯系,描述文件系統(tǒng)的一次掛載,一個塊設備上的文件系統(tǒng)可以被掛載多次,每次掛載內存中有一個mount對象描述。
結構體定義源碼路徑:fs/mount.h 39

2.4 inode

索引節(jié)點對象,描述磁盤上的一個文件元數據(文件屬性、位置等),有些文件系統(tǒng)需要從塊設備上讀取磁盤上的索引節(jié)點,然后在內存中創(chuàng)建vfs的索引節(jié)點對象,一般在文件第一次打開時創(chuàng)建。
結構體定義源碼路徑:include/linux/fs.h 610

2.5 dentry

目錄項對象,用于描述文件的層次結構,從而構建文件系統(tǒng)的目錄樹,文件系統(tǒng)將目錄當作文件,目錄的數據由目錄項組成,而每個目錄項存儲一個目錄或文件的名稱和索引節(jié)點號等內容。每當進程訪問一個目錄項就會在內存中創(chuàng)建目錄項對象(如ext2路徑名查找中,通過查找父目錄數據塊的目錄項,找到對應文件/目錄的名稱,獲得inode號來找到對應inode)。
結構體定義源碼路徑:include/linux/dcache.h 90

2.6 file

文件對象,描述進程打開的文件,當進程打開文件時會創(chuàng)建文件對象加入到進程的文件打開表,通過文件描述符來索引文件對象,后面讀寫等操作都通過文件描述符進行(一個文件可以被多個進程打開,會由多個文件對象加入到各個進程的文件打開表,但是inode只有一個)。
結構體定義源碼路徑:include/linux/fs.h 915

3. 掛載總體流程

3.1系統(tǒng)調用處理

用戶執(zhí)行掛載是通過系統(tǒng)調用路徑進入內核處理,拷貝用戶空間傳遞參數到內核,掛載委托do_mount。
//fs/namespace.c
SYSCALL_DEFINE5(mount
參數:
dev_name 要掛載的塊設備
dir_name 掛載點目錄
type 文件系統(tǒng)類型名
flags 掛載標志
data 掛載選項
-> kernel_type = copy_mount_string(type);   //拷貝文件系統(tǒng)類型名到內核空間
-> kernel_dev = copy_mount_string(dev_name) //拷貝塊設備路徑名到內核空間 -> options = copy_mount_options(data) //拷貝掛載選項到內核空間
-> do_mount(kernel_dev, dir_name, kernel_type, flags, options)  //掛載委托do_mount

3.2  掛載點路徑查找

掛載點路徑查找,掛載委托path_mount
do_mount
-> user_path_at(AT_FDCWD, dir_name, LOOKUP_FOLLOW,
本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉