在分析网卡驱动时经常会碰到proc文件系统的创建,熟悉proc文件系统的一些函数的含义对理解代码是很有必要的,现在做一个记录,备以后查看
Proc 路径快捷变量
proc_dir_entry 在文件系统中的位置
proc_root_fs /proc
proc_net /proc/net
proc_bus /proc/bus
proc_root_driver /proc/driver
1、 create_proc_entry 创建proc 文件
struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,struct proc_dir_entry *parent);
name: 要创建的文件名称;
mode: 该文件的保护掩码;
parent: 确定文件所在目录,如果置NULL ,则位置为/proc 下。
2、 proc_mkdir 创建目录
/* 该函数在父目录parent 下创建一个目录name* */
struct proc_dir_entry * proc_mkdir (const char *name,struct proc_dir_entry *parent);
@name : 要创建的目录名
@parent : 这个目录的父目录
3、 remove_proc_entry 删除文件或目录
/* 这个函数从proc 文件系统中删除一个文件或目录。
* 注意:1 。是通过参数name ,而不是通过创建时返回的指针来删除的。
* 2 。该函数不会递归删除目录下的文件。
* 3 。data 变量保存了分配的内存,要先释放对应内存,再删除该文件。
* */
void remove_proc_entry (const char *name,struct proc_dir_entry *parent);
@name : 要删除的文件或目录名
@parent : 所在的父目录
5、 create_proc_read_entry 创建只读proc 文件
struct proc_dir_entry * create_proc_read_entry (const char
*name,mode_t mode,struct proc_dir_entry *parent,read_proc_t*
read_proc,void *data);
@name : 要创建的文件名
@mode : 要创建的文件的属性 默认0755
@parent : 这个文件的父目录
@read_proc : 当用户读这个文件时,内核调用的函数
@data : 传给read_proc 的参数
6、 Read_func 读函数
int read_func (char *buffer,char **stat,off_t off,int count,int *peof,void *data);
@buffer : 把要返回给用户的信息写在buffer 里,最大不超过PAGE_SIZE (一般4K )
@stat : 一般不使用
@off :buffer 的偏移量
@count : 用户要取的字节数
@peof : 读到文件尾时,把peof 指向的位置置1
@data : 被多个proc 文件定义为读时,通过data 传递参数
注意:返回值必须是sprintf 返回的长度值,如果返回0 在读取的时候会读不到结果。
7 、写函数write_func
/* 该函数最多从buffer 中读取count 个字节的数据。
* 注意:buffer 地址在用户空间,需要先用copy_from_user() 把这些数据拷贝到内核中。* */
int write_func (struct file *file,const char *buffer,unsigned long count,void *data);
@file : 该proc 文件对应的file 结构,一般忽略。
@buffer : 待写的数据所在的位置
@count : 待写数据的大小
@data : 同read_func
注意:返回值应该是实际写入的字符串长度