mknod

mknod 命令建立一个目录项和一个特殊文件的对应索引节点。第一个参数是 Name 项设备的名称。选择一个描述性的设备名称。mknod 命令有两种形式,它们有不同的标志。

用途:用来创建特殊文件;

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]#

RePrint:http://blog.csdn.net/liangkaiming/archive/2011/03/09/6234675.aspx



mknod [options] name {bc} major minor 
mknod [options] name p 
GNU 选项(缩写): 
[-m mode] [--help] [--version] [--] 
描述 
mknod 用指定名称产生一个FIFO(命名管道),字符专用或块专用文件。 
文件系统中的一个专用文件存贮着三种信息(布尔型、整型、整型)。布尔型在字符文件和块文件之间作出选择,两个整型是主、次设备号。

通常,一个专用文件并不在磁盘上占用空间,仅仅是为操作系统提供交流,而不是为数据存贮服务。一般地,专用文件会指向一个硬件设备(如:磁盘、磁带、打印机、虚拟控制台)或操作系统提供的服务(如:/dev/null, /dev/random)。

块文件通常类似于磁盘设备(在数据能够被访问的地方赋予一个块号,意味着同时设定了一个块缓存)。任何其他设备都是字符文件。(以前,两种文档类型间是有差别的。比如:字符文档I/O没有缓存,而块文档则有。)

mknod命令就是用来产生这种类型文件的。

以下参数指定了所产生文件的类型:

b create a block (buffered) special file
c, u create a character (unbuffered) special file
p create a FIFO

GNU版本还允许使用u('unbufferd'非缓冲化),以保持和C语言的一致。

当创建一个块文件或字符文件时,主、次设备号必须在文件类型参数后给出。但当指定一个p(FIFO)类型时,主次设备号必须省略。(设备号默认是以十进制表示;八进制以0开头;GNU 版本还允许使用以0x开头的十六进制)

选项 
-m mode, --mode=mode 
为新建立的文档设定模式,就象应用命令chmod相同,以后仍然使用缺省模式建立新目录。 缺省地,所产生的文档模式为0666('a+rw') 

GNU 标准选项 
--help 
在标准输出上显示使用信息并顺利退出。 
--version 
在标准输出上显示版本信息并顺利退出

主、次设备号可在内核源代码的./Documentation/devices.txt里查到,mknod 可为这些指定的设备创建节点,当然节点的位置不是一定要在/dev下,但是为了便于管理一般都是指定/dev。驱动程序是根据主、次设备号定位的,但是你的应用程序open一个设备时,一定要是你指定的节点位置。例如:

mknod /dev/input/mouse0 c 13 32
也可以
mknod /tmp/mymouse c 13 32


/**********************************************************************************************************************/

下面是某个网友利用mknod成功解决找不到swap分区的问题。

开了一个大程序,用free看看内存是用,却显示如下 
linuxman:~ # free 
total used free shared buffers cached
Mem: 248380 243800 4580 0 2928 53344
-/+ buffers/cache: 187528 60852
Swap: 0 0 0
怪了,swap怎么是零? 用#swapon -a,却说是没有这个文件/dev/hda7!
关于swap,我的fatab文件中有一行是这样的: 
/dev/hda7 swap swap pri=42 0 0 
于是:#ls /dev/hda*,果然没有hda7这个block设备!那就创建一个!
我就用#mknod /dev/hda7 b 3 7,再chmod 和 chgrp 一下就可以了!
这样#ls /dev/hda7就显示这样了:
brw-rw---- 1 root disk 3, 7 2005-04-12 07:00 /dev/hda7
然后再#swapon -a就可以了;#free显示
total used free shared buffers cached
Mem: 248380 242368 6012 0 5596 55304
-/+ buffers/cache: 181468 66912
Swap: 334616 0 334616


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值