Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 我如何知道Linux模块初始化的次要步骤_Linux Kernel - Fatal编程技术网

Linux kernel 我如何知道Linux模块初始化的次要步骤

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

我正在编写一个linux内核模块

下面是我在模块的init函数中所做的工作:

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。