摘自:http://blog.chinaunix.net/uid-22028680-id-2421497.html
依照unix的传统,在Linux系统中任何对象(包括设备 )都可以视为文件,在Linux系统中所有的设备文件都放在dev目录下面,建立设备文件通常有两种方法,一个是直接把宿主机上面的拷贝过来(拷贝的时候需要加上dpR参数),另外一种方法就是自己手工用mknod创建(注意这两种方法都需要root权限)。
一般情况下我们都是使用第一种方法,但是这里面为了便于大家更深入的理解设备文件,我使用第二种方法来创建。首先来看如何使用mknod命令来创建特定的设备文件。
#cd dev
#mknod -m 666 null c 1 3
上面这条命令创建了null设备,-m 参数指定所创建设备的基本权限,null是设备名称,c代表是字符设备,相应的块设备用b表示,1是主编号,3是次编号。
关于设备的主次编号的权威信息的来源可以查看内核源码树中的
Documentation/devices.txt
我们这里需要建立的dev条目如表格所示。
文件名 |
说明 |
类型 |
主编号 |
次编号 |
权限位 |
mem |
物理内存存取 |
字符设备 |
1 |
1 |
600 |
console |
系统控制台 |
字符设备 |
5 |
1 |
600 |
urandom |
真随机数产生器 |
字符设备 |
1 |
8 |
644 |
null |
null(黑洞)设备 |
字符设备 |
1 |
3 |
666 |
zero |
以null byte(零值字节)为数据来源 |
字符设备 |
1 |
5 |
666 |
tty |
现行的tty设备 |
字符设备 |
5 |
0 |
666 |
tty0 |
现行的虚拟控制台 |
字符设备 |
4 |
0 |
600 |
tty1 |
第一个虚拟控制台 |
字符设备 |
4 |
1 |
600 |
ptyp0 |
first pseudo-tty master |
字符设备 |
2 |
0 |
666 |
ttyp0 |
first BSD pseudo-tty slave |
字符设备 |
3 |
0 |
666 |
ram0 |
第一块 ram盘 |
块设备 |
1 |
0 |
640 |
hda |
主IDE硬盘(或者光盘) |
块设备 |
3 |
0 |
660 |
hda1 |
上述主盘的第一个分区 |
块设备 |
3 |
1 |
660 |
hdb |
从IDE硬盘(或者光盘) |
块设备 |
3 |
64 |
660 |
hdb1 |
上述从盘的第一个分区 |
块设备 |
3 |
65 |
660 |
sda |
第一块scsi盘的整个盘 |
块设备 |
8 |
0 |
660 |
sda1 |
第一块scsi盘的第一个分区 |
块设备 |
8 |
1 |
660 |
sdb |
第二块scsi盘的整个盘 |
块设备 |
8 |
16 |
660 |
sdb1 |
第二块scsi盘的第一个分区 |
块设备 |
8 |
16 |
660 |
fd0 |
第一个软盘设备 |
块设备 |
2 |
0 |
660 |
下面我们写一个sh脚本mkdev.sh来创建这些设备,脚本内容如下:
#!/bin/sh
rm -rf mem console urandom null zero tty* ptyp* ram* hda* hdb* \
sda* sdb* fd* hdc cdrom
mknod -m 600 mem c 1 1
mknod -m 600 console c 5 1
mknod -m 644 urandom c 1 8
mknod -m 666 null c 1 3
mknod -m 666 zero c 1 5
mknod -m 666 tty c 5 0
for i in 0 1 2 3 4
do
mknod -m 600 tty$i c 4 $i
mknod -m 660 ttyp$i c 3 $i
done
for i in 0 1 2 3 4
do
mknod -m 660 ptyp$i c 2 $i
done
mknod -m 640 ram0 b 1 0
mknod -m 640 ram1 b 1 1
mknod -m 660 hda b 3 0
mknod -m 660 hdb b 3 64
mknod -m 660 hdc b 22 0
ln -s hdc cdrom
for i in 1 2 3 4 5 6 7 8 9 10
do
mknod -m 660 hda$i b 3 $i
mknod -m 660 hdbd$i b 3 `expr 64 + $i`
done
mknod -m 660 sda b 8 0
mknod -m 660 sdb b 8 16
for i in 1 2 3 4 5
do
mknod -m 660 sda$i b 8 $i
mknod -m 660 sdb$i b 8 `expr 16 + $i`
done
mknod -m 640 fd0 b 2 0
#end
#./mkdev.sh