Linux驱动开发3——devfs udev procfs sysfs debugfs傻傻地分不清楚
Linux调试文件系统
1.1、procfs
早期的Linux内核中,内核通过procfs输出调试信息,可以在用户态通过读写procfs节点与内核进行交互,用来获取处理器、内存、设备驱动、进程等各种信息。但是随着Linux的普及,Linux驱动开发者往procfs中添加了大量的设备驱动相关的节点,因此,sysfs应运而生。
mount -t proc nondev /procfs
1.2、sysfs
sysfs基于kobject实现,而kobject是Linux内核设备驱动模型的基础,因此,sysfs是天然的为Linux设备驱动而服务的,主要用来添加相应的节点从而方便设备驱动的调试。
mount -t sys nondev /sys
1.3、debugfs
debugfs,顾名思义,就是为了内核调试而生的,主要是Linux内核向用户态输出调试信息和异常信息。
mount -t debugfs nondev /debugfs
Linux设备文件系统
2.1、devfs
Linux 2.6内核之前,使用devfs文件系统管理Linux设备文件,但是所有的设备文件都必须使用mknod命令创建,无法动态创建设备文件。
2.2、sysfs+udev
Linux 2.6内核引入了sysfs文件系统,一方面是为了给procfs减负,另一方面是为了方便管理设备文件。
sysfs基于kobject实现,Linux驱动模块可以添加相应的节点进行驱动调试;除此之外, 可以通过class_create()和device_create()动态创建设备文件。这就是udev的事情,udevd是用户态的守护进程,class_create()和device_create()在sysfs中创建相应的节点并触发uevent,udevd收到uevent事件之后,通过解析sysfs节点,按照/etc/udev/udev.conf规则在/dev下创建设备文件。