C-Linux Char设备openat()返回EINVAL

C-Linux Char设备openat()返回EINVAL,c,linux-device-driver,C,Linux Device Driver,我正在编写我的第一个Linux LKM。它是一个简单的chardev,具有一些基本的读取,写入,打开,释放功能和互斥锁。它成功地编译了,但是当我试图通过cat/dev/kbschar打开chardev时,我得到了以下错误 cat: /dev/kbschar: Invalid argument 源代码是。我已链接到main.c文件。您可以在存储库中找到Makefile dmesg的输出。我还使用了ftrace的函数图跟踪器,并通过:mod:main进行过滤。这是它的输出。最后,我还运行了stra

我正在编写我的第一个Linux LKM。它是一个简单的chardev,具有一些基本的
读取
写入
打开
释放
功能和
互斥锁。它成功地编译了,但是当我试图通过
cat/dev/kbschar
打开chardev时,我得到了以下错误

cat: /dev/kbschar: Invalid argument
源代码是。我已链接到
main.c
文件。您可以在存储库中找到
Makefile

dmesg
的输出。我还使用了
ftrace
函数图
跟踪器,并通过
:mod:main
进行过滤。这是它的输出。最后,我还运行了
stracecat/dev/kbschar
,查看从哪里得到
EINVAL
错误。是这个的输出。我们在第32行有
EINVAL
错误


提前感谢您的帮助

您的
dev_open
功能的最后一行:

return true;
这不好。您应该返回一个错误代码(负errno)或零表示成功。无论
true
是什么(可能在某处定义为1?),它都是无效的