设备文件系统devfs
0赞在linux2.4内核中引入了devfs,即/dev,有点类似/proc,它是一种虚拟文件系统。只是在需要时才动态地生成需要的设备文件,不像以前不管用不用必须先建好一大堆设备文件。
在linux2.6内核中用udev取代了devfs
devfs的相关函数在linux/devfs_fs_kernel.h 中声明:
devfs_handle_t //devfs的数据结构
devfs_register //注册设备
devfs_mk_dir //创建设备目录
devfs_unregister //注销设备
devfs_mk_dir 参数:
1:dir,值为NULL
2:目录名, ”dir name”
3:info指针,值为NULL
devfs_register 参数:
1:创建的设备目录dir
2:设备名device_name
3:flag,值为这个宏DEVFS_FS_DEFAULT
4:主设备号major
5:minor(不知什么意思),值为0
6:mode,S_IFCHR | S_IRUSR | S_IWUSR
7:fops结构体指针,
8:info指针,值为NULL
用法:
在内核中声明了CONFIG_DEVFS_FS
#ifdef CONFIG_DEVFS_FS
devfs_handle_t devfs_gpf_dir;
devfs_handle_t devfs_gpf_raw;
#endif
这个写在初始化函数中,register_chrdev之后
#ifdef CONFIG_DEVFS_FS
devfs_gpf_dir = devfs_mk_dir(NULL, "gpf", NULL);
devfs_gpf_raw = devfs_register(devfs_gpf_dir, "key", DEVFS_FL_DEFAULT, gpf_Major, 0, S_IFCHR | S_IRUSR | S_IWUSR, &s3c2410_fops, NULL);
#endif
分析:devfs_gpf_dir保存创建的设备目录 ”gpf”,devfs_register第一个参数是devfs_gpf_dir,第二个参数设备名 ”key”,第四个参数是主设备号,第七个参数是file_operations的结构体。
这样就会在/dev下建立一个/gpf/key的设备文件,并通过主设备号指向刚注册的字符设备,相当于手动创建 mknod 文件路径c 主设备号 从设备号
在卸载驱动时,在exit函数中调用:
devfs_unregister(devfs_gpf_raw);
devfs_unregister(devfs_gpf_dir);