以 Linux 的方式看待設備可區分爲 3 種基本設備類型字符設備、塊設備、網絡接口。 html
一個字符( char ) 設備是一種能夠看成一個字節流來存取的設備( 如同一個文件 ); 一個字符驅動負責實現這種行爲. 這樣的驅動經常至少實現 open, close, read, 和 write 系統調用. 文本控制檯( /dev/console )和串口( /dev/ttyS0 及其友 )是字符設備的例子, 由於它們很好地展示了流的抽象. 字符設備經過文件系統結點來存取, 例如 /dev/tty1 和 /dev/lp0. 在一個字符設備和一個普通文件之間惟一有關的不一樣就是, 你常常能夠在普通文件中移來移去, 可是大部分字符設備僅僅是數據通道, 你只能順序存取.然而, 存在看起來象數據區的字符設備, 你能夠在裏面移來移去. 例如, frame grabber 常常這樣, 應用程序可使用 mmap 或者 lseek 存取整個要求的圖像. linux
塊設備 ios
如同字符設備, 塊設備經過位於 /dev 目錄的文件系統結點來存取. 一個塊設備(例如一個磁盤)應該是能夠駐有一個文件系統的. 在大部分的 Unix 系統, 一個塊設備只能處理這樣的 I/O 操做, 傳送一個或多個長度常常是 512 字節( 或一個更大的 2 的冪的數 )的整塊. Linux, 相反, 允許應用程序讀寫一個塊設備象一個字符設備同樣 -- 它容許一次傳送任意數目的字節. 結果就是, 塊和字符設備的區別僅僅在內核在內部管理數據的方式上, 而且所以在內核/驅動的軟件接口上不一樣. 如同一個字符設備, 每一個塊設備都經過一個文件系統結點被存取的, 它們之間的區別對用戶是透明的. 塊驅動和字符驅動相比, 與內核的接口徹底不一樣.
網絡接口 安全
任何網絡事務都經過一個接口來進行, 就是說, 一個可以與其餘主機交換數據的設備. 一般, 一個接口是一個硬件設備, 可是它也多是一個純粹的軟件設備, 好比環回接口. 一個網絡接口負責發送和接收數據報文, 在內核網絡子系統的驅動下, 沒必要知道單個事務是如何映射到實際的被髮送的報文上的. 不少網絡鏈接( 特別那些使用 TCP 的)是面向流的, 可是網絡設備卻經常設計成處理報文的發送和接收. 一個網絡驅動對單個鏈接一無所知; 它只處理報文.
二.驅動設備設備號 網絡
瞭解這些設備的最基本要求就是對 每一個設備文件的含義瞭如指掌,下面就醫列表的形式列出常見的設備文件以及相應的含義:在Linux設備驅動中,設備號設一個很重要的概念和變量。每一個設備在 /dev目錄下都有一個對應的文件(節點)。能夠經過 cat /proc/devices 命令查看當前已經加載的設備驅動程序的主設備號。內核可以識別的全部設備都記錄在原碼樹下的 documentation/devices.txt 文件中。在 /dev 目錄下除了字符設備和塊設備節點以外還一般還會存在:fifo管道、socket、軟/硬鏈接、目錄。這些東西沒有主/次設備號。
$ ls -l /dev/rfd0 /dev/fd0
brw-r----- 9 root operator 2, 0 nov 12 13:32 /dev/fd0
crw-r----- 9 root operator 9, 0 nov 12 13:32 /dev/rfd0
能夠看到原來顯示文件大小的地方,如今改成顯示兩個用逗號分隔的數字。這是系統用來表示設備的兩個重要的序號,第一個爲主設備號(major number),用來表示設備使用的硬件驅動程序在系統中的序號;第二個爲從設備號(minor number)。
app$ ls -l /dev/rfd0 /dev/fd0 dom
brw-r----- 9 root operator 2, 0 nov 12 13:32 /dev/fd0 socket
crw-r----- 9 root operator 9, 0 nov 12 13:32 /dev/rfd0 tcp
能夠看到原來顯示文件大小的地方,如今改成顯示兩個用逗號分隔的數字。這是系統用來表示設備的兩個重要的序號,第一個爲主設備號(major number),用來表示設備使用的硬件驅動程序在系統中的序號;第二個爲從設備號(minor number)。 oop
----------------------------------------------------------------------主 設備號 設備類型次設備號=文件名 簡要說明----------------------------------------------------------------------0 未命名設備(例如:掛載的非設備)0 = 未空設備號保留1 char 內存設備1 = /dev/mem 直接存取物理內存2 = /dev/kmem 存取通過內核虛擬以後的內存3 = /dev/null 空設備。任何寫入都將被直接丟棄,任何讀取都將獲得eof。4 = /dev/port 存取 i/o 端口5 = /dev/zero 零字節源,只能讀取到無限多的零字節。7 = /dev/full 滿設備。任何寫入都將失敗,並把errno設爲enospc以表示沒有剩餘空間。8 = /dev/random 隨機數發生器。徹底由用戶的輸入來產生隨機數。 若是用戶中止全部動做,則中止產生新的隨機數。
9 = /dev/urandom 更快,可是不夠安全的隨機數發生器。儘量由用戶的輸入來產生隨機數, 若是用戶中止全部動做,則把已經產生的隨機數作爲種子來產生新的隨機數。
10 = /dev/aio 異 步 i/o 通知接口11 = /dev/kmsg 任何對該文件的寫入都將做爲 printk 的輸出1 block ram disk0 = /dev/ram0 第1個 ram disk (initrd只能使用ram0)1 = /dev/ram1 第2個 ram disk...200 = /dev/ram200 第200個 ramdisk4 char tty(終端)設備0 = /dev/tty0 當前虛擬控制檯1 = /dev/tty1 第1個虛擬控制檯...63 = /dev/tty63 第63個虛擬控制檯4 block 若是根文件系統以是以只讀方式掛載的,那麼就不可能建立真正的設備節點,此時就使用該設備做爲動態分配的主(major)設備的別名0 = /dev/root5 char 其餘 tty 設備0 = /dev/tty 當前 tty 設備1 = /dev/console 系統控制檯2 = /dev/ptmx 全部 pty master 的複用器7 char 虛擬控制檯捕捉設備(這些設備既容許讀也容許寫)0 = /dev/vcs 當前虛擬控制檯(vc)的文本內容1 = /dev/vcs1 tty1 的文本內容...63 = /dev/vcs63 tty63 的文本內容128 = /dev/vcsa 當前虛擬控制檯(vc)的文本/屬性內容129 = /dev/vcsa1 tty1 的文本/屬性內容...191 = /dev/vcsa63 tty63 的文本/屬性內容代碼: 7 block 迴環設備(用一個普通的磁盤文件來模擬一個塊設備)對迴環設備的綁定由 mount(8) 或 losetup(8) 處理0 = /dev/loop0 第1個迴環設備1 = /dev/loop1 第2個迴環設備...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 磁盤(整個磁盤)分區表示方法以下(以第3個 scsi 磁盤爲例)33 = /dev/sdc1 第1個分區34 = /dev/sdc2 第2個分區...47 = /dev/sdc15 第15個分區 對於linux/i386來講,分區1-4是主分區,5-15是邏輯分區。
9 block metadisk(raid)設備0 = /dev/md0 第1組 metadisk1 = /dev/md1 第2組 metadisk...metadisk 驅動用於將同一個文件系統分割到多個物理磁盤上。10 char 非串口鼠標,各類雜項設備和特性1 = /dev/psaux ps/2鼠標131 = /dev/temperature 機器內部溫度134 = /dev/apm_bios apm(高級電源管理) bios135 = /dev/rtc 實時時鐘(realtime clock)144 = /dev/nvram 非易失配置 ram162 = /dev/smbus 系統管理總線(system management bus)164 = /dev/ipmo intel的智能平臺管理(intelligent platform management)接口173 = /dev/ipmikcs 智能平臺管理(intelligent platformmanagement)接口175 = /dev/agpgart agp圖形地址重映射表(graphics addressremapping table)182 = /dev/perfctr 性能監視計數器183 = /dev/hwrng 通用硬件隨機數發生器184 = /dev/cpu/microcodecpu微代碼更新接口186 = /dev/atomicps 進程狀態數據的原子快照188 = /dev/smbusbios smbus(系統管理總線) bios200 = /dev/net/tun tap/tun 網絡設備(tap/tun以軟件的方式實現了網絡設備)tap模擬了以太網幀(第二層),tun模擬了ip包(第三層)。202 = /dev/emd/ctl 加強型 metadisk raid (emd) 控制器220 = /dev/mptctl message passing technology (mpt) control223 = /dev/input/uinput 用戶層輸入設備驅動支持227 = /dev/mcelog x86_64 machine check exception driver228 = /dev/hpet hpet driver229 = /dev/fuse fuse(用戶空間的虛擬文件系統)231 = /dev/snapshot 系統內存快照232 = /dev/kvm 基於內核的虛構機(基於amd svm和intel vt硬件虛擬技術)11 block scsi cd-rom 設備0 = /dev/scd0 第1個 scsi cd-rom1 = /dev/scd1 第2個 scsi cd-rom...13 char 核心輸入設備32 = /dev/input/mouse0 第1個鼠標33 = /dev/input/mouse1 第2個鼠標...62 = /dev/input/mouse30 第31個鼠標63 = /dev/input/mice 全部鼠標的統一64 = /dev/input/event0 第1個事件隊列65 = /dev/input/event1 第2個事件隊列...95 = /dev/input/event1 第32個事件隊列21 char 通用 scsi 設備(一般是scsi光驅)0 = /dev/sg0 第1個通用 scsi 設備1 = /dev/sg1 第2個通用 scsi 設備...29 char 通用幀緩衝(frame buffer)設備0 = /dev/fb0 第1個幀緩衝設備1 = /dev/fb1 第2個幀緩衝設備...31 = /dev/fb31 第32個幀緩衝設備30 char ibcs-2 兼容設備0 = /dev/socksys 套接字訪問接口1 = /dev/spx svr3 本地 x 接口32 = /dev/inet/ip 網絡訪問接口33 = /dev/inet/icmp34 = /dev/inet/ggp35 = /dev/inet/ipip36 = /dev/inet/tcp37 = /dev/inet/egp38 = /dev/inet/pup39 = /dev/inet/udp40 = /dev/inet/idp41 = /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 路由, 設備更新, kernel to user3 =/dev/fwmonitor firewall packet 複製59 char sf 防火牆模塊0 = /dev/firewall 與 sf 內核模塊通訊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 磁盤(整個磁盤)89 char i2c 總線接口0 = /dev/i2c-0 第1個i2c 適配器1 = /dev/i2c-1 第2個i2c 適配器...98 block 用戶模式下的虛擬塊設備(分區處理方式與 scsi 磁盤相同)0 = /dev/ubda 第1個用戶模式塊設備16 = /dev/udbb 第2個用戶模式塊設備...103 block 審計(audit)設備0 = /dev/audit 審計(audit)設備128-135 char unix98 pty master這些設備不該當存在設備節點,而應當經過 /dev/ptmx 接口訪問。136-143 char unix98 pty slave這些設備節點是自動生成的(伴有適當的權限和模式),不能手動建立。方法是經過使用適當的 mount 選項(一般是:mode=0620,gid=)將 devpts 文件系統掛載到 /dev/pts 目錄便可。0 = /dev/pts/0 第1個unix98 pty slave1 = /dev/pts/1 第2個unix98 pty slave...代碼:153 block enhancedmetadisk raid (emd) 存儲單元(分區處理方式與 scsi 磁盤相同)0 = /dev/emd/0 第1個存儲單元1 = /dev/emd/0p1 第1個存儲單元的第1個分區2 = /dev/emd/0p2 第1個存儲單元的第2個分區...15 = /dev/emd/0p15 第1個存儲單元的第15個分區16 = /dev/emd/1 第2個存儲單元32 = /dev/emd/2 第3個存儲單元...240 = /dev/emd/15 第16個存儲單元180 char usb 字符設備96 = /dev/usb/hiddev0 第1個usb人機界面設備(鼠標/鍵盤/遊戲杆/手寫版等人操做計算機的設備)...111 = /dev/usb/hiddev15 第16個usb人機界面設備180 block usb 塊設備(u盤之類)0 = /dev/uba 第1個usb 塊設備8 = /dev/ubb 第2個usb 塊設備16 = /dev/ubc 第3個usb 塊設備...192 char 內核 profiling 接口0 = /dev/profile profiling 控制設備1 = /dev/profile0 cpu 0 的 profiling 設備2 = /dev/profile1 cpu 1 的 profiling 設備...193 char 內核事件跟蹤接口0 = /dev/trace 跟蹤控制設備1 = /dev/trace0 cpu 0 的跟蹤設備2 = /dev/trace1 cpu 1 的跟蹤設備...195 char nvidia 圖形設備(好比顯卡)0 = /dev/nvidia0 第1個 nvidia 卡1 = /dev/nvidia1 第2個 nvidia 卡...255 = /dev/nvidiactl nvidia 卡控制設備202 char 特定於cpu模式的寄存器(model-specific register,msr)0 =/dev/cpu/0/msr cpu 0 的 msrs1 =/dev/cpu/1/msr cpu 1 的 msrs...203 char cpu cpuid 信息0 =/dev/cpu/0/cpuid cpu 0 的 cpuid1 =/dev/cpu/1/cpuid cpu 1 的 cpuid