我正在写一个Linux内核模块。
这是我在模块的init函数中所做的事情:
register_chrdev(300 /* major */, "mydev", &fops);
它工作正常。但是我需要知道小数。
我读过,我们无法设置这个次要号码。是内核给了我们这个数字。如果是这样,我如何在模块的init函数中知道它?
谢谢
register_chrdev
__register_chrdev
内部通话。
static inline int register_chrdev(unsigned int major, const char *name,
const struct file_operations *fops)
{
return __register_chrdev(major, 0, 256, name, fops);
}
如果您看到__register_chrdev
功能签名,则为
int __register_chrdev(unsigned int major, unsigned int baseminor,
unsigned int count, const char *name,
const struct file_operations *fops)
register_chrdev
将通过您的主电话号码(300)
和基本次电话号码0
,计数为256
。因此,它将为您的设备保留0-255个次要数字范围。
另外,在的定义中__register_chrdev
,dev_t
将为您的设备创建结构(包含主要和次要编号)。
err = cdev_add(cdev, MKDEV(cd->major, baseminor), count);
MKDEV(cd->major, baseminor)
创建它。因此,第一个设备号(dev_t
)将0
作为其次要号。此外,count(256)
是可以进一步使用的连续次要数字。
如果使用,您还可以动态获取主要和次要号码alloc_chrdev_region
。您所要做的就是将一个dev_t
结构传递给alloc_chrdev_region
。它将为您的设备动态分配主要和次要编号。要获取模块中的主号和副号,您可以使用
major = MAJOR(dev);
minor = MINOR(dev);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句