#include <linux/circ_buf.h>
#include <linux/mutex.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/serio.h>
#include <linux/slab.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
#include <linux/sched.h>
#include <linux/poll.h>
#include <uapi/linux/userio.h>
#define USERIO_NAME …
#define USERIO_BUFSIZE …
static struct miscdevice userio_misc;
struct userio_device { … };
static int userio_device_write(struct serio *id, unsigned char val)
{ … }
static int userio_char_open(struct inode *inode, struct file *file)
{ … }
static int userio_char_release(struct inode *inode, struct file *file)
{ … }
static ssize_t userio_char_read(struct file *file, char __user *user_buffer,
size_t count, loff_t *ppos)
{ … }
static ssize_t userio_char_write(struct file *file, const char __user *buffer,
size_t count, loff_t *ppos)
{ … }
static __poll_t userio_char_poll(struct file *file, poll_table *wait)
{ … }
static const struct file_operations userio_fops = …;
static struct miscdevice userio_misc = …;
module_driver(…);
MODULE_ALIAS_MISCDEV(…);
MODULE_ALIAS(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;