Operations that you can perform on files depend on the drivers that manage those files. Such operations are defined in the kernel as instances of struct file_operations. struct file_operations exposes a set of callbacks that will handle any user space system call on a file. For example, if you wants users to be able to perform a write on the file representing our device, you must implement the callback corresponding to that write function and add it into the struct file_operations that will be tied to your device. Let's fill in a file operations structure:
struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); unsigned int (*poll) (struct...