DEVICE_ATTR_WO必须echo -n,直接echo会死机,为什么
时间: 2023-08-02 18:24:59 浏览: 227
DEVICE_ATTR_WO是Linux内核提供的用于创建只写sysfs属性的宏,它只能被内核模块使用。在使用DEVICE_ATTR_WO创建只写sysfs属性时,只能使用echo -n或者echo一个单个字符来写入属性值,不能使用echo加换行符等多个字符,否则会导致死锁。这是因为在写入属性值时,内核会通过sysfs文件系统中的文件操作函数将写入请求转换为调用内核模块中的相关函数进行处理,如果写入的数据长度超过了内核模块预留的缓冲区大小,就会发生死锁。因此,在使用DEVICE_ATTR_WO创建只写sysfs属性时,必须确保写入的数据长度不超过预留的缓冲区大小,只能使用echo -n或者echo一个单个字符来写入属性值。
相关问题
为什么用DEVICE_ATTR可以直接echo,DEVICE_ATTR_WO必须echo -n
`DEVICE_ATTR` 和 `DEVICE_ATTR_WO` 是内核中的两种属性类型,它们在使用上略有不同。
`DEVICE_ATTR` 属性是可读写的,因此您可以使用 `echo` 命令来写入值,也可以使用 `cat` 命令来读取值。例如,以下命令可以将值 `1` 写入 `/sys/devices/platform/my_device/my_attr` 文件:
```
echo 1 > /sys/devices/platform/my_device/my_attr
```
`DEVICE_ATTR_WO` 属性是只写的,因此您只能使用 `echo -n` 命令来写入值,而不能使用 `echo` 命令。这是因为 `echo` 命令会在写入值后追加一个换行符,而 `DEVICE_ATTR_WO` 的 `store` 函数不支持换行符。因此,使用 `echo -n` 命令可以确保只写入值本身,而不会附加任何其他字符。
总的来说,使用 `echo` 命令写入属性值时,需要根据属性类型来选择合适的命令和选项。
DEVICE_ATTR_WO
DEVICE_ATTR_WO是Linux内核中的一个宏,用于定义只读的设备属性。在Linux设备驱动中,设备属性是一种用于向用户空间提供设备信息或控制设备行为的机制。通过定义设备属性,用户空间可以通过读取或写入设备文件来与设备进行交互。
DEVICE_ATTR_WO宏用于定义只读的设备属性,即只能从设备中读取信息,不能向设备写入数据。它的定义如下:
#define DEVICE_ATTR_WO(_name) \
__ATTR(_name, S_IWUSR | S_IRUGO, NULL, _name##_show)
其中,_name是属性的名称,S_IWUSR表示只有用户具有写权限,S_IRUGO表示所有用户都具有读权限,NULL表示写操作的回调函数为空,_name##_show表示读操作的回调函数。
通过使用DEVICE_ATTR_WO宏,可以方便地定义只读的设备属性,并在驱动中实现相应的读操作回调函数来提供属性值。
阅读全文