我试图编写一个简单的字符设备驱动程序,现在,即使当我调用unregister_chrdev_region时,我仍然看到我的设备留在/proc/devices中,如下所示:
248 chardev
249 chardev
250 chardev现在我无法插入任何模块,每次使用insmod时,shell都会告诉我:
Error: could not insert module test.ko: Device or resource busy我在问如何从/proc/devices中删除这些注册设备。我已经使用了rmmod,并且已经使用了来自/dev的任何chardev。但他们仍然在那里,被困在/proc/devices。
发布于 2014-10-10 19:52:10
在调用unregister_chrdev_region时,请确保有正确的设备主号码。在使用同名的局部变量覆盖全局dev_major变量时,我遇到了类似的问题,导致我将0传递给unregister_chrdev_region。
发布于 2013-06-26 01:20:31
你可以这样做。这个很好用。头文件被省略,其中所有文件选项都实现了。
#include <linux/module.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include "my_char_device.h"
MODULE_AUTHOR("alakesh");
MODULE_DESCRIPTION("Char Device");
static int r_init(void);
static void r_cleanup(void);
module_init(r_init);
module_exit(r_cleanup);
static struct cdev r_cdev;
static int r_init(void)
{
int ret=0;
dev_t dev;
dev = MKDEV(222,0);
if (register_chrdev_region(dev, 2, "alakesh")){
goto error;
}
cdev_init(&r_cdev, &my_fops);
ret = cdev_add(&r_cdev, dev, 2);
return 0;
error:
unregister_chrdev_region(dev, 2);
return 0;
}
static void r_cleanup(void)
{
cdev_del(&r_cdev);
unregister_chrdev_region(MKDEV(222,0),2);
return;
}发布于 2018-03-26 15:11:35
我也面临着类似的问题,当我正在编程我的最初的char派生程序。问题是由于在函数unregister_chrdev_region(dev_t div_major,无符号计数)中传递无效的主号造成的。
我在exit例程中添加了一段代码,以删除未从/proc/设备中删除的设备文件。
lets say these are the devices we need to remove.
248 chardev
249 chardev
250 chardev
static void r_cleanup(void)
{
cdev_del(&r_cdev);
unregister_chrdev_region(MKDEV(222,0),2);
//My code changes.
unregister_chrdev_region(MKDEV(248,0), 1);
unregister_chrdev_region(MKDEV(249,0), 1);
unregister_chrdev_region(MKDEV(250,0), 1);
return;
}上述退出例程中的参考代码更改将移除主要编号248、249和250的char设备。
https://stackoverflow.com/questions/17290292
复制相似问题