linux - 如何从 Linux 内核模块的 init_module 代码创 build 备节点?

我正在为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 从 shell 创 build 备

最佳答案

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

  1. 调用 alloc_chrdev_region() 以获取主要编号和要使用的次要编号范围。
  2. 使用 class_create() 为您的设备创 build 备类。
  3. 对于每个设备,调用 cdev_init()cdev_add() 将字符设备添加到系统中。
  4. 对于每个设备,调用 device_create()。结果,除其他外,Udev将为您的设备创 build 备节点。不需要 mknod 之类的。 device_create() 还允许您控制设备的名称。

网上可能有很多这样的例子,one of them is here .

https://stackoverflow.com/questions/5970595/

相关文章:

java - System.currentTimeMillis 是否总是返回一个值 >= 以前的调用

c - libc(glibc) 在我们的 linux 应用程序中的作用是什么?

linux - Bash:WAITING超时

c++ - 在 C、C++ 中检测 Windows 或 Linux

linux - Home/End 键在 tmux 中不起作用

c++ - 谁决定任何数据类型或结构的大小(取决于 32 位或 64 位)?

c++ - 在 Ubuntu 中学习 OpenGL

linux - 为什么Linux设备驱动中除了init还需要probe方法?

linux - 如何在不创建父目录的情况下使用 wget 镜像目录?

linux - 在类 Unix 系统中上次运行的 cron 作业的详细信息?