日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

理解devfs、sysfs、udev

系統(tǒng) 2212 0

From: http://www.mike.org.cn/articles/linux-understand-devfs-sysfs-udev/

linux下有專門(mén)的文件系統(tǒng)用來(lái)對(duì)設(shè)備進(jìn)行管理,devfs和sysfs就是其中兩種。

  一、devfs

  devfs是在2.4內(nèi)核就出現(xiàn)了,它是用來(lái)解決linux中設(shè)備管理混亂的問(wèn)題,你查看一下/dev下的設(shè)備文件就知道其中有許多是空的(也就是沒(méi)有對(duì)應(yīng)的硬件的),但是它們卻必須存在,所以這給linux設(shè)備管理帶來(lái)了很多麻煩,為了解決這個(gè)問(wèn)題,linux內(nèi)核開(kāi)發(fā)人員開(kāi)發(fā)了devfs,并用一個(gè)守護(hù)進(jìn)程devfsd來(lái)做一些與以前硬件驅(qū)動(dòng)兼容的事情。

  devfs和sysfs都是和proc一樣,是一個(gè)虛擬的文件系統(tǒng),向devfs注冊(cè)的驅(qū)動(dòng)程序,devfs將會(huì)在/dev下建立相應(yīng)的設(shè)備文件;但是為了兼容,devfsd這個(gè)守護(hù)進(jìn)程將會(huì)在某個(gè)設(shè)定的目錄中建立以主設(shè)備號(hào)為索引的設(shè)備文件,如果不這么做,以前的許多應(yīng)用將不能運(yùn)行。

  在2.6內(nèi)核以前一直使用的是devfs,devfs掛載于/dev目錄下,提供了一種類似于文件的方法來(lái)管理位于/dev目錄下的所有設(shè)備,我們知道/dev目錄下的每一個(gè)文件都對(duì)應(yīng)的是一個(gè)設(shè)備,至于當(dāng)前該設(shè)備存在與否先且不論,而且這些特殊文件是位于根文件系統(tǒng)上的,在制作文件系統(tǒng)的時(shí)候我們就已經(jīng)建立了這些設(shè)備文件,因此通過(guò)操作這些特殊文件,可以實(shí)現(xiàn)與內(nèi)核進(jìn)行交互。

  但是devfs文件系統(tǒng)有一些缺點(diǎn),例如:不確定的設(shè)備映射,有時(shí)一個(gè)設(shè)備映射的設(shè)備文件可能不同,例如我的U盤(pán)可能對(duì)應(yīng)sda有可能對(duì)應(yīng)sdb;沒(méi)有足夠的主/輔設(shè)備號(hào),當(dāng)設(shè)備過(guò)多的時(shí)候,顯然這會(huì)成為一個(gè)問(wèn)題;/dev目錄下文件太多而且不能表示當(dāng)前系統(tǒng)上的實(shí)際設(shè)備;命名不夠靈活,不能任意指定等等。

  二、sysfs

  sysfs是Linux 2.6所提供的一種虛擬檔案系統(tǒng)。這個(gè)檔案系統(tǒng)不僅可以把裝置(devices)和驅(qū)動(dòng)程式(drivers)的資訊從kernel space輸出到user space,也可以用來(lái)對(duì)裝置和驅(qū)動(dòng)程式做設(shè)定。

  sysfs的目的是把一些原本在procfs中的,關(guān)于裝置的部份獨(dú)立出來(lái),以[裝置階層架構(gòu)}(device tree)的形式呈現(xiàn)。這個(gè)檔案系統(tǒng)由Patrick Mochel所寫(xiě),稍后Maneesh Soni撰寫(xiě) "sysfs backing store path",以降低在大型系統(tǒng)中對(duì)內(nèi)存的需求量。

  sysfs一開(kāi)始以ramfs為基礎(chǔ),也是一個(gè)只存在于內(nèi)存中的檔案系統(tǒng)。ramfs是在2.4核心處于穩(wěn)定階段時(shí)加入的。ramfs是一個(gè)優(yōu)雅的實(shí)做,證明了要在當(dāng)時(shí)仍很新的虛擬檔案系統(tǒng)(VFS)下寫(xiě)一個(gè)簡(jiǎn)單的檔案系統(tǒng)是多么容易的一件事。由于ramfs的簡(jiǎn)潔以及使用了VFS,稍后的一些內(nèi)存形式的檔案系統(tǒng)都以它作為開(kāi)發(fā)基礎(chǔ)。

  sysfs剛開(kāi)始被命名成ddfs(Device Driver Filesystem),當(dāng)初只是為了要對(duì)新的驅(qū)動(dòng)程式模型除錯(cuò)而開(kāi)發(fā)出來(lái)的。它在除錯(cuò)時(shí),會(huì)把裝置架構(gòu)(device tree)的資訊輸出到procfs檔案系統(tǒng)中。但在Linus Torvalds的急切督促下,ddfs被轉(zhuǎn)型成一個(gè)以ramfs為基礎(chǔ)的檔案系統(tǒng)。在新的驅(qū)動(dòng)程式模型被整合進(jìn) 2.5.1 核心時(shí),ddfs 被改名成driverfs,以更確切描述它的用途。

  在2.5核心開(kāi)發(fā)的次年,新的‘驅(qū)動(dòng)程式模型’和‘driverfs’證明了對(duì)核心中的其他子系統(tǒng)也有用處。kobjects被開(kāi)發(fā)出來(lái),作為核心物件的中央管理機(jī)制,而此時(shí)driverfs也被改名成sysfs。
