使用device_create()创建多个节点

时间:2014-10-14 06:05:48

标签: c linux-kernel driver

我正在尝试为Linux编写一个简单的字符设备驱动程序。我想使用函数device_create()创建多个节点。所以我使用了不同的次要号码和相同的主号码。

device_create(cls, NULL, MKDEV(MAJOR(first),0), NULL, "sou_dev1");

device_create(cls1, NULL, MKDEV(MAJOR(first),1), NULL, "sou_dev2");

cls和cls1是结构类类型变量,返回值为class_create()。 当我制作.ko文件并使用" insmod"将其插入内核时命令,然后在/ dev /目录中只创建一个节点,即sou_dev1。

如何创建sou_dev1和sou_dev2

1 个答案:

答案 0 :(得分:0)

建议始终使用动态分配。我建议使用更直接的misc_register()misc_unregister()。请参阅标题linux/miscdevice.h。这是一些示例代码。

/*implemented these functions*/
const struct file_operations chr_fops = {
        .write   = chr_write,    
        .read    = chr_read,
        .owner   = THIS_MODULE,
};

static struct miscdevice my_dev1 = {
        .minor = MISC_DYNAMIC_MINOR,
        .name = "/dev/MYDEVNAME1",
        .fops = &chr_fops
};

static struct miscdevice my_dev2 = {
        .minor = MISC_DYNAMIC_MINOR,
        .name = "/dev/MYDEVNAME2",
        .fops = &chr_fops
};

int init_module(void)
{
        int ret;

        ret = misc_register(&my_dev1);
        if (ret != 0) {
                pr_err("misc_register() failed");
                return ret;
        }

        pr_info("device registered: %s\n", "/dev/MYDEVNAME1");

        ret = misc_register(&my_dev2);
        if (ret != 0) {
                pr_err("misc_register() failed");
                return ret;
        }

        pr_info("device registered: %s\n", "/dev/MYDEVNAME2");

        return ret;
}

void cleanup_module(void)
{

        do_cleanup_func();

        misc_deregister(&my_dev);

        pr_info("device unregistered\n");
}