我正在学习如何编写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中,我可以捕获设备文件。返回字符串,但在返回最后一个字符后整个系统会冻结。
我将此与其他做同样事情的例子进行了比较,而且我很难看到自己做错了什么。有人想指出我正确的方向吗?
谢谢!