mknod - make block or character special files
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
option 有用的就是-m 了
name 自定義
type 有b 和c 還有p
主設備號
次設備號
主設備號是由linux/major.h定義的,如下定義了一個DOC設備:
#define IGEL_FLASH_MAJOR 62
假如有一個命令mknod doc b 62 0 :
其中的doc為定義的名字,b指塊設備,0指的是整個DOC。如果把0換為1,則1指的是DOC的第一個分區。2是第2個,對於塊設備次設備號就表示該塊設備上的分區號,依次類推。
至於mknod console c 5 1 的意思也很相似:
console是設備的名字
c指字符設備
5是該設備在major.h中定義的標記
1是第一個子設備
mknod console c 5 1
console為設備文件名,自己隨便取
c是指字符型設備(可選b,塊設備)
5是主設備號/dev/devices里面記錄現有的設備
找個沒有用的就可以了
1是次設備號,當你要給兩個同樣的設備上一個驅動的時候就要分了,從0開始,1就是第二個了,對於字符設備,次設備號就表示同類型設備的不同設備。
通常情況下,安裝系統時已經創建了常用的設備文件,可以直接訪問這些設備文件來訪問設備。但在用戶重新定制內核,並添加了新硬件驅動程序之后,新驅動程序對應的設備文件就可能不存在。在FreeBSD中,最常見的例子就是在內核中增加聲卡的驅動程序時,就需要創建相應設備文件。
創建設備文件的基本方式是使用mknod,但是必須知道該設備的正確設備號才可以。另一種簡單的方式是使用/dev目錄下的shell程序MAKEDEV來完成,MAKEDEV實質上就是記錄了很多設備的名字與其設備號之間的關系的程序,因此它能使用正確的設備號來創建設備。首先進入/dev目錄,然后再執行MAKEDEV。
# cd /dev
# sh MAKEDEV snd0
MAKEDEV將使用設備名作參數創建設備文件,同時也創建這個設備文件依賴的其他相關設備文件。MAKEDEV的參數,並不一定為創建的設備文件名。例如建立 “MAKEDEV vty8” 將建立ttyv0到ttyv7共8個設備文件,使用 “MAKEDEV wd1s1a” 命令,將建立wd1、wd1s1、wd1s2等,以及wd1s1a、wd1s1b等設備文件。也可以使用all做MAKEDEV的參數,這將首先清除/dev目錄下的所有設備文件,然后MAKEDEV創建所有預設的設備文件。一般情況下這將創建足夠多的設備文件,其中的大部分設備文件在具體的系統中不會用得到。
如果對一個系統中沒有(或者即使有但內核沒有支持或探測到)的設備對應的設備文件進行操作,則系統返回Device not configured的錯誤信息。
MAKEDEV將使用mknod和對應設備的正確參數,包括字符或塊設備、主設備號和從設備號來建立相應的設備文件。管理員也可以直接使用mknod創建設備文件,但這就必須將這些設備參數統統指定正確才行。因此除非對系統中的硬件驅動程序特別熟悉,一般不直接使用mknod來創建設備文件。
[root@can]# ll /dev/hd
hda hda1 hda2 hda3 hda4 hda5 hdc
[root@can]# ll /dev/hda
brw-r----- 1 root disk 3, 0 2008-12-18 /dev/hda
[root@can]# ll /dev/hda4
brw-r----- 1 root disk 3, 4 2008-12-18 /dev/hda4
[root@can]#