_______________________________________
From: [email protected]
[[email protected]] On Behalf Of Sankar P
[[email protected]]
Sent: Tuesday, February 08, 2011 4:26 PM
To: [email protected]
Subject: Doubt regarding Minor Numbers and alloc_chrdev_region
Hi,
I am going through LDD3 (scull0 section) and have a doubt regarding
minor numbers. I have the following code-snippet:
============================================
>#define FIRST_MINOR_NUMBER 0
>#define COUNT_OF_CONTIGOUS_DEVICES 1
>/* Device that we will use */
>dev_t helloworld_device;
>/* Initialization Function for the kernel module */
>static int helloworld_driver_init(void)
>{
> printk(KERN_INFO "Hello World");
> /* Allocate a dynamic device number for your driver. If you want to
> hardcode a fixed major number for your
> * driver, you should use different APIs 'register_chrdev_region',
> 'MKDEV'. But the following is better. */
> if (!alloc_chrdev_region(&helloworld_device, FIRST_MINOR_NUMBER,
> COUNT_OF_CONTIGOUS_DEVICES, "HelloWorldDriver")) {
> printk(KERN_INFO "Device Number successfully allocated.");
/* If you do a cat /proc/devices you should be able to find our
Driver registered. */
> } else
> printk(KERN_ALERT "HelloWorldDriver could not get a Device
> number");
return 0;
}
======================================
>Now if I compile and insert the .ko file for this module, the driver
>gets registered with a major number of 250 (seen from /proc/devices).
>However, I don't understand the significance of the FIRST_MINOR_NUMBER
>and the COUNT_OF_CONTIGOUS_DEVICES that we pass to the
>alloc_chrdev_region function.
>If I try to create a file using, 'mknod /dev/scull2 c 250 7' , the
>character device file gets created with a minor number of 7.
>I have set COUNT_OF_CONTIGOUS_DEVICES to 1. However, I am able to create
>multiple files /dev/scull[1-10] using this driver and mknod.
>So, what is the significance of these two variables (first minor number
>and count of devices) that we pass to the alloc_chrdev_region api, if
>they can be over-ridden on mknod time ? Or have I misunderstood
>something ?
>Any help will be appreciated. Thanks.
As far as i know ,
alloc_chardev_region () helps you register your character driver with the
kernel using particular major number and minor number .. Thats pretty much of
it.
It's your responsibility to create a matching char device file in the user
space .
When you perform any read / write operations on such a file then kernel first
identifies ..Do I have any registrations of such a driver with __these__ major
number and minor number.
and correspondingly the read / write routines of your driver gets called.
In your case the any IO operations done on scull2 will not be mapped to any
character driver in the kernel ..
You can try doing : cat /dev/scull2
Regards,
Smital Desai
--
Sankar P
http://psankar.blogspot.com
_______________________________________________
Kernelnewbies mailing list
[email protected]
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
______________________________________________________________________
The contents of this e-mail and any attachment(s) may contain confidential or
privileged information for the intended recipient(s). Unintended recipients are
prohibited from taking action on the basis of information in this e-mail and
using or disseminating the information, and must notify the sender and delete
it from their system. L&T Infotech will not accept responsibility or liability
for the accuracy or completeness of, or the presence of any virus or disabling
code in this e-mail"
______________________________________________________________________
_______________________________________________
Kernelnewbies mailing list
[email protected]
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies