摘自: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