欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
LFS 系統的設備和模塊處理《Linux 徹底定制指南》[翻譯:金步國]

LFS 系統的設備和模塊處理

Chapter 6 里,我們安裝了 Udev 軟件包,在開(kāi)始深入討論它如何工作之前,我們先簡(jiǎn)要回顧一下以前處理設備的方法。

傳統上一般 Linux 系統使用創(chuàng )建靜態(tài)設備的方法,因此在 /dev 目錄下創(chuàng )建了大量的設備節點(diǎn)(有時(shí)會(huì )有數千個(gè)節點(diǎn)),而不管對應的硬件設備實(shí)際上是否存在。這通常是由 MAKEDEV 腳本完成的,這個(gè)腳本包含許多調用 mknod 程序的命令,為這個(gè)世界上可能存在的每個(gè)設備創(chuàng )建相應的主設備號和次設備號。而使用 udev 方式的時(shí)候,只有被內核檢測到的設備才為其創(chuàng )建設備節點(diǎn)。因為每次系統啟動(dòng)的時(shí)候都要重新創(chuàng )建這些設備節點(diǎn),所以它們被存儲在 tmpfs 文件系統(一種完全存在于內存里,不占用任何磁盤(pán)空間的文件系統)上,設備節點(diǎn)不需要很多磁盤(pán)空間,所占用的內存可以忽略不計。

7.4.1. 歷史

2000 年 2 月的時(shí)候,2.3.46 版本的內核引入了一種稱(chēng)為 devfs 的文件系統,在 2.4 系列穩定版本的內核中都是可用的。盡管它存在于內核源代碼中,但這種動(dòng)態(tài)創(chuàng )建設備的方法卻從未得到核心內核開(kāi)發(fā)者們的全力支持。

devfs 存在的主要的問(wèn)題是它處理設備檢測、創(chuàng )建和命名的方式,其中設備節點(diǎn)的命名可能是最嚴重的問(wèn)題。一般可接受的方式是,如果設備名是可配置的,那么設備命名策略應該由系統管理員決定,而不是由某些開(kāi)發(fā)者強制規定。devfs 文件系統還存在競爭條件(race conditions)的問(wèn)題,這是它天生的設計缺陷,不對內核做徹底的修改就無(wú)法修正這個(gè)問(wèn)題。因為近來(lái)缺乏維護,它已經(jīng)被標記為 deprecated(反對的)。

隨著(zhù)非穩定的 2.5 內核樹(shù)的開(kāi)發(fā),即后來(lái)發(fā)布的 2.6 系列穩定版本內核,一種被稱(chēng)為 sysfs 的新虛擬文件系統誕生了。sysfs 的工作是把系統的硬件配置視圖導出給用戶(hù)空間的進(jìn)程。由于有了這個(gè)用戶(hù)空間可見(jiàn)的表示,代替 devfs 方案的時(shí)機就成熟了。

7.4.2. Udev 實(shí)現

上面簡(jiǎn)單的提到了 sysfs 文件系統,您可能想知道 sysfs 是怎么認出系統中存在的設備以及應該使用什么設備號。對于已經(jīng)編入內核的驅動(dòng)程序,當被內核檢測到的時(shí)候,會(huì )直接在 sysfs 中注冊其對象;對于編譯成模塊的驅動(dòng)程序,當模塊載入的時(shí)候才會(huì )這樣做。一旦掛載了 sysfs 文件系統(掛載到 /sys),內建的驅動(dòng)程序在 sysfs 注冊的數據就可以被用戶(hù)空間的進(jìn)程使用,并提供給 udev 以創(chuàng )建設備節點(diǎn)。

S10udev 初始化腳本負責在 Linux 啟動(dòng)的時(shí)候創(chuàng )建設備節點(diǎn),該腳本首先將 /sbin/udevsend 注冊為熱插拔事件處理程序。熱插拔事件(隨后將討論)本不應該在這個(gè)階段發(fā)生,注冊 udev 只是為了以防萬(wàn)一。然后 udevstart 遍歷 /sys 文件系統,并在 /dev 目錄下創(chuàng )建符合描述的設備。例如,/sys/class/tty/vcs/dev 里含有"7:0"字符串,udevstart 就根據這個(gè)字符串創(chuàng )建主設備號為 7 、次設備號為 0/dev/vcs 設備。udevstart 創(chuàng )建的每個(gè)設備的名字和權限由 /etc/udev/rules.d/ 目錄下的文件指定的規則來(lái)設置,這些文件以類(lèi)似于 LFS 啟動(dòng)腳本風(fēng)格的編號。如果 udev 找不到所創(chuàng )建設備的權限文件,就將其權限設置為缺省的 660 ,所有者為 root:root 。

上面的步驟完成后,那些已經(jīng)存在并且已經(jīng)內建驅動(dòng)的設備就可以使用了,那么以模塊驅動(dòng)的設備呢?

