sysfs是一個(gè)基于ramfs的文件系統(tǒng),在2.6內(nèi)核開始引入,用來導(dǎo)出內(nèi)核對(duì)象(kernel object)的數(shù)據(jù)、屬性到用戶空間。與同樣用于查看內(nèi)核數(shù)據(jù)的proc不同,sysfs只關(guān)心具有層次結(jié)構(gòu)的設(shè)備信息,比如系統(tǒng)中的總線,驅(qū)動(dòng)以及已經(jīng)加載的模塊等,而諸如PID等信息還是使用proc來管理。本質(zhì)上,sysfs文件的層次結(jié)構(gòu)就是基于內(nèi)核中kset與kobject邏輯結(jié)構(gòu)來組織的。從驅(qū)動(dòng)開發(fā)的角度,sysfs為我們提供了除了虛擬字符設(shè)備的read/write/ioctlproc系統(tǒng)之外的另外一種通過用戶空間訪問內(nèi)核數(shù)據(jù)的方式。想要使用sysfs,編譯內(nèi)核的時(shí)候需要定義CONFIG_SYSFS,可以通過mount -t sysfs sysfs /sys命令來掛載sysfs到"/sys"目錄。本文以u(píng)buntu15.04(3.19)為例分析。

sysfs目錄結(jié)構(gòu)

sysfs的布局體現(xiàn)內(nèi)核的數(shù)據(jù)結(jié)構(gòu),頂層的目錄有

$ls /sys/block/  bus/  class/  dev/  devices/  firmware/  fs/  hypervisor/  kernel/  module/  power/

每一個(gè)目錄都對(duì)應(yīng)內(nèi)核中的一個(gè)kset,每一個(gè)kset還會(huì)包含一些kobject或其他kset。下面針對(duì)常用目錄做一個(gè)簡(jiǎn)單的介紹

/sys/block/

網(wǎng)友評(píng)論