用已经使用的主号码注册模块/驱动程序

时间:2018-07-23 11:58:15

标签: linux module linux-kernel

我编写了一个简单的模块,该模块将使用大号和小号进行注册。 现在我使用的主要号码已经被其他设备(例如i2c(89),misc(10))使用,但是这样做并没有收到任何警告/错误。这意味着它不是非法的,在下面的列表中我们可以看到一些具有相同主编号(例如4和5)的char设备。

当我插入具有现有主号码的模块时(例如对于i2c来说是89) 那么模块就可以成功地从内核中插入和删除了。 但是我的设备条目在cat / proc / devices列表中不可见。

现在是我的查询  1.我们可以使用已经使用的主号码。但是如何使我的设备在/ proc / devices列表中可见。  2.小​​数是唯一的还是我们也可以使用现有的小数。

请分享您对此的看法,并帮助我理解概念。

 cat /proc/devices 
 Character devices:
 1 mem
 4 /dev/vc/0
 4 tty
 4 ttyS
 5 /dev/tty
 5 /dev/console
 5 /dev/ptmx
 5 ttyprintk
 6 lp
 7 vcs
 10 misc
 13 input
 21 sg
 29 fb
 89 i2c
 99 ppdev
 108 ppp
 116 alsa
 128 ptm
 136 pts
 180 usb
 189 usb_device
 204 ttyMAX
 226 drm
 242 mei
 243 hidraw
 244 aux
 245 ttyDBC

下面是模块代码:

dev_t dev ;

int major_num = 235;
module_param(major_num,int,S_IWUSR | S_IRUSR);

static int __init my_init(void)
{
  printk(KERN_INFO "Init function called \n");
  dev = MKDEV(major_num, 0);
  if( (register_chrdev_region(dev, 1, "SLP")) < 0 )
  {
     printk(KERN_ERR "Registration of char device failed");
     return -1;
  }
  printk(KERN_INFO "Major = %d Minor = %d \n",MAJOR(dev), MINOR(dev));
  printk(KERN_INFO "Kernel Module Inserted Successfully...\n");

  return 0;
}


void __exit my_exit(void)
{
  printk(KERN_INFO "Exit function called\n");

  unregister_chrdev_region(dev, 1);
  printk(KERN_INFO "Kernel Module Removed Successfully...\n");
  return;
 }

0 个答案:

没有答案