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]#
用戶還可以在命令行使用“mknod 管道名 p”來創建有名管道