常用函数
19 extern struct proc_dir_entry *proc_mkdir(const char *, struct proc_dir_entry *);
20 extern struct proc_dir_entry *proc_mkdir_data(const char *, umode_t,
21 struct proc_dir_entry *, void *);
30 static inline struct proc_dir_entry *proc_create(
31 const char *name, umode_t mode, struct proc_dir_entry *parent,
32 const struct file_operations *proc_fops)
33 {
34 return proc_create_data(name, mode, parent, proc_fops, NULL);
35 }
海思代码举例
826 #define FHDRV_CREATE_PROC_ENTRY(NAME, FUNC) \
827 proc_create(NAME, 0, NULL, &FUNC);
733 static int fhdrv_kdrv_bootflag_proc_show(struct seq_file *seq, void *v)
734 {
...//业务逻辑代码
}
//实现接口
767 static int fhdrv_kdrv_bootflag_proc_open(struct inode *inode, struct file *file)
768 {
769 return single_open(file, fhdrv_kdrv_bootflag_proc_show, NULL);
770 }
//填写file_operation结构体
810 static const struct file_operations fhdrv_kdrv_bootflag_proc_func = {
811 .owner = THIS_MODULE,
812 .open = fhdrv_kdrv_bootflag_proc_open,
813 .read = seq_read,
814 .llseek = seq_lseek,
815 .release = single_release,
816 };
858 int add_mtd_partitions(struct mtd_info *master,
859 const struct mtd_partition *parts,
860 int nbparts)
861 {
//创建proc目录
891 p = proc_mkdir("driver/fhdrv_kdrv", NULL);
892 if (!p) {
893 printk(KERN_ERR "Failed to create <%s> !\n", "driver/fhdrv_kdrv");
894 return 0;
895 }
896 res = FHDRV_CREATE_PROC_ENTRY("driver/fhdrv_kdrv/bootflag",fhdrv_kdrv_bootflag_proc_func);
897 if ( NULL == res ) {
898 printk(KERN_ERR "Failed to create /proc/driver/fhdrv_kdrv/bootflag.\n");
899 goto fail_flag;
900 }
}