C-Linux字符设备openat()返回EINVAL

时间:2018-08-09 22:43:49

标签: c linux-device-driver

我正在写我的第一个Linux LKM。这是一个简单的chardev,具有一些基本的readwriteopenrelease函数,并具有mutex锁。它编译成功,但是当我尝试通过cat /dev/kbschar打开chardev时,出现以下错误

cat: /dev/kbschar: Invalid argument

源代码为FCM-AndroidToOtherDevice。我已链接到main.c文件。您可以在存储库中找到Makefile

dmesg on gitlab的输出。我还使用了ftrace的{​​{1}}跟踪器,并通过function_graph进行了过滤。 is here是其输出。最后,我还运行:mod:main来查看哪里出现了strace cat /dev/kbschar错误。 Here是输出。我们在第32行出现了EINVAL错误。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您的dev_open函数的最后一行:

return true;

不好。您应该返回一个错误代码(负errno)或零以获取成功。不管true是什么(可能在某处定义为1?)都是无效的。