Linux设备文件是linux开发者与设备的桥梁,linux开发者通过设备文件才能操作到具体的设备。linux管理设备有几种方法,在linux2.3的某个版本之前都还是采用的静态创建设备文件的方法来创建设备文件的,这种方法已经被后来的devfs和udev所替代。
在静态创建设备文件的方法当中,linux内核在初始化的时候会通过register_chrdev来创建所有可能的字符设备,但并不会创建设备文件,只是把主次设备号和设备操作关联起来了,这时主次设备号与设备名的对应关系是固定的,这种对应关系由LANANA(Linux Assigned Names And Numbers thority)来确定,也可以在内核文件Documentation/devices.txt当中得到。
在内核启动之后进入,linux需要执行脚本能MAKEDEV根据LANANA来创建所有可能的设备文件,这样linux应用开发者就可以通过设备文件来关联主次设备号从而操作到具体的设备文件。
脚本MAKEDEV的部分内容如下:
-
for arg; do
-
case $arg in
-
generic|generic-nopty)
-
$0 $opts std
-
$0 $opts fd
-
if [ $arg = "generic" ]; then $0 $opts pty; fi;
-
if [ $arg = "generic-nopty" ]; then $0 $opts ptmx; fi;
-
$0 $opts console
-
$0 $opts ttyS0 ttyS1 ttyS2 ttyS3
-
$0 $opts lp
-
$0 $opts parport
-
$0 $opts busmice
-
$0 $opts fb
-
$0 $opts ram
-
$0 $opts loop
-
$0 $opts fd0 fd1
-
$0 $opts hda hdb hdc hdd hde hdf hdg hdh
-
$0 $opts sda sdb sdc sdd
-
$0 $opts sg0 sg1 sg2 sg3
-
$0 $opts scd0 scd1 scd2 scd3
-
$0 $opts audio
-
$0 $opts rtc
-
$0 $opts ppp
-
;;
-
std)
-
makedev mem c 1 1 $kmem
-
makedev kmem c 1 2 $kmem
-
makedev null c 1 3 $public
-
makedev port c 1 4 $kmem
-
makedev zero c 1 5 $public
-
symlink core $procfs/kcore
-
makedev full c 1 7 $public
-
makedev random c 1 8 $readable
-
makedev urandom c 1 9 $readable
-
makedev aio c 1 10 $readable
-
makedev tty c 5 0 $tty
-
;;
-
...........
可以看出MAKEDEV脚本在递归的调用自己,从而创建所有linux可能的设备文件。
阅读(1708) | 评论(0) | 转发(0) |