/* Needed for copying to/from user space */
#include <asm/uaccess.h>
#include <linux/slab.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>");
.write = helloc_write,
};
+static int hello_len_show(struct seq_file *seq, void *data)
+{
+ struct message *msg = seq->private;
+ seq_printf(seq, "%d\n", msg->len);
+ return 0;
+}
+
+static int hello_proc_open(struct inode *ino, struct file *filp)
+{
+ return single_open(filp, hello_len_show, hello_message[0]);
+}
+
+static struct file_operations hello_proc_fops = {
+ .owner = THIS_MODULE,
+ .open = hello_proc_open,
+ .llseek = seq_lseek,
+ .read = seq_read,
+ .release = seq_release,
+};
+
+
/* the device number and the char device struct */
static dev_t dev;
static struct cdev *cdev;
static int __init helloc_init(void)
{
+ struct proc_dir_entry *hello_pde;
int r;
r = helloc_alloc();
if (r)
r = cdev_add(cdev, dev, DEVICE_NUMBER);
if (r)
goto out_add;
+ hello_pde = proc_create("hello_len", 0666, NULL, &hello_proc_fops);
+ if (!hello_pde)
+ goto out_pde;
return 0;
+out_pde:
+ cdev_del(cdev);
out_add:
/* release memory allocated to the cdev device */
kfree(cdev);
static void __exit helloc_exit(void)
{
+ remove_proc_entry("hello_len", NULL);
/* remove the chardev from the system */
cdev_del(cdev);
/* release the device number allocated */