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

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]伴隨著 Linux 2.4 版本的發(fā)行,出現(xiàn)了大量的文件系統(tǒng)可能性,其中包括 ReiserFS、XFS、GFS 和其它文件系統(tǒng)。這些文件系統(tǒng)聽起來的確都很酷,但是它們真正能做些什么呢,擅長在哪些方面,以及在 Linux 產(chǎn)品環(huán)境下如何才能安全地使用它們呢?Daniel Robbins 通過向您展示如何在 Linux 2.4 的環(huán)境下建立這些新的高級文件系統(tǒng)來回答以上的問題。遵從這個方法,它提供了在實際實現(xiàn)過程中的有價值的建議、性能信息和重要的技術(shù)性注意要點,以便于您在新的文件系統(tǒng)中能有令人愉快的經(jīng)歷。

介紹 devfs

設備,到處都是設備

Devfs,也叫設備文件系統(tǒng)(Device Filesystem),設計它的唯一目的就是提供一個新的(更理性的)方式管理通常位于 /dev 的所有塊設備和字符設備。您也許知道,典型的 /dev 樹包含數(shù)百個塊特殊文件和字符特殊文件,它們?nèi)荚诟募到y(tǒng)上。每個特殊文件都可以讓用戶空間進程輕松地與內(nèi)核設備實現(xiàn)交互。舉例來說,通過對這些特殊文件執(zhí)行操作,您的 X 服務器就能夠訪問視頻硬件, fsck 可以執(zhí)行文件系統(tǒng)檢驗, lpd 可以通過并行端口向打印機發(fā)送數(shù)據(jù)。

實際上,通常 Linux 和 Unix 更“酷”的方面是,設備不是簡單地隱藏在晦澀的 API 之后,而是真正地與普通文件、目錄和符號鏈接一樣存在于文件系統(tǒng)上。因為字符和塊設備是映射到普通文件系統(tǒng)名稱空間的,我們通??梢杂糜幸饬x的方式來與硬件交互,可以僅使用標準 Unix 命令,如 cat 和 dd。除了有趣之外,這還使我們有更強的能力,并提高生產(chǎn)力。


設備管理問題

然而,雖然設備特殊文件本身是一件好事情,但典型的 Linux 系統(tǒng)以一種不太理想而且麻煩的方式管理這些特殊文件。 如今,Linux 支持 很多不同種類的硬件。這意味著嚴格意義上我們中絕大多數(shù)在 /dev 中都有數(shù)百個特殊文件來表示所有這些設備。還不止這樣,這些特殊文件中大多數(shù)甚至不會映射到系統(tǒng)中存在的設備上(但需要它們存在,只是考慮到我們最終會在系統(tǒng)中添加新的硬件/驅(qū)動器),這讓事情變得更令人困惑。

僅從這個方面來看,我們就知道 /dev 需要徹底檢修,而創(chuàng)建 devfs 的明確目的就是讓 /dev 變回原形。為了很好地理解 devfs 是怎樣解決絕大多數(shù) /dev 管理問題的,我們從設備驅(qū)動程序的角度來看看 devfs。


設備管理內(nèi)幕


為了很好地理解 devfs ,最好是先理解從設備驅(qū)動程序的角度來看 devfs 是怎樣改變事物的。傳統(tǒng)地(不使用 devfs),根據(jù)是否注冊在 塊設備或 字符設備,基于內(nèi)核的設備驅(qū)動程序通過調(diào)用 register_blkdev()或 register_chrdev() 向系統(tǒng)的其余部分注冊設備。

您必須提供一個 主設備號(一個無符號 8 位整數(shù))作為 register_blkdev()或 register_chrdev() 的參數(shù);然后,在設備注冊之后,內(nèi)核就會知道這個特定的主設備號對應于執(zhí)行 register_--?dev()調(diào)用的特定設備驅(qū)動程序。

那么,設備驅(qū)動程序開發(fā)人員為調(diào)用 register_--?dev() 提供的主設備號 應該是什么呢?如果開發(fā)人員不打算將設備驅(qū)動程序與外界共享,那么什么號碼都可以,只要它與當前內(nèi)核使用的其它主設備號都不沖突即可。開發(fā)人員還可以選擇動態(tài)地分配 register_--?dev() 調(diào)用的設備的主設備號。然而,這樣的解決方案通常只是在驅(qū)動程序不會被其它人使用的情況下可行。


獲取號碼

