設(shè)備管理是 Linux 中比較基礎(chǔ)的知識,與內(nèi)核的關(guān)系也比較密切。隨著 Udev 的廣泛使用,Linux 發(fā)行版的智能程度越來越高,許多 Linux 新用戶對 /dev 目錄下的東西變得不再熟悉,有時候遇見問題就會抓狂。
Linux 中的設(shè)備按照存取方式的不同,可以分為兩種:
而按照是否對應(yīng)物理實體,也可以分為兩種:
無論是哪種設(shè)備,在 /dev 目錄下都有一個對應(yīng)的文件(節(jié)點),并且每個設(shè)備文件都必須有主/次設(shè)備號,主設(shè)備號相同的設(shè)備是同類設(shè)備,使用同一個驅(qū)動程序(雖然目前的內(nèi)核允許多個驅(qū)動共享一個主設(shè)備號,但絕大多數(shù)設(shè)備依然遵循一個驅(qū)動對應(yīng)一個主設(shè)備號的原則)??梢酝ㄟ^ cat /proc/devices 命令查看當(dāng)前已經(jīng)加載的設(shè)備驅(qū)動程序的主設(shè)備號。
內(nèi)核能夠識別的所有設(shè)備都記錄在原碼樹下的 Documentation/devices.txt 文件中。另外,在 http://www.lanana.org/docs/device-list/ 也有一份,貌似已經(jīng)失去維護(hù)。
注意:在 /dev 目錄下除了各種設(shè)備節(jié)點之外還通常還會存在:FIFO管道、Socket、軟/硬連接、目錄。這些東西并不是設(shè)備文件,因此也就沒有主/次設(shè)備號。
了解這些設(shè)備的最基本要求就是對每個設(shè)備文件的含義了如指掌,下面列出了 Linux-3.13.2 內(nèi)核中常見的已注冊設(shè)備及其含義(省略了生僻與罕見的設(shè)備)。
----------------------------------------------------------------------主設(shè)備號 設(shè)備類型 次設(shè)備號=文件名 簡要說明---------------------------------------------------------------------- 0 未命名設(shè)備(例如NFS之類非設(shè)備的掛載) 0 = 為空設(shè)備號保留 參見主設(shè)備號為144,145,146的塊設(shè)備,以了解"擴(kuò)展區(qū)域"(expansion area) 1 char 內(nèi)存設(shè)備 1 = /dev/mem 物理內(nèi)存的全鏡像??梢杂脕碇苯哟嫒∥锢韮?nèi)存。 2 = /dev/kmem 內(nèi)核看到的虛擬內(nèi)存的全鏡像??梢杂脕碓L問內(nèi)核中的內(nèi)容(查看內(nèi)核變量或用作rootkit之類)。 3 = /dev/null 空設(shè)備。任何寫入都將被直接丟棄(但返回"成功");任何讀取都將得到EOF(文件結(jié)束標(biāo)志)。 4 = /dev/port 存取I/O端口 5 = /dev/zero 零流源。任何寫入都將被直接丟棄(但返回"成功");任何讀取都將得到無限多的二進(jìn)制零流。 7 = /dev/full 滿設(shè)備。任何寫入都將失敗,并把errno設(shè)為ENOSPC(沒有剩余空間);任何讀取都將得到無限多的二進(jìn)制零流。 這個設(shè)備通常被用來測試程序在遇到磁盤無剩余空間錯誤時的行為。 8 = /dev/random 真隨機(jī)數(shù)發(fā)生器。以背景噪聲數(shù)據(jù)或硬件隨機(jī)數(shù)發(fā)生器作為熵池,讀取時會返回小于熵池噪聲總數(shù)的隨機(jī)字節(jié)。 若熵池空了,讀操作將會被阻塞,直到收集到了足夠的環(huán)境噪聲為止。建議用于需要生成高強(qiáng)度密鑰的場合。 [注意]雖然允許寫入,但企圖通過寫入此文件來"預(yù)存"隨機(jī)數(shù)是徒勞的,因為寫入的數(shù)據(jù)對輸出并無影響。 9 = /dev/urandom 偽隨機(jī)數(shù)發(fā)生器。更快,但是不夠安全。僅用于對安全性要求不高的場合。 即使熵池空了,讀操作也不會被阻塞,而是把已經(jīng)產(chǎn)生的隨機(jī)數(shù)做為種子來產(chǎn)生新的隨機(jī)數(shù)。 [注意]雖然允許寫入,但企圖通過寫入此文件來"預(yù)存"隨機(jī)數(shù)是徒勞的,因為寫入的數(shù)據(jù)對輸出并無影響。 10 = /dev/aio 異步I/O通知接口 11 = /dev/kmsg 任何對該文件的寫入都將作為printk的輸出;而讀取則得到printk的輸出緩沖區(qū)內(nèi)容。 1 block RAM disk [已過時,請用TMPFS] 0 = /dev/ram0 第1個 RAM disk 1 = /dev/ram1 第2個 RAM disk ... [說明]將/dev/ram0用作initrd的做法已過時(因為它僅針對image-initrd格式),當(dāng)下的主流是cpio-initrd格式。 4 char TTY(終端)設(shè)備 0 = /dev/tty0 當(dāng)前虛擬控制臺 1 = /dev/tty1 第1個虛擬控制臺 ... 63 = /dev/tty63 第63個虛擬控制臺 64 = /dev/ttyS0 第1個UART串口 ... 255 = /dev/ttyS191 第192個UART串口 [說明]"UART串口"是指 8250/16450/16550 UART串行控制芯片 4 block 如果根文件系統(tǒng)以是以只讀方式掛載的,那么就不可能創(chuàng)建真正的設(shè)備節(jié)點, 此時就使用該設(shè)備作為動態(tài)分配的主設(shè)備的別名,并掛載為根文件系統(tǒng)。 0 = /dev/root 5 char 輔助 TTY 設(shè)備 0 = /dev/tty 當(dāng)前 TTY 設(shè)備 1 = /dev/console 系統(tǒng)控制臺(一般是/dev/tty0) 2 = /dev/ptmx 所有 Unix98 PTY master 的復(fù)用器 3 = /dev/ttyprintk 內(nèi)核通過此設(shè)備使用printk發(fā)送內(nèi)嵌的用戶消息(依賴于CONFIG_TTY_PRINTK) 64 = /dev/cua0 對應(yīng)于 ttyS0 的呼出(Callout)設(shè)備 ... 255 = /dev/cua191 對應(yīng)于 ttyS191 的呼出(Callout)設(shè)備 7 char 虛擬控制臺捕捉設(shè)備(這些設(shè)備既允許讀也允許寫) 0 = /dev/vcs 當(dāng)前虛擬控制臺(vc)的文本內(nèi)容 1 = /dev/vcs1 tty1 的文本內(nèi)容 ... 63 = /dev/vcs63 tty63 的文本內(nèi)容 128 = /dev/vcsa 當(dāng)前虛擬控制臺(vc)的文本/屬性內(nèi)容 129 = /dev/vcsa1 tty1 的文本/屬性內(nèi)容 ... 191 = /dev/vcsa63 tty63 的文本/屬性內(nèi)容 7 block 回環(huán)設(shè)備(用一個普通的文件來模擬一個塊設(shè)備) 0 = /dev/loop0 第1個回環(huán)設(shè)備 1 = /dev/loop1 第2個回環(huán)設(shè)備 ... [提示]對回環(huán)設(shè)備的綁定由 mount(8) 或 losetup(8) 處理 8 block SCSI 磁盤(0-15) 0 = /dev/sda 第1個 SCSI 磁盤(整個磁盤) 16 = /dev/sdb 第2個 SCSI 磁盤(整個磁盤) 32 = /dev/sdc 第3個 SCSI 磁盤(整個磁盤) ... 240 = /dev/sdp 第16個 SCSI 磁盤(整個磁盤) 分區(qū)表示方法如下(以第3個 SCSI 磁盤為例) 33 = /dev/sdc1 第1個分區(qū) 34 = /dev/sdc2 第2個分區(qū) ... 47 = /dev/sdc15 第15個分區(qū) [提示]對于DOS分區(qū)來說,1-4是主分區(qū),5-15是邏輯分區(qū)。但對于GPT分區(qū)來說,全是主分區(qū),沒有邏輯分區(qū)的概念。 [提示]目前的內(nèi)核將SATA/PATA/IED硬盤統(tǒng)一使用 /dev/sd* 來表示,已經(jīng)不再使用 /dev/hd* 這種過時的設(shè)備文件了。 9 block Metadisk(RAID)設(shè)備 0 = /dev/md0 第1組 metadisk 1 = /dev/md1 第2組 metadisk ... [說明]MD驅(qū)動(CONFIG_BLK_DEV_MD)的作用是將同一個文件系統(tǒng)分割到多個物理磁盤上。 10 char 各種雜項設(shè)備(含非串口鼠標(biāo)) 1 = /dev/psaux PS/2鼠標(biāo) 128 = /dev/beep 能夠讓主板的蜂鳴器發(fā)出不同頻率聲音的設(shè)備(Fancy Beeper Daemon) 130 = /dev/watchdog 看門狗(CONFIG_WATCHDOG) 131 = /dev/temperature 機(jī)器內(nèi)部溫度 135 = /dev/rtc 實時時鐘(Real Time Clock) 143 = /dev/pciconf PCI配置空間 144 = /dev/nvram 非易失配置RAM 151 = /dev/led 發(fā)光二極管(LED)燈 152 = /dev/kpoll 內(nèi)核輪詢(Poll)驅(qū)動 156 = /dev/lcd 液晶(LCD)顯示屏 161 = /dev/userdma 用戶空間DMA訪問 162 = /dev/smbus 系統(tǒng)管理總線(System Management Bus) 164 = /dev/ipmo Intel的智能平臺管理(Intelligent Platform Management)接口 165 = /dev/vmmon VMware虛擬機(jī)監(jiān)視器 170 = /dev/thinkpad/thinkpad Thinkpad設(shè)備 173 = /dev/ipmikcs 智能平臺管理(Intelligent Platform Management)接口 175 = /dev/agpgart AGP圖形地址重映射表(Graphics Address Remapping Table) 182 = /dev/perfctr 性能監(jiān)視計數(shù)器 183 = /dev/hwrng 通用硬件隨機(jī)數(shù)發(fā)生器 184 = /dev/cpu/microcode CPU微代碼更新接口(依賴于CONFIG_MICROCODE) 186 = /dev/atomicps 進(jìn)程狀態(tài)數(shù)據(jù)的原子快照 188 = /dev/smbusbios SMBus(系統(tǒng)管理總線) BIOS 189 = /dev/ussp_ctl 用戶空間串口控制器 200 = /dev/net/tun TAP/TUN 網(wǎng)絡(luò)設(shè)備(TAP/TUN以軟件的方式實現(xiàn)了網(wǎng)絡(luò)設(shè)備) TAP模擬了以太網(wǎng)幀(第二層),TUN模擬了IP包(第三層)。 202 = /dev/emd/ctl 增強(qiáng)型 Metadisk RAID (EMD) 控制器 203 = /dev/cuse 用戶空間的字符設(shè)備(Character device in user-space) 212 = /dev/watchdogs/0 第一只看門狗 213 = /dev/watchdogs/1 第二只看門狗 214 = /dev/watchdogs/2 第三只看門狗 215 = /dev/watchdogs/3 第四只看門狗 220 = /dev/mptctl Message passing technology (MPT) control 223 = /dev/input/uinput 用戶層輸入設(shè)備 224 = /dev/tpm TCPA TPM driver 227 = /dev/mcelog X86_64 Machine Check Exception driver 228 = /dev/hpet 高精度事件定時器(HPET) 229 = /dev/fuse Fuse(用戶空間的虛擬文件系統(tǒng)) 231 = /dev/snapshot 系統(tǒng)內(nèi)存快照 232 = /dev/kvm 內(nèi)核虛構(gòu)機(jī)(基于AMD SVM和Intel VT硬件虛擬技術(shù)) 234 = /dev/btrfs-control Btrfs文件系統(tǒng)控制設(shè)備 235 = /dev/autofs Autofs控制設(shè)備 236 = /dev/mapper/control 設(shè)備映射(Device-Mapper)控制器 237 = /dev/loop-control 回環(huán)設(shè)備控制器 238 = /dev/vhost-net 用于 virtio net 的宿主內(nèi)核加速器 11 block SCSI CD-ROM 設(shè)備 0 = /dev/scd0 第1個 SCSI CD-ROM 1 = /dev/scd1 第2個 SCSI CD-ROM ... 13 char 核心輸入設(shè)備 0 = /dev/input/js0 第一個游戲桿(joystick) 1 = /dev/input/js1 第二個游戲桿(joystick) ... 32 = /dev/input/mouse0 第1個鼠標(biāo) 33 = /dev/input/mouse1 第2個鼠標(biāo) ... 63 = /dev/input/mice 所有鼠標(biāo)的合體 64 = /dev/input/event0 第1個事件隊列 65 = /dev/input/event1 第2個事件隊列 ... 14 char OSS(Open Sound System)兼容設(shè)備[已過時] 0 = /dev/mixer OSS混音控制器(CONFIG_SND_MIXER_OSS) 1 = /dev/sequencer OSS音序器(CONFIG_SND_SEQUENCER_OSS) 3 = /dev/dsp OSS數(shù)字音頻波形輸出設(shè)備(CONFIG_SND_PCM_OSS) 8 = /dev/sequencer2 第二OSS音序器(CONFIG_SND_SEQUENCER_OSS) 16 = /dev/mixer1 第二OSS混音控制器(CONFIG_SND_MIXER_OSS) 19 = /dev/dsp1 第二OSS數(shù)字音頻波形輸出設(shè)備(CONFIG_SND_PCM_OSS) 21 char 通用 SCSI 設(shè)備(通常是SCSI光驅(qū)) 0 = /dev/sg0 第1個通用 SCSI 設(shè)備 1 = /dev/sg1 第2個通用 SCSI 設(shè)備 ... [說明]許多發(fā)行版還將這些設(shè)備命名為 /dev/sga, /dev/sgb, /dev/sgc ... 29 char 通用幀緩沖(frame buffer)設(shè)備 0 = /dev/fb0 第1個幀緩沖設(shè)備 1 = /dev/fb1 第2個幀緩沖設(shè)備 ... 31 = /dev/fb31 第32個幀緩沖設(shè)備 43 block 網(wǎng)絡(luò)塊設(shè)備(Network block devices) 0 = /dev/nb0 第1個網(wǎng)絡(luò)塊設(shè)備 1 = /dev/nb1 第2個網(wǎng)絡(luò)塊設(shè)備 ... 44 block 閃存轉(zhuǎn)換層(Flash Translation Layer)文件系統(tǒng) 0 = /dev/ftla 第1個MTD(Memory Technology Device)上的FTL 16 = /dev/ftlb 第2個MTD(Memory Technology Device)上的FTL 32 = /dev/ftlc 第3個MTD(Memory Technology Device)上的FTL ... 240 = /dev/ftlp 第16個MTD(Memory Technology Device)上的FTL [說明]分區(qū)的表示方法與SCSI磁盤相同(最大15個) 65 block SCSI 磁盤(16-31) 0 = /dev/sdq 第17個 SCSI 磁盤(整個磁盤) 16 = /dev/sdr 第18個 SCSI 磁盤(整個磁盤) 32 = /dev/sds 第19個 SCSI 磁盤(整個磁盤) ... 240 = /dev/sdaf 第32個 SCSI 磁盤(整個磁盤) 66 block SCSI 磁盤(32-47) 0 = /dev/sdag 第33個 SCSI 磁盤(整個磁盤) 16 = /dev/sdah 第34個 SCSI 磁盤(整個磁盤) 32 = /dev/sdai 第35個 SCSI 磁盤(整個磁盤) ... 240 = /dev/sdav 第48個 SCSI 磁盤(整個磁盤) 67 block SCSI 磁盤(48-63) 0 = /dev/sdaw 第49個 SCSI 磁盤(整個磁盤) 16 = /dev/sdax 第50個 SCSI 磁盤(整個磁盤) 32 = /dev/sday 第51個 SCSI 磁盤(整個磁盤) ... 240 = /dev/sdbl 第64個 SCSI 磁盤(整個磁盤) 81 char video4linux 0 = /dev/video0 第1個視頻采集設(shè)備(攝像頭) ... 63 = /dev/video63 第64個視頻采集設(shè)備(攝像頭) 64 = /dev/radio0 第1個無線電設(shè)備(收音機(jī)之類) ... 127 = /dev/radio63 第64個無線電設(shè)備(收音機(jī)之類) 224 = /dev/vbi0 第1個垂直中斷(vertical blank interrupt) ... 255 = /dev/vbi31 第64個垂直中斷(vertical blank interrupt) 89 char I2C 總線接口 0 = /dev/i2c-0 第1個 I2C 適配器 1 = /dev/i2c-1 第2個 I2C 適配器 ... 90 char 內(nèi)存技術(shù)設(shè)備(Memory Technology Device) (RAM, ROM, Flash) 0 = /dev/mtd0 第1個 MTD (讀寫) 1 = /dev/mtdr0 第1個 MTD (只讀) ... 30 = /dev/mtd15 第16個 MTD (讀寫) 31 = /dev/mtdr15 第16個 MTD (只讀) 93 block NAND閃存轉(zhuǎn)換層(Flash Translation Layer)文件系統(tǒng) 0 = /dev/nftla 第1個NFTL層 16 = /dev/nftlb 第2個NFTL層 ... 240 = /dev/nftlp 第16個NFTL層 [說明]分區(qū)的表示方法與SCSI磁盤相同(最大15個) 98 block 用戶模式下的虛擬塊設(shè)備(分區(qū)處理方式與 SCSI 磁盤相同) 0 = /dev/ubda 第1個用戶模式塊設(shè)備 16 = /dev/udbb 第2個用戶模式塊設(shè)備 ...108 char 獨立于特定設(shè)備的 PPP 接口 0 = /dev/ppp 獨立于特定設(shè)備的 PPP 接口(CONFIG_PPP)117 block 企業(yè)卷管理系統(tǒng)(Enterprise Volume Management System) 0 = /dev/evms/block_device EVMS塊設(shè)備 1 = /dev/evms/legacyname1 第1個EVMS傳統(tǒng)設(shè)備 2 = /dev/evms/legacyname2 第2個EVMS傳統(tǒng)設(shè)備 ... 兩個范圍都可以相互延伸(向上/向下)一直到它們相遇 ... 254 = /dev/evms/EVMSname2 第2個EVMS本地設(shè)備 255 = /dev/evms/EVMSname1 第1個EVMS本地設(shè)備 [說明]"legacyname"來源于普通的塊設(shè)備名, 例如 /dev/sda5 將會變成 /dev/evms/sda5119 char VMware虛擬網(wǎng)路控制器 0 = /dev/vnet0 第1個虛擬網(wǎng)路 1 = /dev/vnet1 第2個虛擬網(wǎng)路 ...128-135 char Unix98 PTY master 這些設(shè)備不應(yīng)當(dāng)存在設(shè)備節(jié)點,而應(yīng)當(dāng)通過 /dev/ptmx 接口訪問。136-143 char Unix98 PTY slave 0 = /dev/pts/0 第1個 Unix98 PTY slave 1 = /dev/pts/1 第2個 Unix98 PTY slave ... 這些設(shè)備節(jié)點是自動生成的(伴有適當(dāng)?shù)臋?quán)限和模式),不能手動創(chuàng)建。 方法是通過使用適當(dāng)?shù)?mount 選項(通常是:mode=0620,gid=<"tty"組的gid>) 將 devpts 文件系統(tǒng)掛載到 /dev/pts 目錄即可。144 block 用于更多非設(shè)備型掛載的擴(kuò)展區(qū)域(Expansion Area)#1 0 = mounted device 256 255 = mounted device 511145 block 用于更多非設(shè)備型掛載的擴(kuò)展區(qū)域(Expansion Area)#2 0 = mounted device 512 255 = mounted device 767146 block 用于更多非設(shè)備型掛載的擴(kuò)展區(qū)域(Expansion Area)#3 0 = mounted device 768 255 = mounted device 1023147 block DRBD(Distributed Replicated Block Device) 0 = /dev/drbd0 第1個 DRBD 設(shè)備 1 = /dev/drbd1 第2個 DRBD 設(shè)備 ...153 block EMD(Enhanced Metadisk RAID)存儲單元(分區(qū)處理方式與 SCSI 磁盤相同) 0 = /dev/emd/0 第1個存儲單元 1 = /dev/emd/0p1 第1個存儲單元的第1個分區(qū) 2 = /dev/emd/0p2 第1個存儲單元的第2個分區(qū) ... 15 = /dev/emd/0p15 第1個存儲單元的第15個分區(qū) 16 = /dev/emd/1 第2個存儲單元 32 = /dev/emd/2 第3個存儲單元 ... 240 = /dev/emd/15 第16個存儲單元179 block MMC(MultiMeidaCard)塊設(shè)備 0 = /dev/mmcblk0 第1塊 SD/MMC 卡 1 = /dev/mmcblk0p1 第1塊 SD/MMC 卡的第1個分區(qū) 8 = /dev/mmcblk1 第2塊 SD/MMC 卡 ... [說明]每個MMC塊設(shè)備保留的次設(shè)備號數(shù)量由 CONFIG_MMC_BLOCK_MINORS 決定(默認(rèn)=8)。 或者也可以通過內(nèi)核引導(dǎo)參數(shù) mmcblk.perdev_minors 進(jìn)行修改。180 char USB字符設(shè)備 0 = /dev/usb/lp0 第1個USB打印機(jī) ... 15 = /dev/usb/lp15 第16個USB打印機(jī) 48 = /dev/usb/scanner0 第1個USB掃描儀 ... 63 = /dev/usb/scanner15 第16個USB掃描儀 96 = /dev/usb/hiddev0 第1個USB人機(jī)界面設(shè)備(鼠標(biāo)/鍵盤/游戲桿/手寫版等) ... 111 = /dev/usb/hiddev15 第16個USB人機(jī)界面設(shè)備(鼠標(biāo)/鍵盤/游戲桿/手寫版等) 132 = /dev/usb/idmouse ID Mouse (指紋掃描儀)180 block USB塊設(shè)備 0 = /dev/uba 第1個USB塊設(shè)備 8 = /dev/ubb 第2個USB塊設(shè)備 16 = /dev/ubc 第3個USB塊設(shè)備 ...192 char 內(nèi)核 profiling 接口 0 = /dev/profile Profiling 控制設(shè)備 1 = /dev/profile0 CPU 0 的 Profiling 設(shè)備 2 = /dev/profile1 CPU 1 的 Profiling 設(shè)備 ...193 char 內(nèi)核事件跟蹤接口 0 = /dev/trace 跟蹤控制設(shè)備 1 = /dev/trace0 CPU 0 的跟蹤設(shè)備 2 = /dev/trace1 CPU 1 的跟蹤設(shè)備 ...195 char Nvidia 圖形設(shè)備(比如顯卡) 0 = /dev/nvidia0 第1個 Nvidia 卡 1 = /dev/nvidia1 第2個 Nvidia 卡 ... 255 = /dev/nvidiactl Nvidia卡控制設(shè)備202 char 特定于CPU模式的寄存器(model-specific register,MSR) 0 = /dev/cpu/0/msr CPU 0 的 MSRs 1 = /dev/cpu/1/msr CPU 1 的 MSRs ...202 block Xen 虛擬塊設(shè)備 0 = /dev/xvda 第1個 Xen 虛擬磁盤(整塊磁盤) 16 = /dev/xvdb 第2個 Xen 虛擬磁盤(整塊磁盤) 32 = /dev/xvdc 第3個 Xen 虛擬磁盤(整塊磁盤) ... 240 = /dev/xvdp 第16個 Xen 虛擬磁盤(整塊磁盤) [說明]分區(qū)的表示方法與SCSI磁盤相同(最大15個)203 char CPU CPUID 信息 0 = /dev/cpu/0/cpuid CPU0的CPUID 1 = /dev/cpu/1/cpuid CPU1的CPUID ...226 char DRI(Direct Rendering Infrastructure) 0 = /dev/dri/card0 第1個顯卡 1 = /dev/dri/card1 第2個顯卡 ...232 char 生物識別設(shè)備 0 = /dev/biometric/sensor0/fingerprint 第1個設(shè)備的第1個指紋傳感器 1 = /dev/biometric/sensor0/iris 第1個設(shè)備的第1個虹膜傳感器 2 = /dev/biometric/sensor0/retina 第1個設(shè)備的第1個視網(wǎng)膜傳感器 3 = /dev/biometric/sensor0/voiceprint 第1個設(shè)備的第1個聲波傳感器 4 = /dev/biometric/sensor0/facial 第1個設(shè)備的第1個面部傳感器 5 = /dev/biometric/sensor0/hand 第1個設(shè)備的第1個手掌傳感器 ... 10 = /dev/biometric/sensor1/fingerprint 第2個設(shè)備的第1個指紋傳感器 ... 20 = /dev/biometric/sensor2/fingerprint 第3個設(shè)備的第1個指紋傳感器 ...
這部分詳細(xì)說明一些應(yīng)該或可能存在于 /dev 目錄中的其他文件。鏈接最好使用與這里完全相同的格式(絕對路徑或相對路徑)。究竟是使用硬鏈接(hard)還是軟連接(symbolic)取決于不同的設(shè)備,但最好與這里給出示范保持一致。
必須在所有的系統(tǒng)上都存在這些連接:
鏈接 目標(biāo) 鏈接類型 簡要說明------------------------------------------------------------------------/dev/fd /proc/self/fd symbolic 文件描述符/dev/stdin fd/0 symbolic stdin(標(biāo)準(zhǔn)輸入)文件描述府/dev/stdout fd/1 symbolic stdout(標(biāo)準(zhǔn)輸出)文件描述府/dev/stderr fd/2 symbolic stderr(標(biāo)準(zhǔn)錯誤)文件描述府/dev/nfsd socksys symbolic 僅為 iBCS-2 所必須/dev/X0R null symbolic 僅為 iBCS-2 所必須
推薦在所有的系統(tǒng)上都存在這些連接:
鏈接 目標(biāo) 鏈接類型 簡要說明------------------------------------------------------------------------/dev/core /proc/kcore symbolic 為了向后兼容/dev/ramdisk ram0 symbolic 為了向后兼容/dev/ftape qft0 symbolic 為了向后兼容/dev/bttv0 video0 symbolic 為了向后兼容/dev/radio radio0 symbolic 為了向后兼容/dev/i2o* /dev/i2o/* symbolic 為了向后兼容/dev/scd? sr? hard 代替 SCSI CD-ROM 的名字
下面的鏈接很可能需要根據(jù)機(jī)器的實際硬件配置創(chuàng)建其中的一部分甚至全部。這些鏈接僅僅是為了迎合習(xí)慣用法,它們既非必須也非推薦。
鏈接 目標(biāo) 鏈接類型 簡要說明------------------------------------------------------------------------/dev/mouse 鼠標(biāo)設(shè)備 symbolic 當(dāng)前鼠標(biāo)設(shè)備/dev/tape 磁帶設(shè)備 symbolic 當(dāng)前磁帶設(shè)備/dev/cdrom 光盤設(shè)備 symbolic 當(dāng)前光盤設(shè)備/dev/cdwriter 刻錄機(jī)設(shè)備 symbolic 當(dāng)前刻錄機(jī)設(shè)備/dev/scanner 掃描儀設(shè)備 symbolic 當(dāng)前掃描儀設(shè)備/dev/modem 調(diào)制解調(diào)器(貓) symbolic 當(dāng)前撥號設(shè)備/dev/root 根文件系統(tǒng)設(shè)備 symbolic 當(dāng)前根文件系統(tǒng)設(shè)備/dev/swap swap設(shè)備 symbolic 當(dāng)前swap設(shè)備
/dev/modem 不應(yīng)當(dāng)用于能夠同時支持接入(dialin)和呼出(dialout)的貓,因為往往會導(dǎo)致鎖文件問題。如果存在 /dev/modem ,那么它應(yīng)當(dāng)指向一個恰當(dāng)?shù)闹?TTY 設(shè)備。
對于SCSI設(shè)備,/dev/tape 應(yīng)該指向 /dev/st* ,而 /dev/cdrom 應(yīng)該指向 /dev/sr* ;而 /dev/cdwriter 和 /dev/scanner 應(yīng)當(dāng)分別指向?qū)?yīng)的 /dev/sg* 。
/dev/mouse 可以指向一個主串行 TTY 設(shè)備、一個硬件鼠標(biāo)、或者一個對應(yīng)鼠標(biāo)驅(qū)動程序的套接字(例如 /dev/gpmdata )。
持久套接字和命名管道可以存在于 /dev 中。常見的有:
/dev/printer socket lpd 本地套接字/dev/log socket syslog 本地套接字/dev/gpmdata socket gpm 鼠標(biāo)多路復(fù)用器(multiplexer)/dev/initctl fifo pipe init 監(jiān)聽它并從中獲取信息(用戶與 init 進(jìn)程交互的通道)
以下目錄被保留用于掛載特殊的文件系統(tǒng)。這些特殊的文件系統(tǒng)只提供內(nèi)核接口而不提供標(biāo)準(zhǔn)的設(shè)備節(jié)點。
/dev/pts devpts PTY slave 文件系統(tǒng)/dev/shm tmpfs 提供對 POSIX 共享內(nèi)存的直接訪問
終端(或TTY)設(shè)備是一種特殊的字符設(shè)備。終端設(shè)備是可以在會話中用作控制終端的任何設(shè)備,包括:虛擬控制臺、串行接口、偽終端(PTY)。
所有終端設(shè)備共享一個通用的功能集合(線路規(guī)則),這包含常規(guī)的終端線路規(guī)程以及SLIP和PPP模式。所有的終端設(shè)備的命名都很相似。這部分內(nèi)容將解釋命名規(guī)則和各種類型的TTY(終端)的使用。需要注意的是這些命名習(xí)慣包含了幾個歷史遺留包袱。其中的一些是Linux所特有的,另一些則是繼承自其他系統(tǒng),還有一些反映了Linux在成長過程中拋棄了原來借用自其它系統(tǒng)的一些習(xí)慣。井號(#)在設(shè)備名里表示一個無前導(dǎo)零的十進(jìn)制數(shù)。
虛擬控制臺是在系統(tǒng)視頻監(jiān)視器上顯示的全屏終端。虛擬控制臺被命名為 /dev/tty# (編號從 /dev/tty1 開始)。/dev/tty0 是當(dāng)前虛擬控制臺。/dev/tty0 用于在不能使用幀緩沖設(shè)備(/dev/fb*)的機(jī)器上存取系統(tǒng)顯卡,但 /dev/console 并不用于此目的??刂婆_設(shè)備(/dev/console)由內(nèi)核直接管理,用于接收和顯示系統(tǒng)消息,以及單用戶模式登陸。
這里所說的"串行接口"是指 RS-232 串口和任何模擬這種接口的設(shè)備,無論是硬件(如調(diào)制解調(diào)器)還是軟件(如ISDN驅(qū)動)。Linux中的每一個串口都有兩個設(shè)備名:主設(shè)備或呼入(callin)設(shè)備、輔設(shè)備或呼出(callout)設(shè)備。兩者之間使用字母的大小寫進(jìn)行區(qū)分。比如,對于任意字母"X",設(shè)備名分別為 /dev/ttyX# 與 /dev/cux# 。由于歷史原因,/dev/ttyS# 和 /dev/ttyC# 分別等價于 /dev/cua# 和 /dev/cub# 。名稱 /dev/ttyQ# 和 /dev/cuq# 被保留為僅供本地使用。
串口的仲裁是通過鎖文件(/var/lock/LCK..ttyX#)來提供的。鎖文件的內(nèi)容應(yīng)該是以ASCII碼表示的鎖定進(jìn)程的PID。常見的做法是安裝一個諸如 /dev/modem 這樣的鏈接來指向串口。為了確保能夠正確的預(yù)先鎖定這些鏈接,軟件應(yīng)該追蹤符號鏈接并鎖定所有可能的名字。此外,還建議為相應(yīng)的輔設(shè)備安裝對應(yīng)的鎖文件。為了避免死鎖,建議按以下順序獲取鎖,并按相反的順序釋放鎖:
在符號鏈接出現(xiàn)嵌套的情況下,鎖文件應(yīng)按照符號鏈接的解析順序來安裝。
在任何情況下,應(yīng)用程序都應(yīng)該等待另一個程序釋放鎖之后,再持有這個鎖。此外,試圖為輔設(shè)備創(chuàng)建鎖文件的應(yīng)用程序應(yīng)考慮被用于非串口的TTY端口的可能性(此時不存在輔設(shè)備)。
偽終端既可以用于創(chuàng)建登陸會話,也可以為其他需要通過TTY線路規(guī)則(包括SLIP或者PPP功能)來生成數(shù)據(jù)的進(jìn)程提供幫助。每一個 PTY 都有一個master端和一個slave端。按照 System V/Unix98 的 PTY 命名方案,所有master端共享同一個 /dev/ptmx 設(shè)備節(jié)點(打開它內(nèi)核將自動給出一個未分配的PTY),所有slave端都位于 /dev/pts/ 目錄下,名為 /dev/pts/# (內(nèi)核會根據(jù)需要自動生成和刪除它們)。
一旦master端被打開,相應(yīng)的slave設(shè)備就可以按照與 TTY 設(shè)備完全相同的方式使用。master設(shè)備與slave設(shè)備之間通過內(nèi)核進(jìn)行連接,等價于擁有 TTY 功能的雙向管道(pipe)。
聯(lián)系客服