#include <linux/module.h> #include <linux/init.h> #include <linux/proc_fs.h> #include <linux/seq_file.h> MODULE_LICENSE("Dual BSD/GPL"); #define PROCNAME "sample" #define CMD "hello world" static int sample_proc_show(struct seq_file *m, void *v) { seq_printf(m, "%s\n", CMD); return 0; } static int sample_proc_open(struct inode *inode, struct file *file) { return single_open(file, sample_proc_show, NULL); } static const struct file_operations sample_proc_fops = { .open = sample_proc_open, .read = seq_read, .llseek = seq_lseek, .release = single_release, }; static int sample_init(void) { #if 1 struct proc_dir_entry *entry; entry = create_proc_entry(PROCNAME, S_IRUGO | S_IWUGO, NULL); if (entry) entry->proc_fops = &sample_proc_fops; #else proc_create(PROCNAME, 0, NULL, &sample_proc_fops); #endif printk(KERN_INFO "driver loaded\n"); return 0; } static void sample_exit(void) { remove_proc_entry(PROCNAME, NULL); printk(KERN_INFO "driver unloaded\n"); } module_init(sample_init); module_exit(sample_exit);
2018年2月13日 星期二
Linux kernel - 建立/sys文件系统訪問kernel - single_open
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言