首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux -如何从/proc/设备中删除条目

Linux -如何从/proc/设备中删除条目
EN

Stack Overflow用户
提问于 2013-06-25 06:12:13
回答 3查看 4.9K关注 0票数 4

我试图编写一个简单的字符设备驱动程序,现在,即使当我调用unregister_chrdev_region时,我仍然看到我的设备留在/proc/devices中,如下所示:

代码语言:javascript
复制
248 chardev
249 chardev
250 chardev

现在我无法插入任何模块,每次使用insmod时,shell都会告诉我:

代码语言:javascript
复制
Error: could not insert module test.ko: Device or resource busy

我在问如何从/proc/devices中删除这些注册设备。我已经使用了rmmod,并且已经使用了来自/dev的任何chardev。但他们仍然在那里,被困在/proc/devices

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-10 19:52:10

在调用unregister_chrdev_region时,请确保有正确的设备主号码。在使用同名的局部变量覆盖全局dev_major变量时,我遇到了类似的问题,导致我将0传递给unregister_chrdev_region

票数 1
EN

Stack Overflow用户

发布于 2013-06-26 01:20:31

你可以这样做。这个很好用。头文件被省略,其中所有文件选项都实现了。

代码语言:javascript
复制
#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;
}
票数 0
EN

Stack Overflow用户

发布于 2018-03-26 15:11:35

我也面临着类似的问题,当我正在编程我的最初的char派生程序。问题是由于在函数unregister_chrdev_region(dev_t div_major,无符号计数)中传递无效的主号造成的。

我在exit例程中添加了一段代码,以删除未从/proc/设备中删除的设备文件。

代码语言:javascript
复制
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设备。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17290292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档