- 論壇徽章:
- 0
|
※解釋設(shè)備文件的用途
※解釋主號和次號的意義
※描述塊設(shè)備和字符設(shè)備的不同
※使用lsdev來列出內(nèi)核驅(qū)動程序的主號
※使用ls -l觀察一個設(shè)備文件的主號和次號
※使用ioscan列出與一個指定設(shè)備關(guān)聯(lián)的設(shè)備文件
※使用issf來說明一個設(shè)備文件的特征。
※賦予磁盤,磁帶或者CD設(shè)備文件名,確定控制卡的目標(biāo)號和關(guān)聯(lián)設(shè)備的目標(biāo)地址
※賦予一終端或者一個modern設(shè)備文件名,確定控制卡號和關(guān)聯(lián)設(shè)備的端口號。
※描autoconfig進(jìn)程的工作原理
※使用insf創(chuàng)建設(shè)備文件
設(shè)備文件是什么?
操作系統(tǒng)與外部設(shè)備(例如,磁帶驅(qū)動器,磁盤驅(qū)動器,打印機(jī),終端,modern)是通過一種被稱為設(shè)備文件的文件來進(jìn)行通信。unix輸入輸出到外部設(shè)備的方式和輸入輸出到一個文件的方式是相同的。在UNIX
同一個外部設(shè)備進(jìn)行通訊之前,這個設(shè)備必須首先要有一個設(shè)備文件存在。例如,每一個終端都有自己的設(shè)備文件來供UNIX寫數(shù)據(jù)(出現(xiàn)在終端屏幕上),和讀取數(shù)據(jù)(用戶通過鍵盤輸入)。
設(shè)備文件和普通文件不一樣,設(shè)備文件中并不包含任何數(shù)據(jù)。
設(shè)備文件指定UNIX如何同一個設(shè)備進(jìn)行通訊。設(shè)備文件存在于/dev目錄下。
注意:設(shè)備文件與特殊文件是同義詞。你可以 交換使用這兩個術(shù)語。
由于UNIX操作系統(tǒng)為你創(chuàng)建所有的設(shè)備文件,所以在你存取一個外部設(shè)備的時候,你需要知道這個設(shè)備對應(yīng)的設(shè)備文件名。有時候你會需要創(chuàng)建一個設(shè)備文件。如果你永久地去掉一個外部設(shè)備,你應(yīng)該刪除它對應(yīng)的設(shè)備文件。
以下的例子說明了一個UNIX命令如何使用一個設(shè)備文件的:
#tar -cvf /dev/rmt/0m /usr
tar應(yīng)用使用-f選項來打開一個文件以供輸出。然后tar會備份數(shù)據(jù)到那個文件。tar可以寫到一個普通文件或者直接寫到一個設(shè)備。tar并不需要知道它們之間的不同。
# echo hello > /dev/tty0p1
在這個例子中,echo命令的標(biāo)準(zhǔn)輸出通過被重定向到一個終端,其方式是通過這個終端的設(shè)備文件。
使用ls -l列出設(shè)備文件
使用ls -l /dev列出設(shè)備文件名
brw-r----- 1 root sys 31 0x005000 Feb 10 1997 /dev/dsk/c0t5d0
brw-r----- 1 root sys 31 0x006000 Feb 10 1997 /dev/dsk/c0t6d0
crw-r----- 1 root sys 31 0x005000 Feb 10 1997 /dev/rdsk/c0t5d0
crw-r----- 1 root sys 31 0x006000 Feb 10 1997 /dev/rdsk/c0t6do
crw-r----- 2 root tty 17 0x000001 Jan 9?09:25 /dev/ttyp1
crw-r----- 2 root tty 17 0x000002 Jan 9?17:25 /dev/ttyp2
設(shè)備文件類型 ????主號 次號 ????????設(shè)備文件名
設(shè)備文件通常都是在/dev目錄下。你可以使用ls -l命令來列出這個目錄下的文件,就像你列出其它目錄下的文件一樣。注意:ls
-l列出的設(shè)備文件和其它文件有一點點的不同。
設(shè)備文件類型
設(shè)備文件名的第一個字符指明了這個設(shè)備文件的類型。
字符設(shè)備文件:?第一個字符為“c",表明這個文件是一個字符設(shè)備文件。
字符設(shè)備文件傳送數(shù)據(jù)給設(shè)備的時候,一次傳送一個字符。終端,打印機(jī),繪圖儀,modern等設(shè)備是一些典型的經(jīng)過字符設(shè)備文件傳送數(shù)據(jù)的設(shè)備。字符設(shè)備文件有時也被稱為“raw”
設(shè)備文件。
塊設(shè)備文件:
??第一個字符為“b”的設(shè)備文件是一個塊設(shè)備文件。系統(tǒng)通過塊設(shè)備文件存取一個設(shè)備的時候,先從內(nèi)存中的buffer中讀或?qū)憯?shù)據(jù)。而不是直接傳送數(shù)據(jù)到物理磁盤。這種方式能有效的提高磁盤和CD-ROMS的I/O性能。
終端,moderms,打印機(jī),繪圖儀和磁帶設(shè)備是典型的只能使用字符設(shè)備文件的設(shè)備,磁盤和CD-ROMS既可以使用字符設(shè)備文件也可以使用塊設(shè)備文件。
一些應(yīng)用程序和工具選擇使用字符設(shè)備文件直接存取磁盤。其它工具要求一個塊設(shè)備文件。閱讀應(yīng)用或者工具的說明文檔來決定使用那一種設(shè)備文件。
設(shè)備文件主號
每一個設(shè)備文件都有一個“主號”,使用ls -l命令輸出的內(nèi)容的第五個字段即為主號。主號是表示系統(tǒng)存取這個設(shè)備的“內(nèi)核驅(qū)動”
。內(nèi)核驅(qū)動是UNIX內(nèi)核中的一部分代碼,其作用是用來控制一種特殊的設(shè)備的輸入輸出。大多數(shù)的unix操作系統(tǒng)都有多種設(shè)備驅(qū)動程序;每一個設(shè)備文件名中的設(shè)備主號就代表這個設(shè)備使用的是那個設(shè)備驅(qū)動程序。lsdev命令可以列出你的內(nèi)核中配置的驅(qū)動程序,和這些驅(qū)動程序?qū)?yīng)的主號。
設(shè)備文件次號
每一個設(shè)備文件都有一個次號!按翁枴笔且粋24位的十六進(jìn)制數(shù)字,其定義了:
這個設(shè)備在系統(tǒng)中的物理的位置。 設(shè)備存儲選項。例如磁帶,磁帶有特殊的存取選項,使用/不使用硬件壓縮,和定義寫到磁帶上的數(shù)據(jù)格式密度等。
設(shè)備文件名
設(shè)備文件名遵循一個標(biāo)準(zhǔn)的命名的約定。這種約定使分辯那一個設(shè)備文件關(guān)聯(lián)那一個設(shè)備變得很容易。以下的章節(jié)會討論命名規(guī)則的細(xì)節(jié)。
使用ioscan列出設(shè)備文件名
# ioscan -fun ???列出所有的設(shè)備和對應(yīng)的設(shè)備文件名
# ioscan -fun disk ?列出所有的磁盤設(shè)備和設(shè)備文件名
# ioscan -funC tape ?列出所有的磁帶設(shè)備和磁帶設(shè)備文件
雖然ls -l命令可以列出你的系統(tǒng)中的設(shè)備文件。但是它沒有指明那一個設(shè)備文件對應(yīng)那一個設(shè)備。 ioscan
-fun命令提供了一種方便的機(jī)制來設(shè)備文件對應(yīng)的你的系統(tǒng)中的硬件的路徑。在每一個硬件路徑下,ioscan
-fun列出了與每一個硬件路徑相關(guān)聯(lián)的設(shè)備文件。由于一些設(shè)備有多個存取選項,ioscan可以列出一個設(shè)備對應(yīng)的多個設(shè)備文件。
例子:
#ioscan -fun??????????列出所有的設(shè)備和設(shè)備關(guān)聯(lián)的設(shè)備文件名
# ioscan -funC disk ?????? 僅列出磁盤類的設(shè)備和關(guān)聯(lián)的設(shè)備文件名
#ioscan -funC tape ???????僅列出磁帶設(shè)備和關(guān)聯(lián)的設(shè)備文件名
#ioscan -funH 2/0/1.6.0 ???? 僅列出在2/0/1.6.0的設(shè)備的設(shè)備文件名
使用lssf列出設(shè)備文件
※列出設(shè)備文件的特征
※語法:
??/usr/sbin/lssf path [pah -]
※例子:
# lssf /dev/rdsk/clt6d0
??disc3 card instance 1 scsi target 6 scsi LUN 0
??section 0 at address 52.6.0 /dev/rdsk/clt6d0
??# lssf /dev/rmt/0mn
??tape2 card instance 1 SCSI target 0 SCSI LUN
[email=at@t]at@t[/email]
no
??rewind best density available at address 52.0.0 /dev/rmt/omn
許多設(shè)備有多個相關(guān)聯(lián)的設(shè)備文件。例如,上例中的磁帶設(shè)備有八個設(shè)備文件。這是因為許多設(shè)備可以使用不同的存取選項來存取。每一個設(shè)備文件代表一個存取選項。
ioscan列出每一個設(shè)備的設(shè)備文件,但是不指明那一個設(shè)備文件對應(yīng)那一個設(shè)備文件。lssf命令可以選擇用來判斷每一個設(shè)備文件的特征。lssf
告訴你:
這個設(shè)備文件使用的那個驅(qū)動程序
設(shè)備的硬件地址信息
任何設(shè)備文件使用的設(shè)備存取選項。
問題:
我們已經(jīng)有三個命令可以用來瀏覽設(shè)備文件:ls -l,lssf,和ioscan。請判斷在以下情況下應(yīng)該使用那個命令:
1.列出硬件地址為2/0/1.1.2的磁帶驅(qū)動器的設(shè)備文件。
2.列出所有的磁盤設(shè)備文件。
3.那一個命令可以用來判斷通過設(shè)備文件/dev/rmt/c0t0dBESTnb存取的硬件路徑。
4.那一個命令可以告訴你設(shè)備文件/dev/rmt/c0t0d0BESTnb的設(shè)備選項是什么。
/dev目錄的布局
這一部分會介紹系統(tǒng)對一個設(shè)備文件取名的命名規(guī)則。一個容易理解的命令規(guī)則會讓你更容易地選擇和使用你系統(tǒng)中的設(shè)備文件。
在多數(shù)UNIX系統(tǒng)中,所有的設(shè)備文件都是存在于/dev目錄下的。一些設(shè)備文件事直接在/dev目錄下,而另外一些被組織在/dev下的子目錄下。一下是一些重要的設(shè)備文件目錄的列表
/dev ??????包含所有的終端,moderm,lan和打印機(jī)的設(shè)備文件。
/dev/dsk ????包含所有的塊磁盤設(shè)備文件
/dev/rdsk????包含有所有的裸磁盤設(shè)備文件
/dev/rmt ????包含有所有的磁帶設(shè)備文件
設(shè)備文件命名規(guī)則
默認(rèn)的情況。操作系統(tǒng)給一個設(shè)備文件取名的時候是依據(jù)一個標(biāo)準(zhǔn)的命名原則。雖然你可以任意對一個設(shè)備文件取名。但是使用一個標(biāo)準(zhǔn)的命名規(guī)則會使用定位你的設(shè)備文件十分容易。
界面卡號
內(nèi)核自動對系統(tǒng)中的每個設(shè)備和界面卡賦予一個號碼。這個號碼在ioscan -f輸出的“I"這個字段顯示。
磁盤,磁帶或者CD
ROM的設(shè)備文件名中的"C"指明這個設(shè)備連接的界面卡的數(shù)字。ioscan命令顯出的所有的磁盤都有一個相同的以”C0"開頭的設(shè)備文件,這是因為SCSI卡的號碼為"0"。
注意每一個設(shè)備文件都有一個號碼,這個號碼只是操作系統(tǒng)專用的一個號碼,并不被用來對應(yīng)設(shè)備文件名。
ioscan -fun
SCSI目標(biāo)地址
設(shè)備文件的“t#”部分確定這個設(shè)備文件相關(guān)聯(lián)設(shè)備的SCSI目標(biāo)地址。這個SCSI目標(biāo)地址是通過設(shè)備自身上的跳線或者DIP開關(guān)來設(shè)置的。一個SCSI設(shè)備的硬件路徑的倒數(shù)第二個字符就是這個設(shè)備的SCSI目標(biāo)地址。例如,在上例的ioscan輸出中,在8/12.3.0的磁盤的SCSI地址為“3”。8/12.6.0這塊磁盤的SCSI目標(biāo)地址為“6”。
SCSI邏輯單元號
邏輯單元號(LUN)能夠被用來識別一個磁帶庫的機(jī)器手,或者是一個磁盤陣列的一個邏輯單元。對大多數(shù)的SCSI設(shè)備來說,LUN號都是“0”。每一個SCSI設(shè)備的LUN號出現(xiàn)在設(shè)備硬件路徑的最后一個小數(shù)點后。
設(shè)備存取選項
設(shè)備文件名的最后一部分是這個設(shè)備文件的存取選項。磁帶機(jī)設(shè)備文件名可能有多個選項。設(shè)備和設(shè)備的選項是不同的。
磁盤設(shè)備文件名
每一個磁盤和CD-ROM都有兩個設(shè)備文件:
一個塊設(shè)備文件在/dev/dsk下面
一個字符設(shè)備文件在/dev/rdsk下面
磁帶設(shè)備文件名
磁帶設(shè)備文件在/dev/rmt目錄下,遵循c#t#d#[選項]的命名規(guī)則。同磁盤和CD-ROM不同,磁帶驅(qū)動器通常都支持多個選項。
如何創(chuàng)建一個設(shè)備文件
※自動配置
※insf
※mksf
※mknod
大多數(shù)情況,你不需要創(chuàng)建設(shè)備文件。當(dāng)?shù)谝淮伟惭b操作系統(tǒng)的時候。insf在進(jìn)行硬件探測的時候會自動創(chuàng)建所有發(fā)現(xiàn)的設(shè)備的設(shè)備文件。每一次系統(tǒng)重啟動,insf會創(chuàng)建新連接到系統(tǒng)的設(shè)備的設(shè)備文件。
在一一些特殊的情況下,你會需要手工創(chuàng)建或是修改設(shè)備文件。
自動配置
什么是自動配置
在系統(tǒng)啟動的時候,內(nèi)核會執(zhí)行一系列系統(tǒng)初始化的工作,包括探測所有的安裝在系統(tǒng)中的硬件。在進(jìn)行硬件探測的時候,內(nèi)核會確認(rèn)所有的設(shè)備-總線,適配器,設(shè)備適配器-這些能夠被自動配置的設(shè)備。內(nèi)核綁定一個合適的驅(qū)動程序給每一個檢測到的設(shè)備。
在完成系統(tǒng)初始化后,內(nèi)核會激活init命令。init進(jìn)程回讀取/etc/inittab文件來激活幾個系統(tǒng)啟動的命令,包括/sbin/ioinitrc。
第一步,initrc會讀取/etc/ioconfig文件的內(nèi)容,然后傳送設(shè)備映射信息道內(nèi)核的數(shù)據(jù)結(jié)構(gòu)中,io_tree。下一步,ioinit執(zhí)行insf。insf會為新的設(shè)備創(chuàng)建設(shè)備文件。它同樣會更新/etc/ioconfig文件和內(nèi)核樹。
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/84425/showart_2069347.html |
|