Linuxデバイスドライバ基礎② procインタフェース
procインタフェースを利用してユーザランドからカーネル(ドライバ)と通信するサンプル
procfs.c
#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/proc_fs.h> #include <linux/stat.h> MODULE_LICENSE("GPL"); #define PROC_NAME "driver/example" static int proc_open(struct inode *node, struct file *fp) { printk("open\n"); return 1; } static ssize_t proc_read(struct file *fp, char *buf, size_t size, loff_t *off) { printk("read\n"); return size; } static ssize_t proc_write(struct file *fp, const char *buf, size_t size, loff_t *off) { printk("write\n"); return size; } static struct file_operations example_proc_fops = { .owner = THIS_MODULE, .open = proc_open, .read = proc_read, .write = proc_write, }; static __init int procfs_init(void) { struct proc_dir_entry *ent; ent = proc_create(PROC_NAME, S_IRUGO | S_IWUGO | S_IXUGO, NULL, &example_proc_fops); if (ent == NULL) { return -ENOMEM; } printk("proc example loaded\n"); return 0; } static __exit void procfs_exit(void) { printk("delete dirver\n"); remove_proc_entry(PROC_NAME, NULL); } module_init(procfs_init); module_exit(procfs_exit);