然而,如果開發(fā)人員想讓驅(qū)動程序與外界共享(大多數(shù) Linux 開發(fā)人員常常采用這一方法),那么僅僅從“真空”中抽一個主設備號或者使用動態(tài)的主設備號分配就不行了。相反,開發(fā)人員必須聯(lián)系 Linux 內(nèi)核開發(fā)人員,這樣他(她)的特定的設備才能分配一個“正式”主設備號。那么,在整個 Linux 世界中,這個特定的設備(也 只有這個設備)才會被關聯(lián)到那個特定的主設備號。

有一個“正式的”主設備號很重要,因為要與特定的設備交互,管理員必須在 /dev 創(chuàng)建一個特殊文件。當設備節(jié)點(特殊文件)創(chuàng)建后,它使用的主設備號必須同內(nèi)核內(nèi)部使用的完全相同。這樣,進程對設備執(zhí)行操作時,內(nèi)核就會知道應該引用什么設備驅(qū)動程序。讓特殊文件到內(nèi)核驅(qū)動程序的映射成為可能的是主設備號,而不是真實的設備名稱(它和非 devfs 系統(tǒng)無關)。

一旦設備驅(qū)動程序具備正式主設備號,設備就可以被公開使用了,設備節(jié)點也就可以開始并入不同分發(fā)版的 /dev 樹,還有它們的正式 /dev/MAKEDEV 腳本(用來幫助超級用戶用正確的主從設備號、權(quán)限和所有權(quán)創(chuàng)建設備節(jié)點的特殊腳本)中。


傳統(tǒng)的問題

不幸的是,這種方法有很多可伸縮性問題。不僅設備驅(qū)動程序開發(fā)人員聯(lián)系內(nèi)核開發(fā)人員來獲取正式主設備號是一件討厭的事,內(nèi)核開發(fā)人員弄清他們怎樣分配所有這些主設備號甚至更加惱人。這種任務在很多方面很象系統(tǒng)管理員跟蹤公司局域網(wǎng)靜態(tài) IP 地址分配的工作 ― 這并不十分有趣。正如系統(tǒng)管理員可以利用 DHCP 來緩解這種管理負擔,如果設備注冊有某種類似的方法就好了。

不只是這樣,Linux 還正在耗盡主設備號和副號碼。雖然這種問題可以通過簡單地擴展主設備號和副號碼使用的位數(shù),首先維護這些主設備號映射就很討厭了,所以我們又在考慮有沒有更好的方法來處理這些事情。幸運的是,有這樣的方法;進入 devfs。



進入 devfs


devfs_register()

這里是對 devfs 如何一下子處理事情和解決這些問題的一個簡單明了的快速綱要。一旦 devfs 被正確配置(包括在內(nèi)核添加 devfs 支持和對啟動腳本進行一些稍復雜的更改),超級用戶重新啟動系統(tǒng)。然后內(nèi)核開始啟動,設備驅(qū)動程序開始向系統(tǒng)的剩余部分注冊設備。您會記起在非 devfs 系統(tǒng)上, register_blkdev()和 register_chrdev() 調(diào)用(連同提供的主設備號)正是用于這一目的。然而,現(xiàn)在啟用了 devfs,設備驅(qū)動程序是用一種新的、改進了的內(nèi)核調(diào)用來注冊設備,稱為 devfs_register()。

這里是 devfs_register() 調(diào)用有趣的地方。雖然為了兼容性目的指定主設備號和副號碼作為參數(shù)是可能的,但不再需要這樣了。相反, devfs_register()調(diào)用接受 設備路徑(就是它在 /dev 下可能的出現(xiàn)形式)作為參數(shù)。舉例來說,假設 foo 設備驅(qū)動程序希望使用 devfs 注冊設備。它會提供一個 foo0 的參數(shù)給 devfs_register(),從而告訴內(nèi)核應該在 devfs 名稱空間的根目錄創(chuàng)建一個新的 foo0 設備。相應的, devfs_register() 在 devfs 名稱空間的根目錄添加 foo0設備節(jié)點,并記錄這個新的 foo0 節(jié)點應該映射到內(nèi)核中的 foo設備驅(qū)動程序。


運行的 Devfs

