我编写了一个简单的模块,该模块将使用大号和小号进行注册。 现在我使用的主要号码已经被其他设备(例如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;
}