Linux kernel 我如何知道Linux模块初始化的次要步骤
我正在编写一个linux内核模块 下面是我在模块的init函数中所做的工作:Linux kernel 我如何知道Linux模块初始化的次要步骤,linux-kernel,Linux Kernel,我正在编写一个linux内核模块 下面是我在模块的init函数中所做的工作: register_chrdev(300 /* major */, "mydev", &fops); 它很好用。但我需要知道小号码 我已经读到我们不能设置这个小号。是内核给了我们这个数字。如果是这样,我如何在模块的init函数中知道它 感谢register\u chrdev内部呼叫\u register\u chrdev static inline int register_chrdev(unsigned in
register_chrdev(300 /* major */, "mydev", &fops);
它很好用。但我需要知道小号码
我已经读到我们不能设置这个小号。是内核给了我们这个数字。如果是这样,我如何在模块的init函数中知道它
感谢
register\u chrdev
内部呼叫\u register\u 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);
}
如果您将看到\uuu register\u chrdev
函数签名,则它是
int __register_chrdev(unsigned int major, unsigned int baseminor,
unsigned int count, const char *name,
const struct file_operations *fops)
register\u chrdev
将传递您的主要号码(300)
和一个基本次要号码0
,计数为256
。因此,它将为您的设备保留0-255个小号码范围
err = cdev_add(cdev, MKDEV(cd->major, baseminor), count);
此外,在\u register\u chrdev
的定义中,将为您的设备创建dev\u t
结构(包含主要编号和次要编号)
err = cdev_add(cdev, MKDEV(cd->major, baseminor), count);
MKDEV(cd->major,baseminor)
创建它。因此,第一个设备编号(dev\u t
)将0
作为次要编号。除此之外,count(256)
是可以进一步使用的连续次要数字
如果使用alloc\u chrdev\u region
,您还可以动态获取主要和次要编号。你所要做的就是传递一个dev\u t
struct
到alloc\u chrdev\u区域
。它将动态地为您的设备分配一个主要号码和次要号码。要获取模块中的主次编号,可以使用
major = MAJOR(dev);
minor = MINOR(dev);
你不能简单<代码>->init()在模块加载时运行一次。之后,其他回调正在使用。那么,我如何知道附加到我的模块的次要号码呢?它不显示在LSMOD中从一开始你的问题开始你为什么需要知道它?我需要知道影响我的模块的次要数字为什么你需要它?你还是没回答。所以,也许其他人可以帮你。需要稍加更正:保留的小号范围为0-255。