C-Linux Char设备openat()返回EINVAL
我正在编写我的第一个Linux LKM。它是一个简单的chardev,具有一些基本的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
读取
,写入
,打开
,释放
功能和互斥锁。它成功地编译了,但是当我试图通过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?),它都是无效的