一尘不染

如何从Linux内核模块的init_module代码创建设备节点?

linux

我正在为Linux内核编写模块,并且我想在init函数中创建一些设备节点

int init_module(void)
{
    Major = register_chrdev(0, DEVICE_NAME, &fops);
 // Now I want to create device nodes with the returned major number
}

我还希望内核为我的第一个节点分配一个次要编号,然后由我自己分配其他节点的次要编号。

我该如何在代码中做到这一点。我不想使用mknod从外壳创建设备


阅读 371

收藏
2020-06-02

共1个答案

一尘不染

要更好地控制设备编号和设备创建,您可以执行以下步骤(而不是register_chrdev()):

  1. 致电alloc_chrdev_region()以获取一个主要号码和一系列次要号码。
  2. 使用创建设备类的设备class_create()
  3. 对于每个设备,调用cdev_init()并将cdev_add()字符设备添加到系统。
  4. 对于每个设备,请致电device_create()。因此,Udev将为您的设备创建设备节点。不需要mknod之类的。device_create()还允许您控制设备的名称。

网上可能有很多这样的例子,这里是其中之一

2020-06-02