为什么这个seq_file misc char驱动程序冻结了我的系统?

时间:2014-06-06 03:49:48

标签: linux char linux-device-driver device-driver

我正在学习如何编写Linux设备驱动程序,而目前我还是遇到了一个非常简单的misc char设备示例。我有这个:

static char *dev_contents = "hello world!";

static int demo_show(struct seq_file *f, void *unused)
{
        seq_puts(f, dev_contents);
        return 0;
}

static int demo_open(struct inode *i, struct file *f)
{
        return single_open(f, demo_show, NULL);
}

const struct file_operations demo_fops = {
        .owner  = THIS_MODULE,
        .open   = demo_open,
        .read   = seq_read,
        .llseek = seq_lseek,
        .release = single_release,
};

static struct miscdevice demo_dev = {
        MISC_DYNAMIC_MINOR,
        "demo",
        &demo_fops
};

int __init init_module(void)
{
        int res = 0;

        res = misc_register(&demo_dev);
        if (res)
                pr_err("Error registering demo misc device.\n");

        return res;
}

void __exit cleanup_module(void)
{
        misc_deregister(&demo_dev);
}

它确实按预期显示在/ dev中,我可以捕获设备文件。返回字符串,但在返回最后一个字符后整个系统会冻结。

我将此与其他做同样事情的例子进行了比较,而且我很难看到自己做错了什么。有人想指出我正确的方向吗?

谢谢!

0 个答案:

没有答案