欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

添加sysfs文件节点调试驱动

程序员文章站 2022-03-27 11:40:46
驱动调试过程中我们经常需要借助adb或者串口动态控制设备,在sysfs中添加一个文件节点用来调试是一个十分方便调试的方法。一下介绍下添加方法:1.定义kobject目录和device_attributestatic struct kobject *xxx_deg;static struct device_attribute xxx_deg_attrs =__ATTR(xxx_debug, 0200, NULL,xxx_store);//处于对权限的限制,注意这里需要把权限设置为不可写,否则内核在编...

驱动调试过程中我们经常需要借助adb或者串口动态控制设备,在sysfs中添加一个文件节点用来调试是一个十分方便调试的方法。
一下介绍下添加方法:

1.定义kobject目录和device_attribute
static struct kobject *xxx_deg;
static struct device_attribute xxx_deg_attrs =
__ATTR(xxx_debug, 0200, NULL,xxx_store);//出于对权限的限制,注意这里需要把权限设置为不可写,否则内核在编译过程中会强制报错,需要用户手动给予权限
2.在driver probe过程中创建文件目录以及文件节点

xxx_deg = kobject_create_and_add(“xxx_deg_dir”,NULL);
sysfs_create_file(xxx_deg,xxx_deg_attrs .attrs);

3.实现xxx_store函数
static ssize_t xxx_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{
int ret;
char cmd;
u32 input[2];

ret = sscanf(buf, "%c ", &cmd);
switch (cmd) {
case 'w':
	ret = sscanf(buf, "%c %x %x ", &cmd, &input[0], &input[1]);
	if (ret != 3) {
		pr_err("erro! cmd format: echo w [addr] [value]\n");
		goto out;
	}
	pr_info("cmd : %c %x %x\n\n", cmd, input[0], input[1]);
	break;
case 'r':
	ret = sscanf(buf, "%c %x ", &cmd, &input[0]);
	if (ret != 2) {
		pr_err("erro! cmd format: echo r [addr]\n");
		goto out;
	}
	pr_info("cmd : %c %x\n\n", cmd, input[0]);
	break;
default:
	pr_err("Unknown command\n");
	break;
}

out:
return count;
}

本文地址:https://blog.csdn.net/yuzhenrong/article/details/108114892

相关标签: linux驱动