????
  正因?yàn)閐evfs上述這些問(wèn)題的存在,在linux2.6內(nèi)核以后,引入了一個(gè)新的文件系統(tǒng)sysfs,它掛載于/sys目錄下,跟devfs一樣它也是一個(gè)虛擬文件系統(tǒng),也是用來(lái)對(duì)系統(tǒng)的設(shè)備進(jìn)行管理的,它把實(shí)際連接到系統(tǒng)上的設(shè)備和總線組織成一個(gè)分級(jí)的文件,用戶空間的程序同樣可以利用這些信息以實(shí)現(xiàn)和內(nèi)核的交互。

  該文件系統(tǒng)是當(dāng)前系統(tǒng)上實(shí)際設(shè)備樹(shù)的一個(gè)直觀反應(yīng),它是通過(guò)kobject子系統(tǒng)來(lái)建立這個(gè)信息的,當(dāng)一個(gè)kobject被創(chuàng)建的時(shí)候,對(duì)應(yīng)的文件和目錄也就被創(chuàng)建了,位于/sys下的相關(guān)目錄下,既然每個(gè)設(shè)備在sysfs中都有唯一對(duì)應(yīng)的目錄,那么也就可以被用戶空間讀寫(xiě)了。用戶空間的工具udev就是利用了sysfs提供的信息來(lái)實(shí)現(xiàn)所有devfs的功能的,但不同的是udev運(yùn)行在用戶空間中,而devfs卻運(yùn)行在內(nèi)核空間,而且udev不存在devfs那些先天的缺陷。很顯然,sysfs將是未來(lái)發(fā)展的方向。

  三、udev

  udev是一種工具,它能夠根據(jù)系統(tǒng)中的硬件設(shè)備的狀況動(dòng)態(tài)更新設(shè)備文件,包括設(shè)備文件的創(chuàng)建,刪除等。設(shè)備文件通常放在/dev目錄下,使用udev后,在/dev下面只包含系統(tǒng)中真實(shí)存在的設(shè)備。它于硬件平臺(tái)無(wú)關(guān)的,位于用戶空間,需要內(nèi)核sysfs和tmpfs的支持,sysfs為udev提供設(shè)備入口和uevent通道,tmpfs為udev設(shè)備文件提供存放空間。

理解devfs、sysfs、udev


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 吉首市| 陆良县| 波密县| 榆林市| 舒兰市| 大悟县| 财经| 贡觉县| 石家庄市| 恭城| 双柏县| 汝南县| 洛阳市| 镇赉县| 洛南县| 石渠县| 石狮市| 平舆县| 和田县| 屏南县| 西盟| 平南县| 四子王旗| 衡山县| 康马县| 静乐县| 邓州市| 苍溪县| 南木林县| 阜宁县| 双鸭山市| 安塞县| 武强县| 略阳县| 秀山| 凌云县| 黑龙江省| 天长市| 海兴县| 华池县| 绵竹市|