新聞中心
Linux系統(tǒng)作為一種開源操作系統(tǒng),其深受廣大技術(shù)人員的青睞,是眾多大型服務(wù)器的首選。而其中的字符設(shè)備主設(shè)備號(hào)也是Linux系統(tǒng)中的一個(gè)重要概念。本文將,幫助讀者更好地理解Linux系統(tǒng)。

創(chuàng)新互聯(lián)建站自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元鹽田做網(wǎng)站,已為上家服務(wù),為鹽田各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
一、什么是Linux字符設(shè)備主設(shè)備號(hào)
在Linux系統(tǒng)中,每個(gè)設(shè)備都有其獨(dú)特的設(shè)備號(hào),這個(gè)設(shè)備號(hào)是由主設(shè)備號(hào)和次設(shè)備號(hào)組成的。其中,主設(shè)備號(hào)和Linux內(nèi)核中定義的每個(gè)字符設(shè)備驅(qū)動(dòng)程序相關(guān)聯(lián),也就是說,它們指定哪些設(shè)備屬于特定的設(shè)備類型。而次設(shè)備號(hào)則是用于區(qū)分相同類型的不同設(shè)備,它們可以是硬件設(shè)備中使用的物理編號(hào)。
字符設(shè)備主設(shè)備號(hào)是一個(gè)非負(fù)整數(shù),它代表了Linux內(nèi)核驅(qū)動(dòng)程序模塊中的字符設(shè)備類型。當(dāng)用戶空間發(fā)起一個(gè)設(shè)備請(qǐng)求時(shí),內(nèi)核通過設(shè)備號(hào)來找到正確的設(shè)備驅(qū)動(dòng)程序,并將請(qǐng)求轉(zhuǎn)發(fā)到相關(guān)的設(shè)備實(shí)例。
二、Linux字符設(shè)備主設(shè)備號(hào)范圍
在Linux系統(tǒng)中,主設(shè)備號(hào)是一個(gè)0到255之間的數(shù)字。所有的字符設(shè)備驅(qū)動(dòng)程序都與主設(shè)備號(hào)相關(guān)聯(lián)。因此為了避免相同類型的不同設(shè)備之間的沖突,Linux內(nèi)核規(guī)定了主設(shè)備號(hào)的范圍和使用方式。在此范圍內(nèi),系統(tǒng)中任何一個(gè)設(shè)備驅(qū)動(dòng)程序都應(yīng)該使用唯一的主設(shè)備號(hào)。
具體來說,Linux系統(tǒng)中主設(shè)備號(hào)的范圍如下:
1.內(nèi)核本身使用的0-255號(hào)之間的數(shù)字;
2.開發(fā)者使用的256號(hào)到511號(hào)之間的數(shù)字,這些是用于開發(fā)一些新的設(shè)備驅(qū)動(dòng)程序或者修改現(xiàn)有的設(shè)備驅(qū)動(dòng)程序;
3.作為設(shè)備節(jié)點(diǎn)使用的512號(hào)到4095號(hào)之間的數(shù)字。這些用于唯一標(biāo)識(shí)每個(gè)特定類型的設(shè)備。例如,硬盤驅(qū)動(dòng)程序可以使用主設(shè)備號(hào)為3,而不同的物理磁盤可以使用不同的次設(shè)備號(hào)進(jìn)行區(qū)分。
需要注意的是,不同的設(shè)備類型可以使用相同的主設(shè)備號(hào),但它們必須有不同的次設(shè)備號(hào)。這也是為什么主設(shè)備號(hào)和次設(shè)備號(hào)都需要的原因。
三、如何使用Linux字符設(shè)備主設(shè)備號(hào)
在Linux系統(tǒng)中,使用字符設(shè)備主設(shè)備號(hào)的事情是由設(shè)備驅(qū)動(dòng)程序來處理的。當(dāng)驅(qū)動(dòng)程序被加載到內(nèi)核中時(shí),它會(huì)通過以下方式將自己與主設(shè)備號(hào)相關(guān)聯(lián):
1.注冊字符設(shè)備-驅(qū)動(dòng)程序通過調(diào)用Linux系統(tǒng)在文件系統(tǒng)上創(chuàng)建字符設(shè)備的函數(shù)來注冊自己的主設(shè)備號(hào)。
2.打開設(shè)備節(jié)點(diǎn)-當(dāng)用戶空間的應(yīng)用程序打開一個(gè)設(shè)備節(jié)點(diǎn)時(shí),內(nèi)核會(huì)識(shí)別節(jié)點(diǎn)的主設(shè)備號(hào),然后找到匹配的驅(qū)動(dòng)程序,并創(chuàng)建一個(gè)設(shè)備實(shí)例來代表該設(shè)備的進(jìn)程。
3.發(fā)送設(shè)備請(qǐng)求-應(yīng)用程序可以向設(shè)備驅(qū)動(dòng)程序發(fā)送設(shè)備請(qǐng)求,請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到正確的設(shè)備實(shí)例,然后由驅(qū)動(dòng)程序處理。
4.關(guān)閉設(shè)備節(jié)點(diǎn)-當(dāng)一個(gè)應(yīng)用程序關(guān)閉一個(gè)設(shè)備節(jié)點(diǎn)時(shí),內(nèi)核將自動(dòng)刪除與該節(jié)點(diǎn)相關(guān)聯(lián)的設(shè)備實(shí)例,釋放設(shè)備資源。
字符設(shè)備主設(shè)備號(hào)是Linux系統(tǒng)中非常重要的一個(gè)概念。它是用于唯一區(qū)分不同類型設(shè)備的數(shù)字。使用Linux字符設(shè)備主設(shè)備號(hào)時(shí),需要遵循一定的規(guī)則來確保設(shè)備之間不會(huì)發(fā)生沖突。因此,當(dāng)開發(fā)Linux設(shè)備驅(qū)動(dòng)程序時(shí),對(duì)字符設(shè)備主設(shè)備號(hào)的深入了解是非常有必要的,這將有助于開發(fā)者更好地理解Linux系統(tǒng)!
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220在linux中是不是能看到設(shè)備節(jié)點(diǎn)就說明設(shè)備可以被訪問了解決思路
Linux 中的設(shè)備有2種類型:字符設(shè)備(無緩沖且只能順序存取)、塊設(shè)備(有緩沖且磨洞桐可以隨機(jī)存取)。每個(gè)字符設(shè)備和塊設(shè)備都必須有主、次設(shè)備號(hào),主設(shè)備號(hào)相同的設(shè)備是同類設(shè)備(使用同一個(gè)驅(qū)動(dòng)程序)。這些設(shè)備中,有些設(shè)備是對(duì)實(shí)際存在的物理硬件的抽象,而有些設(shè)備則是內(nèi)核自身提供的功能(不依賴于特定的物理硬件,又稱為”虛擬設(shè)備”)。每個(gè)設(shè)備在 /dev 目錄下都有一個(gè)對(duì)應(yīng)的文件(節(jié)點(diǎn))??梢酝ㄟ^ cat /proc/devices 命令查看當(dāng)前已經(jīng)加載的設(shè)備驅(qū)動(dòng)程序的主設(shè)備號(hào)。內(nèi)核能夠識(shí)別的所有設(shè)備都記錄在原碼樹下的 Documentation/devices.txt 文件中。在 /dev 目錄下除了字符設(shè)備和塊設(shè)備節(jié)點(diǎn)之外還通常還會(huì)存在:FIFO管道、Socket、軟/硬連接、目錄。這些東西沒有主/次設(shè)備號(hào)。
了解這些設(shè)備的最基本要求就是對(duì) 每個(gè)設(shè)備文件的含義了如指掌,下面就醫(yī)列表的形式列出常見的設(shè)備文件以及相應(yīng)的含義(比較偏僻的就省略了):
主設(shè)備號(hào) 設(shè)備類型
次設(shè)備號(hào)=文件名 簡要說明
0 未命名設(shè)備(例如:掛載的非設(shè)備)
0 = 未空設(shè)備號(hào)保留
1 char 內(nèi)存設(shè)備
1 = /dev/mem 直接存取物理瞎坦內(nèi)存
2 = /dev/kmem 存取經(jīng)過內(nèi)核虛擬之后的內(nèi)存
3 = /dev/null 空設(shè)備。任何寫入都將被直接丟棄,任何讀取都將得到EOF。
4 = /dev/port 存取 I/O 端口
5 = /dev/zero 零字節(jié)源,只能讀取到無限多的零字節(jié)。
7 = /dev/full 滿設(shè)備。任何寫入都將失敗,并把errno設(shè)為ENOSPC以表示沒有剩余空間。
8 = /dev/random 隨機(jī)數(shù)發(fā)生器。完全由用戶的輸入來產(chǎn)生隨機(jī)數(shù)。
如果用戶停止所有動(dòng)作,則停止產(chǎn)生新的隨機(jī)數(shù)。
9 = /dev/urandom 更快,但是不夠安全的隨機(jī)數(shù)發(fā)生器。盡可能由用戶的輸入來產(chǎn)生隨機(jī)數(shù),
如果用戶停止所有動(dòng)作,則把已經(jīng)產(chǎn)生的隨機(jī)數(shù)做為種子來產(chǎn)生新的隨機(jī)數(shù)。
10 = /dev/aio 異步 I/O 通知接口
11 = /dev/kmsg 任何對(duì)該文件的寫入都將作為 printk 的輸出
1 block RAM disk
0 = /dev/ram0 第1個(gè) RAM disk (initrd只能使用ram0)
1 = /dev/ram1 第2個(gè) RAM disk
…
200 = /dev/ram200 第200個(gè) RAM disk
4 char TTY(終端)設(shè)備
0 = /dev/tty0 當(dāng)前虛擬控制臺(tái)
1 = /dev/tty1 第1個(gè)虛擬控制臺(tái)
…
63 = /dev/tty63 第63個(gè)虛擬控制臺(tái)
4 block 如果根文件系統(tǒng)以是以只讀方式掛載的,那么就不可能創(chuàng)建真正的設(shè)備節(jié)顫顫點(diǎn),
此時(shí)就使用該設(shè)備作為動(dòng)態(tài)分配的主(major)設(shè)備的別名
0 = /dev/root
5 char 其他 TTY 設(shè)備
0 = /dev/tty 當(dāng)前 TTY 設(shè)備
1 = /dev/console 系統(tǒng)控制臺(tái)
2 = /dev/ptmx 所有 PTY master 的復(fù)用器
7 char 虛擬控制臺(tái)捕捉設(shè)備(這些設(shè)備既允許讀也允許寫)
0 = /dev/vcs 當(dāng)前虛擬控制臺(tái)(vc)的文本內(nèi)容
1 = /dev/vcs1 tty1 的文本內(nèi)容
…
63 = /dev/vcs63 tty63 的文本內(nèi)容
128 = /dev/vcsa 當(dāng)前虛擬控制臺(tái)(vc)的文本/屬性內(nèi)容
129 = /dev/vcsa1 tty1 的文本/屬性內(nèi)容
…
191 = /dev/vcsa63 tty63 的文本/屬性內(nèi)容
7 block 回環(huán)設(shè)備(用一個(gè)普通的磁盤文件來模擬一個(gè)塊設(shè)備)
對(duì)回環(huán)設(shè)備的綁定由 mount(8) 或 losetup(8) 處理
0 = /dev/loop0 第1個(gè)回環(huán)設(shè)備
1 = /dev/loop1 第2個(gè)回環(huán)設(shè)備
…
8 block SCSI 磁盤(0-15)
0 = /dev/sda 第1個(gè) SCSI 磁盤(整個(gè)磁盤)
16 = /dev/sdb 第2個(gè) SCSI 磁盤(整個(gè)磁盤)
32 = /dev/sdc 第3個(gè) SCSI 磁盤(整個(gè)磁盤)
…
240 = /dev/sdp 第16個(gè) SCSI 磁盤(整個(gè)磁盤)
分區(qū)表示方法如下(以第3個(gè) SCSI 磁盤為例)
33 = /dev/sdc1 第1個(gè)分區(qū)
34 = /dev/sdc2 第2個(gè)分區(qū)
…
47 = /dev/sdc15 第15個(gè)分區(qū)
對(duì)于Linux/i386來說,分區(qū)1-4是主分區(qū),5-15是邏輯分區(qū)。
9 block Metadisk(RAID)設(shè)備
0 = /dev/md0 第1組 metadisk
1 = /dev/md1 第2組 metadisk
…
metadisk 驅(qū)動(dòng)用于將同一個(gè)文件系統(tǒng)分割到多個(gè)物理磁盤上。
10 char 非串口鼠標(biāo),各種雜項(xiàng)設(shè)備和特性
1 = /dev/psaux PS/2鼠標(biāo)
131 = /dev/temperature 機(jī)器內(nèi)部溫度
134 = /dev/apm_bios APM(高級(jí)電源管理) BIOS
135 = /dev/rtc 實(shí)時(shí)時(shí)鐘(Real Time Clock)
144 = /dev/nvram 非易失配置 RAM
162 = /dev/bus 系統(tǒng)管理總線(System Management Bus)
164 = /dev/ipmo Intel的智能平臺(tái)管理(Intelligent Platform Management)接口
173 = /dev/ipmikcs 智能平臺(tái)管理(Intelligent Platform Management)接口
175 = /dev/agpgart AGP圖形地址重映射表(Graphics Address Remapping Table)
182 = /dev/perfctr 性能監(jiān)視計(jì)數(shù)器
183 = /dev/hwrng 通用硬件隨機(jī)數(shù)發(fā)生器
184 = /dev/cpu/microcode CPU微代碼更新接口
186 = /dev/atomicps 進(jìn)程狀態(tài)數(shù)據(jù)的原子快照
188 = /dev/buios Bus(系統(tǒng)管理總線) BIOS
200 = /dev/net/tun TAP/TUN 網(wǎng)絡(luò)設(shè)備(TAP/TUN以軟件的方式實(shí)現(xiàn)了網(wǎng)絡(luò)設(shè)備)
TAP模擬了以太網(wǎng)幀(第二層),TUN模擬了IP包(第三層)。
202 = /dev/emd/ctl 增強(qiáng)型 Metadisk RAID (EMD) 控制器
220 = /dev/mptctl Message passing technology (MPT) control
223 = /dev/input/uinput 用戶層輸入設(shè)備驅(qū)動(dòng)支持
227 = /dev/mcelog X86_64 Machine Check Exception driver
228 = /dev/hpet HPET driver
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ù))
11 block SCSI CD-ROM 設(shè)備
0 = /dev/scd0 第1個(gè) SCSI CD-ROM
1 = /dev/scd1 第2個(gè) SCSI CD-ROM
…
13 char 核心輸入設(shè)備
32 = /dev/input/mouse0 第1個(gè)鼠標(biāo)
33 = /dev/input/mouse1 第2個(gè)鼠標(biāo)
…
62 = /dev/input/mouse30 第31個(gè)鼠標(biāo)
63 = /dev/input/mice 所有鼠標(biāo)的統(tǒng)一
64 = /dev/input/event0 第1個(gè)事件隊(duì)列
65 = /dev/input/event1 第2個(gè)事件隊(duì)列
…
95 = /dev/input/event1 第32個(gè)事件隊(duì)列
21 char 通用 SCSI 設(shè)備(通常是SCSI光驅(qū))
0 = /dev/sg0 第1個(gè)通用 SCSI 設(shè)備
1 = /dev/sg1 第2個(gè)通用 SCSI 設(shè)備
…
29 char 通用幀緩沖(frame buffer)設(shè)備
0 = /dev/fb0 第1個(gè)幀緩沖設(shè)備
1 = /dev/fb1 第2個(gè)幀緩沖設(shè)備
…
31 = /dev/fb31 第32個(gè)幀緩沖設(shè)備
30 char iBCS-2 兼容設(shè)備
0 = /dev/socksys 套接字訪問接口
1 = /dev/spx SVR3 本地 X 接口
32 = /dev/inet/ip 網(wǎng)絡(luò)訪問接口
33 = /dev/inet/icmp
34 = /dev/inet/ggp
35 = /dev/inet/ipip
36 = /dev/inet/tcp
37 = /dev/inet/egp
38 = /dev/inet/pup
39 = /dev/inet/udp
40 = /dev/inet/idp
41 = /dev/inet/rawip
此外,iBCS-2 還需要下面的連接必須存在
/dev/ip -> /dev/inet/ip
/dev/icmp -> /dev/inet/icmp
/dev/ggp -> /dev/inet/ggp
/dev/ipip -> /dev/inet/ipip
/dev/tcp -> /dev/inet/tcp
/dev/egp -> /dev/inet/egp
/dev/pup -> /dev/inet/pup
/dev/udp -> /dev/inet/udp
/dev/idp -> /dev/inet/idp
/dev/rawip -> /dev/inet/rawip
/dev/inet/arp -> /dev/inet/udp
/dev/inet/rip -> /dev/inet/udp
/dev/nfsd -> /dev/socksys
/dev/X0R -> /dev/null
36 char Netlink 支持
0 = /dev/route 路由, 設(shè)備更新, kernel to user
3 = /dev/fwmonitor Firewall packet 復(fù)制
59 char sf 防火墻模塊
0 = /dev/firewall 與 sf 內(nèi)核模塊通信
65 block SCSI 磁盤(16-31)
0 = /dev/sdq 第17個(gè) SCSI 磁盤(整個(gè)磁盤)
16 = /dev/sdr 第18個(gè) SCSI 磁盤(整個(gè)磁盤)
32 = /dev/sds 第19個(gè) SCSI 磁盤(整個(gè)磁盤)
…
240 = /dev/sdaf 第32個(gè) SCSI 磁盤(整個(gè)磁盤)
66 block SCSI 磁盤(32-47)
0 = /dev/sdag 第33個(gè) SCSI 磁盤(整個(gè)磁盤)
16 = /dev/sdah 第34個(gè) SCSI 磁盤(整個(gè)磁盤)
32 = /dev/sdai 第35個(gè) SCSI 磁盤(整個(gè)磁盤)
…
240 = /dev/sdav 第48個(gè) SCSI 磁盤(整個(gè)磁盤)
89 char I2C 總線接口
0 = /dev/i2c-0 第1個(gè) I2C 適配器
1 = /dev/i2c-1 第2個(gè) I2C 適配器
…
98 block 用戶模式下的虛擬塊設(shè)備(分區(qū)處理方式與 SCSI 磁盤相同)
0 = /dev/ubda 第1個(gè)用戶模式塊設(shè)備
16 = /dev/udbb 第2個(gè)用戶模式塊設(shè)備
…
103 block 審計(jì)(Audit)設(shè)備
0 = /dev/audit 審計(jì)(Audit)設(shè)備
char Unix98 PTY master
這些設(shè)備不應(yīng)當(dāng)存在設(shè)備節(jié)點(diǎn),而應(yīng)當(dāng)通過 /dev/ptmx 接口訪問。
char Unix98 PTY slave
這些設(shè)備節(jié)點(diǎn)是自動(dòng)生成的(伴有適當(dāng)?shù)臋?quán)限和模式),不能手動(dòng)創(chuàng)建。
方法是通過使用適當(dāng)?shù)?mount 選項(xiàng)(通常是:mode=0620,gid=)
將 devpts 文件系統(tǒng)掛載到 /dev/pts 目錄即可。
0 = /dev/pts/0 第1個(gè) Unix98 PTY slave
1 = /dev/pts/1 第2個(gè) Unix98 PTY slave
…
153 block Enhanced Metadisk RAID (EMD) 存儲(chǔ)單元(分區(qū)處理方式與 SCSI 磁盤相同)
0 = /dev/emd/0 第1個(gè)存儲(chǔ)單元
1 = /dev/emd/0p1 第1個(gè)存儲(chǔ)單元的第1個(gè)分區(qū)
2 = /dev/emd/0p2 第1個(gè)存儲(chǔ)單元的第2個(gè)分區(qū)
…
15 = /dev/emd/0p15 第1個(gè)存儲(chǔ)單元的第15個(gè)分區(qū)
16 = /dev/emd/1 第2個(gè)存儲(chǔ)單元
32 = /dev/emd/2 第3個(gè)存儲(chǔ)單元
…
240 = /dev/emd/15 第16個(gè)存儲(chǔ)單元
180 char USB 字符設(shè)備
96 = /dev/u/hiddev0 第1個(gè)USB人機(jī)界面設(shè)備(鼠標(biāo)/鍵盤/游戲桿/手寫版等人操作計(jì)算機(jī)的設(shè)備)
…
111 = /dev/u/hiddev15 第16個(gè)USB人機(jī)界面設(shè)備
180 block USB 塊設(shè)備(U盤之類)
0 = /dev/uba 第1個(gè)USB 塊設(shè)備
8 = /dev/ubb 第2個(gè)USB 塊設(shè)備
16 = /dev/ubc 第3個(gè)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個(gè) Nvidia 卡
1 = /dev/nvidia1 第2個(gè) 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
…
203 char CPU CPUID 信息
0 = /dev/cpu/0/cpuid CPU 0 的 CPUID
1 = /dev/cpu/1/cpuid CPU 1 的 CPUID
…
===================================================================
這部分詳細(xì)說明一些應(yīng)該或可能存在于 /dev 目錄之外的文件。
鏈接更好使用與這里完全相同的格式(絕對(duì)路徑或相對(duì)路徑)。
究竟是使用硬鏈接(hard)還是軟連接(symbolic)取決于不同的設(shè)備。
必須的鏈接
必須在所有的系統(tǒng)上都存在這些連接:
鏈接 目標(biāo) 鏈接類型 簡要說明
/dev/fd /proc/self/fd symbolic 文件描述府
/dev/stdin fd/0 symbolic 標(biāo)準(zhǔn)輸入文件描述府
/dev/stdout fd/1 symbolic 標(biāo)準(zhǔn)輸出文件描述符
/dev/stderr fd/2 symbolic 標(biāo)準(zhǔn)錯(cuò)誤文件描述符
/dev/nfsd socksys symbolic 僅為 iBCS-2 所必須
/dev/X0R null symbolic 僅為 iBCS-2 所必須
/dev/X0R 是 —
推薦的鏈接
推薦在所有的系統(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ī)器的實(shí)際硬件配置創(chuàng)建其中的一部分甚至全部。
這些鏈接僅僅是為了迎合習(xí)慣用法,它們既非必須也非推薦。
鏈接 目標(biāo) 鏈接類型 簡要說明
/dev/mouse mouse port symbolic 當(dāng)前鼠標(biāo)
/dev/tape tape device symbolic 當(dāng)前磁帶
/dev/cdrom CD-ROM device symbolic 當(dāng)前CD-ROM
/dev/cdwriter CD-writer symbolic 當(dāng)前CD-writer
/dev/scanner scanner symbolic 當(dāng)前掃描儀
/dev/modem modem port symbolic 當(dāng)前調(diào)制解調(diào)器
/dev/root root device symbolic 當(dāng)前根文件系統(tǒng)所在設(shè)備
/dev/swap swap device symbolic 當(dāng)前swap所在設(shè)備
/dev/modem 不應(yīng)當(dāng)用于能夠同時(shí)支持呼入和呼出的modem,因?yàn)橥鶗?huì)導(dǎo)致鎖文件問題。
如果存在 /dev/modem ,那么它應(yīng)當(dāng)指向一個(gè)恰當(dāng)?shù)闹?TTY 設(shè)備。
對(duì)于SCSI設(shè)備,
/dev/tape 和 /dev/cdrom 應(yīng)該分別指向”cooked”設(shè)備 /dev/st* 和 /dev/sr* ;
而 /dev/cdwriter 和 /dev/scanner 應(yīng)當(dāng)分別指向恰當(dāng)?shù)?/dev/sg* 。
/dev/mouse 可以指向一個(gè)主串行 TTY 設(shè)備、一個(gè)硬件鼠標(biāo)、
或者一個(gè)對(duì)應(yīng)鼠標(biāo)驅(qū)動(dòng)程序的套接字(例如 /dev/gpmdata)。
套接字和管道
持久套接字和命名管道可以存在于 /dev 中。常見的有:
/dev/printer socket lpd 本地套接字
/dev/log socket syslog 本地套接字
/dev/gpmdata socket gpm 鼠標(biāo)多路復(fù)用器(multiplexer)
/dev/gpmctl socket (LFS-LiveCD中出現(xiàn))
/dev/initctl fifo pipe init 監(jiān)聽它并從中獲取信息(用戶與 init 進(jìn)程交互的通道)
掛載點(diǎn)
以下名稱被保留用于掛載特殊的文件系統(tǒng)。
這些特殊的文件系統(tǒng)只提供內(nèi)核界面而不提供標(biāo)準(zhǔn)的設(shè)備節(jié)點(diǎn)。
/dev/pts devpts PTY slave 文件系統(tǒng)
/dev/shm tmpfs 提供對(duì) POSIX 共享內(nèi)存的直接訪問
===================================================================
終端(或TTY)設(shè)備是一種特殊的字符設(shè)備。終端設(shè)備是可以在會(huì)話中扮演控制終端角色的任何設(shè)備,
包括:虛擬控制臺(tái)、串行接口(已廢棄)、偽終端(PTY)。
所有的終端設(shè)備共享一個(gè)通用的功能:line discipline,
它既包含通用的終端 line discipline 也包含SLIP和PPP模式。
所有的終端設(shè)備的命名都很相似。這部分內(nèi)容將解釋命名規(guī)則和各種類型的TTY(終端)的使用。
需要注意的是這些命名習(xí)慣包含了幾個(gè)歷史遺留包袱。
其中的一些是Linux所特有的,另一些則是繼承自其他系統(tǒng),
還有一些反映了Linux在成長過程中拋棄了原來借用自其它系統(tǒng)的一些習(xí)慣。
井號(hào)(#)在設(shè)備名里表示一個(gè)無前導(dǎo)零的十進(jìn)制數(shù)。
虛擬控制臺(tái)(Virtual console)和控制臺(tái)設(shè)備(console device)
虛擬控制臺(tái)是在系統(tǒng)視頻監(jiān)視器上全屏顯示的終端。
虛擬控制臺(tái)被命名為編號(hào)從 /dev/tty1 開始的 /dev/tty# 。
/dev/tty0 是當(dāng)前虛擬控制臺(tái)。
/dev/tty0 用于在不能使用幀緩沖設(shè)備(/dev/fb*)的機(jī)器上存取系統(tǒng)視頻卡,
注意,不要將 /dev/console 用于此目的。
/dev/console 由內(nèi)核管理,系統(tǒng)消息將被發(fā)送到這里。
單用戶模式下必須允許 login 使用 /dev/console 。
串行接口(已廢棄)
這里所說的”串行接口”是指 RS-232 串行接口和任何模擬這種接口的設(shè)備,
不管是在硬件(例如調(diào)制解調(diào)器)還是在軟件(例如ISDN驅(qū)動(dòng))中模擬。
在linux中的每一個(gè)串行接口都有兩個(gè)設(shè)備名:
主設(shè)備或呼入(callin)設(shè)備、交替設(shè)備或呼出(callout)設(shè)備。
設(shè)備類型之間使用字母的大小寫進(jìn)行區(qū)分。
比如,對(duì)于任意字母X,”tty”設(shè)備名為 /dev/ttyX# ,而”cu”設(shè)備名則為 /dev/cux# 。
由于歷史原因,/dev/ttyS# 和 /dev/ttyC# 分別等價(jià)于 /dev/cua# 和 /dev/cub# 。
名稱 /dev/ttyQ# 和 /dev/cuq# 被保留為本地使用。
偽終端(PTY)
偽終端用于創(chuàng)建登陸會(huì)話或提供其它功能,
比如通過 TTY line discipline (包括SLIP或者PPP功能)來處理任意的數(shù)據(jù)生成。
每一個(gè) PTY 都有一個(gè)master端和一個(gè)slave端。按照 System V/Unix98 的 PTY 命名方案,
所有master端共享同一個(gè) /dev/ptmx 設(shè)備節(jié)點(diǎn)(打開它內(nèi)核將自動(dòng)給出一個(gè)未分配的PTY),
所有slave端都位于 /dev/pts 目錄下,名為 /dev/pts/# (內(nèi)核會(huì)根據(jù)需要自動(dòng)生成和刪除它們)。
一旦master端被打開,相應(yīng)的slave設(shè)備就可以按照與 TTY 設(shè)備完全相同的方式使用。
master設(shè)備與slave設(shè)備之間通過內(nèi)核進(jìn)行連接,等價(jià)于擁有 TTY 功能的雙向管道(pipe)。
===============================
你可能會(huì)很奇怪,為什么沒有 /dev/hda 這樣的設(shè)備,難道不常用么?
Linux字符設(shè)備驅(qū)動(dòng)調(diào)試,求大神指教,答得好另外追加分?jǐn)?shù)!謝謝!
OK,菜鳥推薦看linux設(shè)備驅(qū)動(dòng)ddr3一書,比什么效果都好!
static int driver_init( void )
//設(shè)備初始化函數(shù),static是為了本函數(shù)只是在本文件中訪問,不在其他文件中調(diào)用
{
int rc;
driver_dev = MKDEV( DEV_MAJOR, DEV_MINOR );
//用主設(shè)備號(hào)DEV_MAJOR和從設(shè)備號(hào)DEV_MINOR生成設(shè)備號(hào)
rc = register_chrdev_region( driver_dev, 1, “driver” );
//為一個(gè)字符驅(qū)動(dòng)獲取一個(gè)設(shè)備編號(hào)
if(rc owner = THIS_MODULE;
//填寫設(shè)備驅(qū)動(dòng)的相關(guān)信息
driver_cdev->ops = &driver_fops;
//填寫操縱這個(gè)字符設(shè)備文件的方法
cdev_init( driver_cdev, &driver_fops );
//一般調(diào)用driver_fops中的一些方法來初始化設(shè)備文件
cdev_add( driver_cdev, driver_dev, 1 );
//將該設(shè)備放到系統(tǒng)設(shè)備鏈中
printk(KERN_ALERT “initial Device Successfully!\n”);
//輸出調(diào)試信息:成功
return( 0 ); //返回0宣告函數(shù)正常退出
}
這是一個(gè)簡單的示例,讓你了解字符設(shè)備驅(qū)動(dòng)的注冊過程,上面的作用就是注冊了一個(gè)主設(shè)備號(hào)為DEV_MAJOR次設(shè)備號(hào)為DEV_MINOR的字符設(shè)備驅(qū)動(dòng),對(duì)它的操作函數(shù)是driver_fops中。
linux 字符設(shè)備主設(shè)備號(hào)范圍的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 字符設(shè)備主設(shè)備號(hào)范圍,深入了解Linux字符設(shè)備主設(shè)備號(hào)范圍,在linux中是不是能看到設(shè)備節(jié)點(diǎn)就說明設(shè)備可以被訪問了解決思路,Linux字符設(shè)備驅(qū)動(dòng)調(diào)試,求大神指教,答得好另外追加分?jǐn)?shù)!謝謝!的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計(jì),成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營銷讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。
網(wǎng)站名稱:深入了解Linux字符設(shè)備主設(shè)備號(hào)范圍(linux字符設(shè)備主設(shè)備號(hào)范圍)
文章網(wǎng)址:http://m.5511xx.com/article/dhoddoo.html


咨詢
建站咨詢
