jinsy

设备文件系统devfs

0
阅读(11135)

在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);