首页 > 代码库 > mknod创建设备(加载新的设备驱动时候,通常会用到此命令)

mknod创建设备(加载新的设备驱动时候,通常会用到此命令)

mknod - make block or character special files
mknod [OPTION]... NAMETYPE [MAJOR MINOR]
option
有用的就是-m
name
自定义
type
b c 还有p
主设备号
次设备号


主设备号是由linux/major.h定义的,如下定义了一个DOC设备:
#defineIGEL_FLASH_MAJOR 62

假如有一个命令mknoddoc b 62 0
其中的doc为定义的名字,b指块设备,0指的是整个DOC。如果把0换为1,1指的是DOC的第一个分区。2是第2个,对于块设备次设备号就表示该块设备上的分区号,依次类推。

至于mknodconsole c 5 1 的意思也很相似:
console
是设备的名字
c
指字符设备
5
是该设备在major.h中定义的标记
1
是第一个子设备

mknodconsole 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的参数,并不一定为创建的设备文件名。例如建立MAKEDEVvty8” 将建立ttyv0ttyv78个设备文件,使用MAKEDEVwd1s1a” 命令,将建立wd1wd1s1wd1s2等,以及wd1s1awd1s1b等设备文件。也可以使用allMAKEDEV的参数,这将首先清除/dev目录下的所有设备文件,然后MAKEDEV创建所有预设的设备文件。一般情况下这将创建足够多的设备文件,其中的大部分设备文件在具体的系统中不会用得到。

如果对一个系统中没有(或者即使有但内核没有支持或探测到)的设备对应的设备文件进行操作,则系统返回Devicenot 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]#