Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a device node from the init_module code of a Linux kernel module?

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

like image 769
Alptugay Avatar asked May 11 '11 21:05

Alptugay


People also ask

How do I create a node in Linux?

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.

What is device node in Linux?

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.


1 Answers

To have more control over the device numbers and the device creation you could do the following steps (instead of register_chrdev()):

  1. Call alloc_chrdev_region() to get a major number and a range of minor numbers to work with.
  2. Create device class for your devices with class_create().
  3. For each device, call cdev_init() and cdev_add() to add the character device to the system.
  4. For each device, call 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.

like image 197
Eugene Avatar answered Oct 12 '22 00:10

Eugene