我正在尝试创建具有以下规格的文件。
debugfs 子目录中的文件“myfile”是只读由任何用户读取,并且在读取时应返回 jiffies 内核计时器的当前值。
my_init
我在直接调用的函数中编写了以下一行代码module_init(my_init)
。
if (!debugfs_create_u32("myfile", 0444, handle, (u32*)&myfile))
goto fail;
运行时make
,我收到以下错误。
error: invalid use of void expression
if (!debugfs_create_u32("myfile", 0444, handle, (u32*)&myfile))
如果有人能帮助我清除这个错误,那就太好了。提前致谢 :)
答案1
返回值已从debugfs_create_u32
at中删除2b07021a940ce1cdec736ec0cacad6af77717afc进入 v5.7:
debugfs: 删除 debugfs_create_u32() 的返回值 没有人检查 debugfs_create_u32() 的返回值,因为不需要它,因此将返回值设置为 void,以便将来没有人尝试这样做。
所以你可以摆脱它if
。
对我来说问题是我想在模块卸载后删除 debugfs 文件,并且我的条目位于 debugfs 顶层且为 NULL,所以我不能只是debugfs_remove_recursive
.
所以我想我会得到 dentry:
debugfs_lookup("basename", NULL)
也许我们不应该在顶层创建 debugfs 条目,因为如果有多个条目,它会过多地污染命名空间。
然而,一些非常相似的调用仍然返回文件,这有点不一致,例如:
struct dentry *debugfs_create_ulong
所以我认为这只是一个 API 错误。难道内核开发者不像我曾经想象的那样是完美的上帝吗? :-O