首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个device_create()不调用/dev/ entry?

为什么这个device_create()不调用/dev/ entry?
EN

Stack Overflow用户
提问于 2014-10-08 16:40:23
回答 1查看 1.9K关注 0票数 1

我正在将平台驱动程序代码移植到一个PCIe变体上,我不明白为什么不显示一个/dev/条目。已修改的平台驱动程序代码:

代码语言:javascript
运行
复制
static dev_t first;
static struct class * class;
ATTRIBUTE_GROUPS(my);
static int __init my_pci_init(void)
{

    int ret;
    /* Create a class entry in sysfs */
    if ((class = class_create(THIS_MODULE, "test_driver")) == NULL) {
        pr_err("Couldn't create 'struct class' structure.");
        ret = -ENODEV;
        goto exit;
    }
    class->dev_groups = my_groups;
    /* Create the /dev/ file system entry */
    /* return value ignored: there's a 'struct class' to 'struct device' mapping */
    if (device_create(class, NULL, first, NULL, KBUILD_MODNAME) == NULL) {
        pr_err("Couldn't create entry in '/dev/' file system.");
        ret = -ENODEV;
        goto exit;
    } else {
        pr_info("Created a /dev/ entry.");
    }

    if ((ret = pci_register_driver(&pci_driver)) < 0) {
        pr_err("Couldn't register pci driver.");
    }
 exit:
    if (ret < 0) {
        my_pci_exit();
        pr_err(" ret = %d", ret);
    }
    return ret;
}

module_init(my_pci_init);

如果模块名为'cz_tdm',我希望上面的代码能够创建一个条目/dev/cz_tdm。至少当我把它编译成一个平台驱动程序时,它做到了。

驱动程序枚举得很好,lspci的输出显示驱动程序已经加载,仔细阅读sysfs显示了我在/sys/devices/virtual/...中的所有属性都在我期望的位置。

怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-08 17:06:37

哇哦。

因为这不应该太过。对代码的过度删除删除了这个必要的元素:

代码语言:javascript
运行
复制
/* Add the char device to the system. */
cdev_init(&cdev, &fops);
if ((ret = cdev_add(&cdev, first, DEV_MINOR_NUMBER_COUNT)) < 0) {
    pr_err("Couldn't add device to system: %d", ret);
    ret = -ENODEV;
    goto exit;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26262040

复制
相关文章

相似问题

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