On Sun, 12 Feb 2012, hz hanks wrote:

> Hi,  rday
>
> Thank you for your help. Yes! You did point out my question. I will do
> read drivers/char/misc.c for a better understanding.

  as part of my kernel programming course, i show how to allocate and
register a simple char misc device:

===== start =====

#include <linux/module.h>
#include <linux/miscdevice.h>
#include <linux/fs.h>
#include <linux/uaccess.h>

static ssize_t read(struct file *file, char __user *user,
                    size_t size, loff_t *o)
{
        return 0;
}

static ssize_t write(struct file *file, const char __user *in,
                     size_t size, loff_t *off)
{
        return 0;
}

static struct file_operations mymisc_fops = {
        .owner   = THIS_MODULE,
        .write   = write,
        .read    = read,
};

static struct miscdevice mymisc_dev = {
        .minor  = MISC_DYNAMIC_MINOR,
        .name   = "mymisc",
        .fops   = &mymisc_fops,
};

int __init mymisc_device_init(void)
{
        return misc_register(&mymisc_dev);
}

void __exit mymisc_device_remove(void)
{
        misc_deregister(&mymisc_dev);
}

module_init(mymisc_device_init);
module_exit(mymisc_device_remove);

MODULE_LICENSE("Dual BSD/GPL");

===== end =====

  when you register a misc device, it will automatically be given a
major number of 10 and any available minor number.  you can check
afterwards the contents of /proc/misc in userspace what minor number
you got.

  i leave as an exercise for the reader to examine the kernel source
file drivers/char/misc.c to see how numerous independent drivers can
all share the single driver at major number 10.  and also to fill in
the read and write routines.

rday

-- 

========================================================================
Robert P. J. Day                                 Ottawa, Ontario, CANADA
                        http://crashcourse.ca

Twitter:                                       http://twitter.com/rpjday
LinkedIn:                               http://ca.linkedin.com/in/rpjday
========================================================================

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to