如何从Linux内核模块的init_module代码创建设备节点?
我正在为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从外壳创建设备
回答:
要更好地控制设备编号和设备创建,您可以执行以下步骤(而不是register_chrdev()
):
- 致电
alloc_chrdev_region()
以获取一个主要号码和一系列次要号码。 - 使用创建设备类的设备
class_create()
。 - 对于每个设备,调用
cdev_init()
并将cdev_add()
字符设备添加到系统。 - 对于每个设备,请致电
device_create()
。因此,Udev将为您的设备创建设备节点。不需要mknod
之类的。device_create()
还允许您控制设备的名称。
网上可能有很多这样的例子,这里是其中之一。
以上是 如何从Linux内核模块的init_module代码创建设备节点? 的全部内容, 来源链接: utcz.com/qa/400256.html