function of major/minor device number
Robert P. J. Day
rpjday at crashcourse.ca
Sun Feb 12 17:20:26 EST 2012
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
========================================================================
More information about the Kernelnewbies
mailing list