#无意中发现的方法#
1.环境
刚开始写法:
static ssize_t test_modem_show(.............
static ssize_t test_modem_store(...............
static CLASS_ATTR_RW(test_modem);
static int probe{
.......
modem_class = class_create(THIS_MODULE, "test_modem");
ret = class_create_file(modem_class, &class_attr_test_modem);
.........
}
应用层反馈,无写权限,后续研究后
2.原因
在static CLASS_ATTR_RW(modem_status);出了问题。
查看源码发现,里面只是644权限。
3.解决
那么解决办法就是直接将CLASS_ATTR_RW宏拿出来自己自定义。
根据源码一点一点分析。一套一套的替换成自己想要的功能,最终如下:
static ssize_t test_modem_show(.............
static ssize_t test_modem_store(...............
static struct class_attribute class_attr_test_modem = {
.attr = {.name = "test_modem", .mode = 0666 },
.show = test_modem_show,
.store = test_modem_store,
};
static int probe{
.......
modem_class = class_create(THIS_MODULE, "test_modem");
ret = class_create_file(modem_class, &class_attr_test_modem);
.........
}
具体为什么这样写,可以自己一套一套的去研究一下linux源码,挺简单的其实,入口就是这个CLASS_ATTR_RW,一次一次套进去就可以研究出来了。我第三点是直接把结果给出来了,方便使用。
别忘记收藏下次要用到哦!