I am writing a module for the linux kernel and I want to create some device nodes in the init function
int init_module(void) { Major = register_chrdev(0, DEVICE_NAME, &fops); // Now I want to create device nodes with the returned major number }
I also want the kernel to assign a minor number for my first node, and then I will assign the other nodes' minor numbers by myself.
How can I do this in the code. I dont want to create devices from the shell using mknod
Create device class for your devices with class_create() . For each device, call cdev_init() and cdev_add() to add the character device to the system. For each device, call device_create() . As a result, among other things, Udev will create device nodes for your devices.
Device nodes A device node, device file, or device special file is a type of special file used on many Unix-like operating systems, including Linux. Device nodes facilitate transparent communication between user space applications and computer hardware.
To have more control over the device numbers and the device creation you could do the following steps (instead of register_chrdev()
):
alloc_chrdev_region()
to get a major number and a range of minor numbers to work with.class_create()
.cdev_init()
and cdev_add()
to add the character device to the system.device_create()
. As a result, among other things, Udev will create device nodes for your devices. No need for mknod
or the like. device_create()
also allows you to control the names of the devices.There are probably many examples of this on the Net, one of them is here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With