Linux那些事兒之我是Sysfs 6 檔案系統

2021-04-13 08:29:55 字數 1450 閱讀 8840

接下來,我們進入sysfs部分。看看

kobject_add()->create_dir()->sysfs_create_dir()

bus create file->sysfs create file()

. . .

這些sysfs函式的內幕。

說白了,sysfs就是利用vfs的介面去讀寫kobject的層次結構,建立起來的檔案系統。關於sysfs的內容就在fs/sysfs/下。 kobject的層次結構的更新與刪除就是那些亂七八糟的xx_register()們幹的事情。

在kobject_add()裡面,呼叫了sysfs_create_dir()。讓我們看看它究竟是如何create的。

135 int sysfs_create_dir(struct kobject * kobj)

136

當你看見這麼些新東西,如dentry出現的時候,你一定感到很困惑。誠然,我一度為**中突然出現的事物感到恐慌,人類對未知的恐懼是與生俱來的,面對死亡,面對怪力亂神,我們抱著一顆敬畏的心靈就可以了。而面對linux,我們始終堅信,未知肯定是可以被探索出來的。妖是妖他媽生的,**是人他媽寫出來的,既然寫得出來,那就肯定看得懂。對不起,扯遠了....我還是介紹介紹檔案系統的基本知識先。

檔案系統

檔案系統是個很模糊廣泛的概念,"檔案"狹義地說,是指磁碟檔案,廣義理解,可以是有組織有次序地儲存與任何介質(包括記憶體)的一組資訊。linux把所有的資源都看成是檔案,讓使用者通過乙個統一的檔案系統操作介面,也就是同一組系統呼叫,對屬於不同檔案系統的檔案進行操作。這樣,就可以對使用者程式隱藏各種不同檔案系統的實現細節,為使用者程式提供了乙個統一的,抽象的,虛擬的檔案系統介面,這就是所謂"vfs(virtual filesystem switch)"。這個抽象出來的介面就是一組函式操作。

我們要實現一種檔案系統就是要實現vfs所定義的一系列介面,file_operations, dentry_operations, inode_operations等,供上層呼叫。file_operations是對每個具體檔案的讀寫操作,dentry_operations, inode_operations則是對檔案的屬性,如改名字,建立或刪除的操作。

struct file_operations ;

struct dentry_operations ;

struct inode_operations

舉個例子,我們寫c程式,open(「hello.c」, o_rdonly),它通過系統呼叫的流程是這樣的

open() ->       /*使用者空間*/

-> 系統呼叫->

sys_open() -> filp_open()-> dentry_open() ->  file_operations->open()           /*核心空間*/

不同的檔案系統,呼叫不同的file_operations->open(),在sysfs下就是sysfs_open_file()。

Linux那些事兒之我是EHCI 引子

轉眼之間,到了2008年,先祝大家新年快樂,希望新的一年裡好運連連,工資猛漲。好久沒有寫了,乙個原因在於,作 為乙個phd學生,難免要做一些讀 寫 的瑣事,另乙個原因就是自己太懶了。大哥甲一如既往,堅持的寫作,著實讓人欽佩。此時此刻,我情 不自禁,作詩一首,北飄奇男子,江南大丈夫。海上常常生明月,江...

Linux那些事兒之我是EHCI 引子

轉眼之間,到了2008年,先祝大家新年快樂,希望新的一年裡好運連連,工資猛漲。好久沒有寫了,乙個原因在於,作為乙個phd學生,難免要做一些讀 寫 的瑣事,另乙個原因就是自己太懶了。大哥甲一如既往,堅持的寫作,著實讓人欽佩。此時此刻,我情不自禁,作詩一首,北飄奇男子,江南大丈夫。海上常常生明月,江湖就...

《Linux那些事兒之我是PCI》筆記

核心版本 2.6.22 1.pci access mode bios,direct,mmconfig,any。bios mode 有的bios程式提供了針對pci匯流排的操作,這些操作包括匯流排列舉,此種bios稱為pci bios 此種方式直接使用bios程式列舉的結果。64位平台沒有該選項 di...