我正在为linux内核编写一个模块,我想在init函数中创建一些设备 node

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

我还希望内核为我的第一个 node 分配一个次要编号,然后我将自己分配其他 node 的次要编号.

我怎样才能在代码中做到这一点.我不想使用mknod从shell创建设备

推荐答案

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

  1. 拨打alloc_chrdev_region()获得一个主要号码和一系列次要号码.
  2. 使用class_create()为设备创建设备类.
  3. 对于每个设备,调用cdev_init()cdev_add()将字符设备添加到系统中.
  4. 对于每个设备,请拨打device_create().因此,除其他外,Udev将为您的设备创建设备 node .不需要mknod之类的.device_create()还允许您控制设备的名称.

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

Linux相关问答推荐

C++17:G++8.5版似乎无法正确生成无符号64位伪随机整数

在查找命令中使用 printf

记录终端输入和输出的 Bash 脚本

如何使用netcat为DPDK实例提供输入?

将 Visual Studio C++ 项目迁移到 Linux 和 CMake

使用 AWK 过滤 Linux 输出

删除 csv 列中的不匹配值

如何使用正则表达式在 LINux 中查找具有不同结尾的多个文件?

如何使用 shell 脚本查找具有最大上下文长度的行号?

如何判断 Ubuntu 12.04 LTS 上是否安装了多个版本的 PHP?

argv的编码是什么?

如何将整个文件夹从 Amazon EC2 Linux 实例复制到本地 Linux 机器?

分段故障处理

如何准确复制文件夹

如何让 GNU 屏幕读取 .bash_profile/.bash_rc 更改?

如何在 Linux 中通过控制台输出启动 Tomcat?

列出当前目录和所有子目录中特定大小的文件

用于提取 IP 地址的 Linux bash 脚本

ImportError:在 ubuntu 14.04 中没有名为 _io 的模块

在tmux中绑定Ctrl+Tab和Ctrl+Shift+Tab