完成LFS的时候有过挂载devfs文件系统经历,只知道挂载好devfs文件系统之后,/dev下面会多出很多设备文件,但并没有思考过它是怎么将设备呈现给用户空间的,也可以说并不知道devfs是如何管理设备的。
以前学习和完成linux的字符设备驱动程序时,都是使用register_chrdev、添加设备、创建设备节点来完成的,这个过程中并没有和devfs相关的东西,那devfs到底是什么东西,又是怎样来管理设备的?在网上搜索到一片帖子是讲devfs的,讲的还不错,可是转载的太多,没有找到原文链接在哪里。根据他说的我简化了下,devfs的产生的背景如下:
在没有devfs来管理设备时,linux管理设备都是通过主次设备号来管理(register_chrdev方式需要提供主次设备号),上层在访问设备文件时会根据设备文件的主次设备号来得到它的fops从而对对应的设备进行操作,这样会产生两个情况,一是在创建设备文件时需要获取一个设备号,二是设备号可能会用完。这两种情况的产生在某些应用场景下(我当然还没有碰到过)可能出现问题,为了解决这个问题,于是决定不再用主次设备号来区别设备,而是通过设备名来区别,这就是devfs的作用,如果使用了devfs,系统中将使用devfs_register_chrdev来替代register_chrdev,由于devfs完全是由内核实现的,只是挂载devfs由用户完成,内核是知道哪些设备是真实存在的(相反,使用静态创建设备文件是用户来完成的,用户无法知晓,因为还没有一种交互机制),这样就避免了/dev下面创建大量的设备文件而这些设备文件对应的设备又不是真实存在的情况,因为这些设备是实际存在的,从而基本上解决了设备号会用完的情况。
阅读(1765) | 评论(0) | 转发(0) |