2.設備文件
當我們加載了設備驅動模塊后,應該怎樣訪問這些設備呢?Linux是一種類Unix系統,Unix的一個基本特點是“一切皆為文件”,它抽象了設備的處理,將所有的硬件設備都像普通文件一樣看待,也就是說硬件可以跟普通文件一樣來打開、關閉和讀寫。
系統中的設備都用一個設備特殊文件代表,叫做設備文件,設備文件又分為Block(塊)型設備文件、Character(字符)型設備文件和Socket(網絡插件)型設備文件。Block設備文件常常指定哪些需要以塊(如512字節)的方式寫入的設備,比如IDE硬盤、SCSI硬盤、光驅等。
而Character型設備文件常指定直接讀寫,沒有緩沖區的設備,比如并口、虛擬控制臺等。Socket(網絡插件)型設備文件指定的是網絡設備訪問的BSD socket 接口。
|
上面顯示的是三種設備文件,注意它們最前面的字符,Block型設備為b,Character型設備為c,Socket設備為s。
由此可以看出,設備文件都放在/dev目錄下,比如硬盤就是用/dev/hd*來表示,/dev/hda表示第一個IDE接口的主設備,/dev/hda1表示第一個硬盤上的第一個分區;而/dev/hdc 表示第二個IDE接口的主設備。可以使用下面命令:
|
把第一個硬盤上前446個字節的MBR信息導入到a.img文件中。
對于Block和Character型設備,使用主(Major)和輔(minor)設備編號來描述設備。主設備編號來表示某種驅動程序,同一個設備驅動程序模塊所控制的所有設備都有一個共同的主設備編號,而輔設備編號用于區分該控制器下不同的設備,比如,/dev/hda1(block 3/1)、/dev/hda2(block 3/2 )和/dev/hda3( block3/3 )都代表著同一塊硬盤的三個分區,他們的主設備號都是3,輔設備號分別為1、2、3。 這些設備特殊文件用mknod命令來創建:
|
我們就在當前位置創建出一個與 /dev/hda一樣的、可以訪問第一個IDE設備主硬盤的文件,文件名叫做harddisk。
使用下面命令可以查看設備編號:
|
其中Block代表/dev/hda是系統的Block型(塊型)設備文件,它的主設備編號為3,輔設備編號為0。
|
使用ls -l也可以看到設備編號,/dev/hdb代表第一個IDE接口的從設備(Slave)也是Block設備,編號為(3/64),還有另外一種設備文件是/dev/tty*。使用如下命令:
|
將字符串“hello tty1”輸出到/dev/tty1代表的第一個虛擬控制臺上,此時按“Alt + F1”可以看到該字符出現在屏幕上,這個特殊的文件就代表著我們的第一虛擬控制臺。
|
由上可以看到,它的類型為Character 型(字符型)設備文件,主設備號為4,輔設備號為1。同樣,/dev/tty2代表著第二個虛擬控制臺,是Character設備,編號為 (4/2)。
當將/dev/cdrom加載到/mnt/cdrom中時,只要訪問/mnt/cdrom系統就會自動引入到/dev/cdrom對應的驅動程序中,訪問實際的數據。
有關設備文件的編號可以看內核文檔/usr/src/linux-2.*/Documentation/devices.txt 文件(在Kernel的源文件解包后的Documentation目錄中),其中詳細敘述了各種設備文件編號的意義。