linux 驱动sysfs设备节点中新增value值
时间: 2024-09-19 13:12:45 浏览: 36
在Linux内核中,sysfs是一个系统级文件系统,用于动态地展示和操作内核模块的运行时信息,包括驱动程序的数据结构。如果你想要在sysfs设备节点中添加新的value值,通常涉及以下几个步骤:
1. **创建数据结构**:首先,在驱动程序中定义一个新的变量,并确保它是在device structure(设备上下文)中可用的,因为sysfs会映射到这个结构。
```c
struct my_driver_data {
struct device *dev;
int new_value;
};
```
2. **初始化sysfs**:在`driver_init()`函数中,你需要注册一个属性到这个新的变量上,这通常是通过`device_create_file()`或`device_create_attribute()`函数完成。
```c
static ssize_t set_new_value(struct device *dev,
struct device_attribute *attr,
const char __user *buf,
size_t count)
{
struct my_driver_data *data = dev_get_drvdata(dev);
int value;
if (count != sizeof(int) || !copy_from_user(&value, buf, sizeof(int)))
return -EFAULT;
data->new_value = value;
return count;
}
static DEVICE_ATTR(new_value, S_IWUSR | S_IRUGO, show_new_value, set_new_value);
```
3. **设置访问权限**:`S_IWUSR | S_IRUGO`表示属性允许用户读取(`S_IRUGO`)和写入(`S_IWUSR`),`show_new_value`是获取值的回调函数。
4. **加载驱动并挂载sysfs**:确保在驱动加载时成功创建了sysfs目录,并将新属性添加进去。
5. **查询或修改**:用户现在可以通过cat命令读取属性值,使用echo命令写入新值。例如:`echo <value> > /sys/class/my_driver/new_value`
阅读全文