当前位置: 技术问答>linux和unix
设备特殊文件是devfs么?
来源: 互联网 发布时间:2016-04-26
本文导语: 看到资料上说,可以通过文件系统对分区的硬盘进行访问, 也可以通过设备特殊文件对raw硬盘进行访问 那设备特殊文件是devfs么?具体是对raw硬盘怎么访问的? | 1.设备节点创建问题 devfs是在vfs这...
看到资料上说,可以通过文件系统对分区的硬盘进行访问,
也可以通过设备特殊文件对raw硬盘进行访问
那设备特殊文件是devfs么?具体是对raw硬盘怎么访问的?
也可以通过设备特殊文件对raw硬盘进行访问
那设备特殊文件是devfs么?具体是对raw硬盘怎么访问的?
|
1.设备节点创建问题
devfs是在vfs这条“软总线”上,devfs是内核用来在驱动模块插入的时候自动创建设备节点的一个文件系统(是
一个伪文件系统)!为内核模块自动创建设备节点提供了一种机制(但创建设备节点并不只有这唯一的方法,可以
用mknod命令手动创建,只需要你知道该设备的类型,主次设备号即可);
2.如何访问到设备的问题
对设备节点的访问,要看你的设备节点创建在什么文件系统中的!可以用stat -f /dev/xxx (xxx是具体的设备
节点)看看该设备节点所属的文件系统。以打开设备文件为例来简单解释下:
如果设备节点在ext2文件文件中(实际顺序并不一定是这样,为了解释,我简化了):
open->sys_open->... ->ext2_read_inode()...->def_chr_fops->open()/def_blk_fops->open()->设备驱动注
册的fops->open();
是如何将ext2中设备文件和具体的设备关联起来的呢?
其实,你看看ext2_read_inode()/ext2_write_inode [fs/ext2/inode.c]这连个函数就明白了;
ext2_write_inode函数将设备文件类型和文件的设备号都存入到了物理介质中;分别用ext2_inode结构中的
i_mode和i_block[0/1]表示(将设备号转化成一个整数存入到i_block[0/1]中);当用ext2_read_inode读取
的时候,也会读出inode,和i_block[0/1]的内容,然后解析它们就知道了是什么类型的设备和该设备的主次
设备号了。如果设备类型为字符设备,那么就调用def_chr_fops->open(),在def_chr_fops->open()中,进
一步获取的具体设备的fops。并调用最终的open函数。
简单总结下:
设备节点可以在任何文件系统中通过工具mknod创建;通过devfs只是创建文件系统的一种方式;设备节点不一定要
位于/dev/目录下,通常将其放在该目录下只是便于管理,你可以在文件系统的任何地方用mknod创建设备节点,应
该可以照常使用。
有点乱,凑合看!
devfs是在vfs这条“软总线”上,devfs是内核用来在驱动模块插入的时候自动创建设备节点的一个文件系统(是
一个伪文件系统)!为内核模块自动创建设备节点提供了一种机制(但创建设备节点并不只有这唯一的方法,可以
用mknod命令手动创建,只需要你知道该设备的类型,主次设备号即可);
2.如何访问到设备的问题
对设备节点的访问,要看你的设备节点创建在什么文件系统中的!可以用stat -f /dev/xxx (xxx是具体的设备
节点)看看该设备节点所属的文件系统。以打开设备文件为例来简单解释下:
如果设备节点在ext2文件文件中(实际顺序并不一定是这样,为了解释,我简化了):
open->sys_open->... ->ext2_read_inode()...->def_chr_fops->open()/def_blk_fops->open()->设备驱动注
册的fops->open();
是如何将ext2中设备文件和具体的设备关联起来的呢?
其实,你看看ext2_read_inode()/ext2_write_inode [fs/ext2/inode.c]这连个函数就明白了;
ext2_write_inode函数将设备文件类型和文件的设备号都存入到了物理介质中;分别用ext2_inode结构中的
i_mode和i_block[0/1]表示(将设备号转化成一个整数存入到i_block[0/1]中);当用ext2_read_inode读取
的时候,也会读出inode,和i_block[0/1]的内容,然后解析它们就知道了是什么类型的设备和该设备的主次
设备号了。如果设备类型为字符设备,那么就调用def_chr_fops->open(),在def_chr_fops->open()中,进
一步获取的具体设备的fops。并调用最终的open函数。
简单总结下:
设备节点可以在任何文件系统中通过工具mknod创建;通过devfs只是创建文件系统的一种方式;设备节点不一定要
位于/dev/目录下,通常将其放在该目录下只是便于管理,你可以在文件系统的任何地方用mknod创建设备节点,应
该可以照常使用。
有点乱,凑合看!