一旦所有設備驅(qū)動程序啟動并向內(nèi)核注冊適當?shù)脑O備,內(nèi)核就啟動 /sbin/init 和系統(tǒng)初始化腳本開始執(zhí)行。在啟動過程初期(在文件系統(tǒng)檢查前),rc 腳本將 devfs 文件系統(tǒng)安裝在 /dev 中,/dev 包含了 devfs 名稱空間的表達。這意味著在安裝 /dev 后,所有注冊的設備(如上面的 /dev/foo0)都可以訪問,就象在非 devfs 上一樣。當它們被訪問時,內(nèi)核 通過 devfs 設備名稱映射到合適的設備驅(qū)動程序,而不是通過主設備號。

這種系統(tǒng)的優(yōu)點是,所有需要的設備節(jié)點(沒有別的了)都由內(nèi)核自動創(chuàng)建。這不僅僅意味著不再需要 MAKEDEV(因為所有注冊的設備都只“出現(xiàn)”在 /dev 中),還意味著 /dev 不再被成百個“無用的”設備節(jié)點所充斥。實際上,使用 devfs,您可以只要查看 /dev 就知道系統(tǒng)上有什么設備。所以,如果您有一臺支持熱插拔的膝上型電腦,這意味著您甚至可以在您從系統(tǒng)中插入和拔出 PC 卡時魔術(shù)般地讓設備從 /dev 中出現(xiàn)和消失。這讓 devfs 成為對以前笨拙局面的一個非常徹底和實用的解決方案。


devfs 的優(yōu)點

Devfs 讓很多事變得容易許多。請考慮一下創(chuàng)建一張 Linux 可引導光盤的問題,它包括一個位于 CD 上的引導裝載器、一個 initrd、一個內(nèi)核和一個回送文件系統(tǒng)。當 CD 引導時,引導裝載器裝載內(nèi)核和 initrd,然后內(nèi)核執(zhí)行 initrd 上的 /linuxrc腳本。 /linuxrc 的主要任務是安裝 CD,從而使回送文件系統(tǒng)本身也可以被安裝和訪問。

沒有 devfs, linuxrc 就需要“查看” /dev 中的很多特殊文件,它們可能有也可能沒有表示連接到系統(tǒng)的真實硬件。例如, linuxrc 會需要檢測 /dev/hdc、/dev/scd0、/dev/hdb 和其它的設備以檢測“活動的”光盤驅(qū)動器設備。在檢測進程中,很可能命中幾個“無用的”設備節(jié)點。

然而,使用 devfs, linuxrc 只在 /dev/cdroms 中尋找,它包含了系統(tǒng)中所有和 活動的光盤驅(qū)動器相關聯(lián)的特殊文件,不管是 IDE 的還是 SCSI 的。由于這種便捷的新式 devfs 約定,再不需要猜測了;只有活動的設備才會列出,而且設備檢測代碼甚至不必擔心底層的光盤驅(qū)動器的細節(jié),比如說它使用什么 IDE 通道或者什么 SCSI ID。實際上,這是 devfs 的另一個主要好處;在我下一篇文章中,我們會看到 devfs 下 /dev 中的設備有全新的缺省位置。

實際上,如果您想訪問一個特定的塊設備(如磁盤、分區(qū)、光盤驅(qū)動器等等),事實上有 幾個不同的特殊文件可以引用。例如,我的服務器只有一個 SCSI 光盤驅(qū)動器;如果啟用了 devfs,我就可以通過安裝 /dev/cdroms/cdrom0 或 /dev/scsi/host0/bus0/target4/lun0/cd 訪問它。兩種都引用同一個設備,我可以引用我認為最方便的特殊文件。如果愿意,我還可以使用一種老式的設備名稱(/dev/sr0)訪問光盤驅(qū)動器,這都是因為有一個非常便捷的叫 devfsd的小程序。 devfsd 是一個有功能很多的程序,它負責創(chuàng)建老式的“兼容性”特殊文件,還允許您以很多種方式自定義 /dev。在我的下一篇文章中,我們會詳細討論 devfsd,到時我會一直引導您啟動 devfs 并在您自己的系統(tǒng)上運行它。在那之前,請參考下面的參考資料以了解更多關于 devfs 的信息。

本站聲明: 本文章由作者或相關機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

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

關鍵字: 驅(qū)動電源

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

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

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

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

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

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

關鍵字: 電動汽車 新能源 驅(qū)動電源

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

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

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

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

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

關鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

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

關鍵字: LED 驅(qū)動電源 開關電源

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

關鍵字: LED 隧道燈 驅(qū)動電源
關閉