proc节点技巧

来源:互联网 发布:我帅不帅 知乎 编辑:程序博客网 时间:2024/06/01 08:35
#include <linux/module.h>#include <linux/kernel.h>#include <linux/slab.h>#include <linux/types.h>#include <linux/proc_fs.h>#include <linux/pnp.h>#include <linux/seq_file.h>#include <linux/init.h>#include <asm/uaccess.h>static struct proc_dir_entry *proc_pnp = NULL;#define MAX_PORT 11static int proc_open(struct inode *inode, struct file *file){printk("proc_open\n");return 0;}static const struct file_operations proc_fops = {.owner= THIS_MODULE,.open= proc_open,.read = seq_read,};static int proc_entry_read(char *buf, char **start, off_t offset,                           int len, int *unused_i, void *unused_v){static const char port_name[]="123456789ABCDEFGH";return snprintf(buf,strlen(port_name)+1,"%s\n",port_name);}static intproc_entry_write(struct file *file, const char __user * buffer,   unsigned long count, void *data){char line[20];//unsigned int val;int ret;ret = copy_from_user(line, buffer, count);if (ret)return -EFAULT;//val = simple_strtoul(line, NULL, 0);printk("proc_entry_write user write %s\n",line);return count;}static int __init s3c_proc_init(void){struct proc_dir_entry *proc_test;printk("s3c_proc_init\n");proc_pnp = proc_mkdir("bus/s3c_proc", NULL);if (!proc_pnp)return -EIO;proc_create("devices", 0666, proc_pnp, &proc_fops);proc_test = create_proc_entry("test",0666,proc_pnp);if (proc_test) {proc_test->read_proc = proc_entry_read;proc_test->write_proc=proc_entry_write;proc_test->data= NULL;}return 0;}static void __exit s3c_proc_exit(void){printk("s3c_proc_exit\n");if (!proc_pnp)return;remove_proc_entry("test", proc_pnp);remove_proc_entry("devices", proc_pnp);remove_proc_entry("bus/s3c_proc", NULL);}module_init(s3c_proc_init);module_exit(s3c_proc_exit);MODULE_LICENSE("GPL");

0 0