Linux kernel 如何在为设备驱动程序加载内核模块时在/dev中自动创建设备?
我正在尝试开发Linux设备驱动程序,作为我的第一次尝试,我正在尝试开发一个具有以下文件选项的char设备驱动程序Linux kernel 如何在为设备驱动程序加载内核模块时在/dev中自动创建设备?,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,我正在尝试开发Linux设备驱动程序,作为我的第一次尝试,我正在尝试开发一个具有以下文件选项的char设备驱动程序 struct file_operations fops{ .open=open_fun, .release=release_fun, .write=write_fun, .read=read_fun, }; 当我使用insmod加载驱动程序时,我看到/proc/devices在char devices下列出了驱动程序,但在/dev中找不到它。谷歌搜索建议使
struct file_operations fops{
.open=open_fun,
.release=release_fun,
.write=write_fun,
.read=read_fun,
};
当我使用insmod
加载驱动程序时,我看到/proc/devices
在char devices下列出了驱动程序,但在/dev
中找不到它。谷歌搜索建议使用mknod
在/dev
中创建一个设备,并将其与驾驶员的大调和小调关联。但是,即使以超级用户身份执行,尝试这样做也会导致“权限被拒绝”错误
加载内核模块时,我应该如何使设备显示在/dev
中?我尝试了旧版本(register\u chrdev
)和新版本(cdev\u init&cdev\u add
)来注册设备,但都不起作用
谢谢,Mir您可能必须告诉系统您需要创建哪些设备节点。您可能必须告诉系统您需要创建哪些设备节点。通过在控制台运行以下命令,在创建节点后,我可以看到
/dev
中的条目
sudo mknod-m 0666/dev/msio c 22 0
用户不是root用户,所以我必须使用sudo。我的输入名是msio
,一种字符设备,主次号分别为22和0
我会让您知道这是否可以通过编程实现。在控制台上运行以下命令创建节点后,我可以在
/dev
中看到条目
sudo mknod-m 0666/dev/msio c 22 0
用户不是root用户,所以我必须使用sudo。我的输入名是msio
,一种字符设备,主次号分别为22和0
我会让你知道这是否可以通过编程实现。CONFIG\u DEVTMPFS非常好,如果你可以在发行版中使用它。您可以让内核在启动时自动挂载(CONFIG_DEVTMPFS_MOUNT)或手动挂载(MOUNT-t DEVTMPFS none/dev)。CONFIG_DEVTMPFS非常好,如果您可以在发行版中使用它的话。您可以让内核在启动时自动装载(CONFIG_DEVTMPFS_MOUNT)或手动装载(MOUNT-t DEVTMPFS none/dev)。首先您必须使用: sudo mknod/dev/devicename c 81 0 它在/dev中创建设备文件,但您必须授予它读/写权限。为此, sudo chmod 777/dev/devicename 完成 首先,您必须使用: sudo mknod/dev/devicename c 81 0 它在/dev中创建设备文件,但您必须授予它读/写权限。为此, sudo chmod 777/dev/devicename 完成
- 包括头文件linux/device.h和linux/kdev_t.h
- 静态结构类c_dev
- 静态结构开发李>
- cl=创建类(该模块为“x”)李>
- 将device_create()内核api与device_create一起使用(cl,NULL,dev,NULL,“d”)李>
- cl=创建类(该模块为“x”)李>
- 将device_create()内核api与device_create一起使用(cl,NULL,dev,NULL,“d”)李>
如需进一步参考,请浏览链接在
/dev
- 使用
手动创建设备文件mknod
$mknod-m
这里
name是设备驱动程序的名称,
device\u type是设备的类型(b->block devices,c->char devices),
主要和次要是设备编号,
权限是可选的。您可以在创建后使用
对其进行更改chmod
- 使用动态创建。
注意class\u create,device\u create函数调用应该在
\u init
函数中。
在
,
中,有两种方法可以在/dev
中创建设备文件
- 使用
手动创建设备文件mknod
$mknod-m
这里
name是设备驱动程序的名称,
device\u type是设备的类型(b->block devices,c->char devices),
主要和次要是设备编号,
权限是可选的。您可以在创建后使用
对其进行更改chmod
- 使用动态创建。
注意class\u create,device\u create函数调用应该在
\u init
函数中。
在lude
,
另请参见:可能的重复请参见:可能的重复是,可以通过编程方式创建设备节点。您可以使用class\u create()
和device\u create
dev_t dev=0;
static struct class *devicefileClass;
deviceFileClass=class_create(THIS_MODULE,"device_name");
device_create( deviceFileClass , NULL , dev ,"device_name")