Photonicat 2 sysfs:修订间差异

来自Photonicat Wiki
跳转到导航 跳转到搜索
C2h2留言 | 贡献
Created page with "= 电源与散热 Sysfs 接口(Battery / Charger / Fan) = 本文档描述路由器上的电源与散热相关 sysfs 接口,包含: * '''/sys/class/power_supply/battery''' * '''/sys/class/power_supply/charger''' * '''/sys/class/thermal/cooling_device0''' (风扇/冷却设备) == 快速上手 == <syntaxhighlight lang="bash"> # 电池电量百分比(%) cat /sys/class/power_supply/battery/capacity # 充电器是否在线(1=在线, 0=离线) cat /sys/c..."
 
Monstercat留言 | 贡献
无编辑摘要
 
(未显示1个用户的5个中间版本)
第1行: 第1行:
= 电源与散热 Sysfs 接口(Battery / Charger / Fan) =
= 版本说明 =
* '''1代(截至 2025-08)''':通过 '''pcat-manager''' 的 '''socket''' 方式获取电源/温控数据。 
  参考开源项目: [https://github.com/photonicat/rockchip_rk3568_pcat_manager/tree/v1 rockchip_rk3568_pcat_manager v1]
* '''2代''':功能集成进内核,统一经 '''sysfs / hwmon / power_supply / thermal''' 导出;并新增 '''电压/电流/电量(库仑计)检查'''。 
  —— 推荐上层应用直接读取本文所列 sysfs 路径。


本文档描述路由器上的电源与散热相关 sysfs 接口,包含:
= 电源/散热/背光 Sysfs 简明说明(OpenWrt / Debian) =


* '''/sys/class/power_supply/battery'''
适用于 OpenWrt 与 Debian。
* '''/sys/class/power_supply/charger'''
包含:
* '''/sys/class/thermal/cooling_device0''' (风扇/冷却设备)
* '''/sys/class/power_supply/battery'''(电池)
* '''/sys/class/power_supply/charger'''(充电器)
* '''/sys/class/thermal/cooling_device0'''(风扇档位)
* '''/sys/class/hwmon/hwmon2/temp1_input'''(主板温度,m°C)
* '''/sys/class/hwmon/hwmon3/fan1_input'''(风扇转速,RPM)
* '''/sys/class/thermal/thermal_zoneN/*'''(多热区)
* '''/sys/class/backlight/backlight/brightness'''(背光)
* '''/sys/kernel/photonicat-pm/movement_trigger'''(抬腕唤醒)
* '''/sys/kernel/photonicat-pm/gs_x''' (加速度传感器X轴, 单位: 1/16384g)
* '''/sys/kernel/photonicat-pm/gs_y''' (加速度传感器Y轴, 单位: 1/16384g)
* '''/sys/kernel/photonicat-pm/gs_z''' (加速度传感器Z轴, 单位: 1/16384g)


== 快速上手 ==
== 快速示例 ==
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# 电池电量百分比(%)
# 电池 / 充电器
cat /sys/class/power_supply/battery/capacity
cat /sys/class/power_supply/battery/capacity
# 充电器是否在线(1=在线, 0=离线)
cat /sys/class/power_supply/charger/online
cat /sys/class/power_supply/charger/online


# 风扇当前档位(0..max_state)
# 风扇档位(0..max_state)
cat /sys/class/thermal/cooling_device0/cur_state
cat /sys/class/thermal/cooling_device0/cur_state
</syntaxhighlight>
echo 5 > /sys/class/thermal/cooling_device0/cur_state  # 需 root


----
# 主板温度(m°C -> °C)  hwmon2: pcat_pm_hwmon_temp_mb
awk '{printf "Mobo: %.1f°C\n",$1/1000}' /sys/class/hwmon/hwmon2/temp1_input


== 电池接口 (/sys/class/power_supply/battery) ==
# 风扇转速(RPM)      hwmon3: pcat_pm_hwmon_speed_fan
echo -n "Fan1: "; cat /sys/class/hwmon/hwmon3/fan1_input


=== 概述 ===
# CPU 温度(thermal_zone0,m°C -> °C)
`battery` 设备提供电池容量、电压、电流与能量等信息,遵循 Linux Power Supply Class 规范。
awk '{printf "CPU: %.1f°C\n",$1/1000}' /sys/class/thermal/thermal_zone0/temp


=== 属性说明 ===
# 列出所有热区的类型与温度
{| class="wikitable"
for z in /sys/class/thermal/thermal_zone*; do \
! 文件 !! 描述 !! 单位 / 取值
  printf "%s " "$(cat "$z/type" 2>/dev/null)"; \
|-
  awk '{printf "%.1f°C\n",$1/1000}' "$z/temp" 2>/dev/null; \
| capacity || 当前电量百分比 || %
done
|-
| current_now || 瞬时电流(正=放电,负=充电) || µA
|-
| energy_empty || 剩余可用能量 || µWh
|-
| energy_empty_design || 设计的最小能量 || µWh
|-
| energy_full || 当前满电容量 || µWh
|-
| energy_full_design || 设计满电容量 || µWh
|-
| power_now || 瞬时功率 || µW
|-
| voltage_now || 当前电压 || µV
|-
| voltage_max_design || 设计最大电压 || µV
|-
| voltage_min_design || 设计最小电压 || µV
|-
| status || 充放电状态(`Charging`/`Discharging`/`Full` 等) || 字符串
|-
| technology || 化学类型(如 `Li-ion`) || 字符串
|-
| type || 通常为 `Battery` || 字符串
|-
| model_name || 电池型号 || 字符串
|-
| device, hwmon0, of_node, power, subsystem, uevent, wakeup1 || 内部引用/目录 || —
|}


=== 使用示例 ===
# 背光
<syntaxhighlight lang="bash">
cat /sys/class/backlight/backlight/brightness
cat /sys/class/power_supply/battery/capacity
cat /sys/class/power_supply/battery/voltage_now
cat /sys/class/power_supply/battery/status
</syntaxhighlight>
</syntaxhighlight>


----
== 关键路径与含义 ==
 
== 充电器接口 (/sys/class/power_supply/charger) ==
 
=== 概述 ===
`charger` 设备提供外部电源(AC/USB)连接状态与电压等信息。
 
=== 属性说明 ===
{| class="wikitable"
{| class="wikitable"
! 文件 !! 描述 !! 单位 / 取值
! 路径 !! 含义 !! 单位/说明
|-
| online || 充电器是否连接(1=是,0=否) || 布尔
|-
| voltage_now || 充电器输入电压 || µV
|-
| type || 设备类型(`Mains`/`USB` 等) || 字符串
|-
|-
| device, hwmon1, of_node, power, subsystem, uevent, wakeup2 || 内部引用/目录 || —
| /sys/class/hwmon/hwmon2/temp1_input || 主板温度(pcat_pm_hwmon_temp_mb) || m°C(除以1000得°C)
|}
 
=== 使用示例 ===
<syntaxhighlight lang="bash">
cat /sys/class/power_supply/charger/online
cat /sys/class/power_supply/charger/voltage_now
cat /sys/class/power_supply/charger/type
</syntaxhighlight>
 
----
 
== 风扇 / 冷却设备接口 (/sys/class/thermal/cooling_device0) ==
 
=== 概述 ===
`cooling_device0` 表示热管理子系统中的一个冷却设备(风扇等)。你的设备显示类型为 `pcat-pm-fan`,并支持离散档位控制。
 
=== 目录结构(示例) ===
<syntaxhighlight lang="bash">
/sys/class/thermal/cooling_device0
  ├─ cur_state      # 当前档位(0..max_state)
  ├─ max_state      # 最大档位(例:9)
  ├─ type            # 冷却设备类型(例:pcat-pm-fan)
  ├─ power/          # 电源管理目录(目录,非文件)
  ├─ subsystem/      # 内核子系统链接(目录)
  └─ uevent          # 内核事件信息
</syntaxhighlight>
 
=== 属性说明 ===
{| class="wikitable"
! 文件 !! 描述 !! 单位 / 取值
|-
|-
| cur_state || 当前风扇档位(0=关闭或最低档;越大越强) || 整数(0..max_state)
| /sys/class/hwmon/hwmon3/fan1_input || 风扇转速(pcat_pm_hwmon_speed_fan) || RPM
|-
|-
| max_state || 支持的最大档位(示例中为 9) || 整数
| /sys/class/thermal/cooling_device0/cur_state || 风扇当前档位 || 0..max_state(写入需 root)
|-
|-
| type || 冷却设备类型(你的设备显示为 `pcat-pm-fan`) || 字符串
| /sys/class/power_supply/battery/* || 电池状态(电量/电压/电流/能量等;二代含库仑计相关) ||
|-
|-
| power, subsystem, uevent || 内部引用/目录 || —
| /sys/class/power_supply/charger/* || 充电器在线/电压/类型 ||
|}
 
=== 读取与设置示例 ===
<syntaxhighlight lang="bash">
# 读取最大档位(示例输出:9)
cat /sys/class/thermal/cooling_device0/max_state
 
# 读取当前档位
cat /sys/class/thermal/cooling_device0/cur_state
 
# 以 root 身份设置到 5 档(确保 0<=5<=max_state)
echo 5 > /sys/class/thermal/cooling_device0/cur_state
 
# 观察档位变化(每秒刷新)
watch -n1 'cat /sys/class/thermal/cooling_device0/cur_state'
</syntaxhighlight>
 
=== 注意事项 ===
* 档位是离散级别,不等同于百分比或固定 RPM,具体转速映射取决于驱动。 
* 若需要查看实际转速(RPM),可在 `hwmon` 下查找 `fan*_input`(如果驱动导出),如:`/sys/class/hwmon/hwmonX/fan1_input`。 
* 写入超出范围值会失败或被内核拒绝;请始终在 `0..max_state` 之间操作。 
* 需要 root 权限写入 `cur_state`。 
* 设备可能不叫 `cooling_device` 而是带索引:`cooling_device0`、`cooling_device1`… 直接进入存在的索引目录。
 
----
 
== 常见问题(基于你的终端输出) ==
{| class="wikitable"
! 现象 !! 说明/原因 !! 处理方式
|-
|-
| <code>cd cooling_device</code> 报错 "No such file or directory" || 目录名带索引,如 <code>cooling_device0</code> || 使用 <code>cd /sys/class/thermal/cooling_device0</code>
| /sys/class/thermal/thermal_zoneN/{type,temp} || 多热区类型与温度(如 CPU/GPU/NPU/DDR/bigcore 等) || m°C
|-
|-
| <code>cat *</code> 出现 "Is a directory" || <code>power</code>、<code>subsystem</code> 是目录,不能 <code>cat</code> || 逐个读取具体文件,如 <code>cat cur_state</code>、<code>cat max_state</code>
| /sys/class/backlight/backlight/{brightness,max_brightness} || 背光等级/最大值 || 整数(0..max)
|-
|-
| <code>cat (</code> 报 "syntax error" || shell 将 "(" 视为特殊字符,且命令不完整 || 输入正确命令,如 <code>cat cur_state</code>
| /sys/kernel/photonicat-pm/movement_trigger || 抬腕唤醒触发标志 || 0/1(写入依驱动)
|}
|}


----
== 备注 ==
 
* 单位:电压 µV、电流 µA、功率 µW、温度 m°C、转速 RPM、能量 µWh。   
== 单位与规范 ==
* 写操作(风扇档位、背光)需 root;接口是否存在取决于驱动与机型。  
* 除非另有说明,数值使用微单位:电压 µV,电流 µA,功率 µW,能量 µWh。   
* 从一代迁移到二代:优先改为读取上述 sysfs 路径,原 socket 方案仅作为兼容保留。
* 状态与类型字符串遵循 Linux Power Supply / Thermal 子系统惯例。 
* 内部文件(如 <code>device</code>、<code>subsystem</code>、<code>uevent</code>)面向内核或系统集成,不建议作为上层业务接口。
 
== 建议 ==
* 若需要更友好的用户层接口,可在用户空间提供一个封装脚本或守护进程,将:
** 电池/充电器:统一换算并转成人类可读单位(V、A、W、Wh)。 
** 风扇:将档位映射为百分比或温控曲线(如基于 <code>/sys/class/thermal/thermal_zone*/temp</code>)。  
* 运维文档中可附上「温度—风扇档位」策略表与安全温度阈值。

2025年10月31日 (五) 17:32的最新版本

版本说明

  • 1代(截至 2025-08):通过 pcat-managersocket 方式获取电源/温控数据。
 参考开源项目: rockchip_rk3568_pcat_manager v1
  • 2代:功能集成进内核,统一经 sysfs / hwmon / power_supply / thermal 导出;并新增 电压/电流/电量(库仑计)检查
 —— 推荐上层应用直接读取本文所列 sysfs 路径。

电源/散热/背光 Sysfs 简明说明(OpenWrt / Debian)

适用于 OpenWrt 与 Debian。 包含:

  • /sys/class/power_supply/battery(电池)
  • /sys/class/power_supply/charger(充电器)
  • /sys/class/thermal/cooling_device0(风扇档位)
  • /sys/class/hwmon/hwmon2/temp1_input(主板温度,m°C)
  • /sys/class/hwmon/hwmon3/fan1_input(风扇转速,RPM)
  • /sys/class/thermal/thermal_zoneN/*(多热区)
  • /sys/class/backlight/backlight/brightness(背光)
  • /sys/kernel/photonicat-pm/movement_trigger(抬腕唤醒)
  • /sys/kernel/photonicat-pm/gs_x (加速度传感器X轴, 单位: 1/16384g)
  • /sys/kernel/photonicat-pm/gs_y (加速度传感器Y轴, 单位: 1/16384g)
  • /sys/kernel/photonicat-pm/gs_z (加速度传感器Z轴, 单位: 1/16384g)

快速示例

# 电池 / 充电器
cat /sys/class/power_supply/battery/capacity
cat /sys/class/power_supply/charger/online

# 风扇档位(0..max_state)
cat /sys/class/thermal/cooling_device0/cur_state
echo 5 > /sys/class/thermal/cooling_device0/cur_state   # 需 root

# 主板温度(m°C -> °C)  hwmon2: pcat_pm_hwmon_temp_mb
awk '{printf "Mobo: %.1f°C\n",$1/1000}' /sys/class/hwmon/hwmon2/temp1_input

# 风扇转速(RPM)       hwmon3: pcat_pm_hwmon_speed_fan
echo -n "Fan1: "; cat /sys/class/hwmon/hwmon3/fan1_input

# CPU 温度(thermal_zone0,m°C -> °C)
awk '{printf "CPU: %.1f°C\n",$1/1000}' /sys/class/thermal/thermal_zone0/temp

# 列出所有热区的类型与温度
for z in /sys/class/thermal/thermal_zone*; do \
  printf "%s " "$(cat "$z/type" 2>/dev/null)"; \
  awk '{printf "%.1f°C\n",$1/1000}' "$z/temp" 2>/dev/null; \
done

# 背光
cat /sys/class/backlight/backlight/brightness

关键路径与含义

路径 含义 单位/说明
/sys/class/hwmon/hwmon2/temp1_input 主板温度(pcat_pm_hwmon_temp_mb) m°C(除以1000得°C)
/sys/class/hwmon/hwmon3/fan1_input 风扇转速(pcat_pm_hwmon_speed_fan) RPM
/sys/class/thermal/cooling_device0/cur_state 风扇当前档位 0..max_state(写入需 root)
/sys/class/power_supply/battery/* 电池状态(电量/电压/电流/能量等;二代含库仑计相关)
/sys/class/power_supply/charger/* 充电器在线/电压/类型
/sys/class/thermal/thermal_zoneN/{type,temp} 多热区类型与温度(如 CPU/GPU/NPU/DDR/bigcore 等) m°C
/sys/class/backlight/backlight/{brightness,max_brightness} 背光等级/最大值 整数(0..max)
/sys/kernel/photonicat-pm/movement_trigger 抬腕唤醒触发标志 0/1(写入依驱动)

备注

  • 单位:电压 µV、电流 µA、功率 µW、温度 m°C、转速 RPM、能量 µWh。
  • 写操作(风扇档位、背光)需 root;接口是否存在取决于驱动与机型。
  • 从一代迁移到二代:优先改为读取上述 sysfs 路径,原 socket 方案仅作为兼容保留。