前面我們提到了"熱插拔事件處理程序"的概念,當內核檢測到一個(gè)新設備連接時(shí),內核會(huì )產(chǎn)生一個(gè)熱插拔事件,并在 /proc/sys/kernel/hotplug 文件里查找處理設備連接的用戶(hù)空間程序。udev 初始化腳本將 udevsend 注冊為該處理程序。當產(chǎn)生熱插拔事件的時(shí)候,內核讓 udev/sys 文件系統里檢測與新設備的有關(guān)信息,并為新設備在 /dev 里創(chuàng )建項目。

這樣帶來(lái)了 udev 存在的一個(gè)問(wèn)題,之前 devfs 也存在同樣的問(wèn)題。這通常是個(gè)"先有雞還是先有蛋"問(wèn)題。大多數 Linux 發(fā)行版通過(guò) /etc/modules.conf 配置文件來(lái)處理模塊加載,對某個(gè)設備節點(diǎn)的訪(fǎng)問(wèn)導致相應的內核模塊被加載。對 udev 這個(gè)方法就行不通了,因為在模塊加載前,設備節點(diǎn)根本不存在。為了解決這個(gè)問(wèn)題,在 LFS-Bootscripts 軟件包里加入了 S05modules 啟動(dòng)腳本,以及 /etc/sysconfig/modules 文件。通過(guò)在 modules 文件里添加模塊名,就可以在系統啟動(dòng)的時(shí)候加載這些模塊,這樣 udev 就可以檢測到設備,并創(chuàng )建相應的設備節點(diǎn)了。

注意,在慢速的機器上,或者對于需要創(chuàng )建大量設備節點(diǎn)的驅動(dòng)程序,創(chuàng )建設備的過(guò)程可能需要好幾秒鐘,這意味著(zhù)某些設備節點(diǎn)不能立即訪(fǎng)問(wèn)到。

7.4.3. 處理可熱插拔/動(dòng)態(tài)設備

當您插入一個(gè)設備,例如一個(gè) USB 接口的 MP3 播放器,內核會(huì )檢測到設備連接,并產(chǎn)生一個(gè)熱插拔事件,如果驅動(dòng)程序已經(jīng)加載(要么是因為驅動(dòng)已經(jīng)編入內核,要么是已經(jīng)通過(guò) S05modules 啟動(dòng)腳本加載了),udev 將被調用,并根據 /sys 目錄下的 sysfs 數據來(lái)創(chuàng )建相應的設備節點(diǎn)。如果該設備的驅動(dòng)是一個(gè)未加載的模塊,將設備連接到系統上只會(huì )讓內核的總線(xiàn)驅動(dòng)產(chǎn)生一個(gè)熱插拔事件,通知用戶(hù)空間有新設備連接,但并不加載驅動(dòng)。事實(shí)上,什么都沒(méi)有做,設備仍然不能使用。

如果剛才插入的設備有一個(gè)驅動(dòng)程序模塊但是尚未加載,Hotplug 軟件包就有用了,它就會(huì )響應上述的內核總線(xiàn)驅動(dòng)熱插拔事件并加載相應的模塊,為其創(chuàng )建設備節點(diǎn),這樣設備就可以使用了。

7.4.4. 創(chuàng )建設備的問(wèn)題

自動(dòng)創(chuàng )建設備節點(diǎn)的時(shí)候,存在一些已知的問(wèn)題:

1) 某個(gè)內核驅動(dòng)可能沒(méi)有將其數據導出到 sysfs 。

這個(gè)問(wèn)題在內核源代碼樹(shù)之外的第三方驅動(dòng)程序上尤其常見(jiàn),結果是這些驅動(dòng)無(wú)法創(chuàng )建其設備節點(diǎn)。用 /etc/sysconfig/createfiles 配置文件手動(dòng)創(chuàng )建這些設備,參考內核文檔里的 devices.txt 文件或者該驅動(dòng)的文檔以獲得正確的主/次設備號。

2) 需要一個(gè)非硬件設備,這個(gè)問(wèn)題通常出現在 ALSA(高級 Linux 聲音架構)項目里的 OSS(開(kāi)放聲音系統)兼容模塊上,這類(lèi)設備可以用下面兩種方法之一來(lái)處理:

  • 將模塊名添加到 /etc/sysconfig/modules

  • /etc/modprobe.conf 文件里使用"install"命令行,讓 modprobe 命令"在加載這個(gè)模塊的同時(shí)加載另一模塊"。例如:

    install snd-pcm modprobe -i snd-pcm ; modprobe     snd-pcm-oss ; true

    這個(gè)命令使系統在收到任何加載 snd-pcm 驅動(dòng)請求的時(shí)候,都同時(shí)加載 snd-pcmsnd-pcm-oss 模塊。

7.4.5. 有用的讀物

一些有用的補充文檔可以在下列網(wǎng)站得到:

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Udev:介紹現代Linux系統的設備管理
Linux設備模型、Sysfs文件系統與udev設備文件
Linux 熱插拔(Hot Plug)處理機制系列
教你寫(xiě)第一個(gè)Linux設備驅動(dòng)程序
關(guān)于熱插拔usb hotplug /proc/sys/kernel mdev udev b...
Linux里udev的工作原理
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久