Linux設(shè)備模型的目的是:為內(nèi)核建立起一個(gè)統(tǒng)一的設(shè)備模型,從而有一個(gè)對(duì)系統(tǒng)結(jié)構(gòu)的一般性抽象描述。 2.6 設(shè)備模型提供了這個(gè)抽象. 現(xiàn)在它用在內(nèi)核來支持不同的任務(wù), 包括 電源管理和系統(tǒng)關(guān)機(jī):這些需要對(duì)系統(tǒng)結(jié)構(gòu)的理解,設(shè)備模型使操作系統(tǒng)能以正確順序遍歷系統(tǒng)硬件。 與用戶空間的通訊 : sysfs 虛擬文件系統(tǒng)的實(shí)現(xiàn)被緊密地捆綁進(jìn)設(shè)備模型, 并且暴露它所代表的結(jié)構(gòu). 關(guān)于系統(tǒng)到用戶空間的信息提供和改變操作參數(shù)的旋紐正越來越多地通過 sysfs及設(shè)備模型來完成. 可熱插拔設(shè)備:計(jì)算機(jī)硬件正更多地動(dòng)態(tài)變化; 外設(shè)可因用戶的一時(shí)念頭而進(jìn)出. 在內(nèi)核中使用的來處理和(特別的)與用戶空間關(guān)于設(shè)備插入和拔出的通訊, 是由設(shè)備模型來管理 設(shè)備類別:系統(tǒng)的許多部分需要知道什么類型的設(shè)備可用. 設(shè)備模型包括一個(gè)機(jī)制來分配設(shè)備給類別, 它在一個(gè)更高的功能性的級(jí)別描述了這些設(shè)備, 并且允許它們從用戶空間被發(fā)現(xiàn). 對(duì)象生命期:設(shè)備模型的實(shí)現(xiàn)需要?jiǎng)?chuàng)建一系列機(jī)制來處理對(duì)象的生命周期、對(duì)象間的關(guān)系和對(duì)象在用戶空間的表示。 sysfs初探 sysfs is a ram-based filesystem initiallybased on ramfs. It provides sysfs 是一個(gè)最初基于ramfs的位于內(nèi)存的文件系統(tǒng)。它提供 a means to export kernel data structures,their attributes, and the 一些方法以導(dǎo)出內(nèi)核的數(shù)據(jù)結(jié)構(gòu)、他們的屬性和 linkages between them to userspace. 他們與用戶空間的連接。 sysfs is tied inherently to the kobjectinfrastructure. Please read sysfs 始終與kobject的底層結(jié)構(gòu)緊密相關(guān)。請(qǐng)閱讀 Documentation/kobject.txt for moreinformation concerning the kobject Documentation/kobject.txt 文檔以獲得更多關(guān)于 kobject 接口的信息。 interface. 可以先把documentation/filesystems/sysfs.txt讀一遍。文檔這種東西,真正讀起來就嫌少了。 Sysfs文件系統(tǒng)是一個(gè)類似于proc文件系統(tǒng)的特殊文件系統(tǒng),用于將系統(tǒng)中的設(shè)備組織成層次結(jié)構(gòu),并向用戶模式程序提供詳細(xì)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)信息。 去/sys看一看, localhost:/sys#ls /sys/ block/ bus/ class/ devices/ firmware/kernel/ module/ power/ Block目錄:包含所有的塊設(shè)備 Devices目錄:包含系統(tǒng)所有的設(shè)備,并根據(jù)設(shè)備掛接的總線類型組織成層次結(jié)構(gòu) Bus目錄:包含系統(tǒng)中所有的總線類型 Drivers目錄:包括內(nèi)核中所有已注冊(cè)的設(shè)備驅(qū)動(dòng)程序 Class目錄:系統(tǒng)中的設(shè)備類型(如網(wǎng)卡設(shè)備,聲卡設(shè)備等) sys下面的目錄和文件反映了整臺(tái)機(jī)器的系統(tǒng)狀況。比如bus, localhost:/sys/bus#ls i2c/ ide/ pci/ pci express/ platform/ pnp/scsi/ serio/ usb/ 里面就包含了系統(tǒng)用到的一系列總線,比如pci, ide, scsi, usb等等。比如你可以在usb文件夾中發(fā)現(xiàn)你使用的U盤,USB鼠標(biāo)的信息。 我們要討論一個(gè)文件系統(tǒng),首先要知道這個(gè)文件系統(tǒng)的信息來源在哪里。所謂信息來源是指文件組織存放的地點(diǎn)。比如,我們掛載一個(gè)分區(qū), mount -t vfat /dev/hda2 /mnt/C 我們就知道掛載在/mnt/C下的是一個(gè)vfat類型的文件系統(tǒng),它的信息來源是在第一塊硬盤的第2個(gè)分區(qū)。深圳專業(yè)嵌入式實(shí)訓(xùn),郭老師QQ754634522 但是,你可能根本沒有去關(guān)心過sysfs的掛載過程,她是這樣被掛載的。 mount -t sysfs sysfs /sys 看不出她的信息來源在哪。sysfs是一個(gè)特殊文件系統(tǒng),并沒有一個(gè)實(shí)際存放文件的介質(zhì)。斷電后就玩完了。簡而言之,sysfs的信息來源是kobject層次結(jié)構(gòu),讀一個(gè)sysfs文件,就是動(dòng)態(tài)的從kobject結(jié)構(gòu)提取信息,生成文件。 |