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