如何在为设备驱动程序加载内核模块时自动在/ dev中创建设备?

Mir*_*Mir 12 linux-device-driver linux-kernel

我正在尝试开发Linux设备驱动程序,并且作为我的第一次尝试,我正在尝试开发具有以下文件选项的char设备驱动程序,

struct file_operations fops{  
.open=open_fun,  
.release=release_fun,  
.write=write_fun,  
.read=read_fun,  
};  
Run Code Online (Sandbox Code Playgroud)

当我使用加载驱动程序时insmod,我看到/proc/devices列出了char设备下的驱动程序,但我找不到它/dev.谷歌搜索建议使用mknod创建一个deivce /dev并将其与驱动程序的主要和次要关联.但是,尝试这样做会导致"权限被拒绝"错误,即使以超级用户身份完成也是如此.

/dev加载内核模块时,我该怎么做才能使设备出现?我尝试了注册设备的旧(register_chrdev)和更新版本(cdev_init & cdev_add),但没有一个工作.

谢谢,
米尔

小智 6

  • 包括头文件linux / device.hlinux / kdev_t.h

  • 静态结构类c_dev;

  • 静态struct dev_t dev;

在驱动程序的__init函数内部添加以下API

  • cl = class_create(THIS_MODULE,“ x”);

其中x-加载驱动程序时在/ sys / class /中显示的名称。

  • 使用device_create()内核api和device_create(cl,NULL,dev,NULL,“ d”);

其中d-要在/ dev下创建的设备文件。

其中dev是第一个设备号的变量,该设备号是在使用alloc_chrdev_region API为驱动程序动态分配主号期间初始化的

有关更多参考,请通过链接http://opensourceforu.com/2011/04/character-device-files-creation-operations/


小智 3

您可能需要创建一些 udev 规则来告诉系统您需要创建哪些设备节点。