为什么 upower 输出与 /sys/class/power_supply 内容不同?

为什么 upower 输出与 /sys/class/power_supply 内容不同?

我正在调试新安装的电池的剩余电池百分比报告不准确的情况。

关于我上一个问题的答案,各种工具直接从电池本身查询电池信息。然而,电池电压的输出在/sys/class/power_supply/BAT1/voltage_now和之间有所不同upower

# upower
    voltage:             10.974 V

# /sys/...
10500000

此外,upower每 2 分钟更新一次统计数据,似乎/sys/class/power_supply/BAT1/voltage_now是实时更新的。这也表明这两个数据源的来源可能不同。

那么,这两个数据源的数据来源是什么?

答案1

然而,电池电压的输出在/sys/class/power_supply/BAT1/voltage_now和之间有所不同upower

这是你的问题。

此外,upower每2分钟更新一次统计数据

在这里你自己回答了。只是更新时间而已。如果您在更新时间cat voltage_now运行upower,您将得到相同的结果。

$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 |egrep 'updated|voltage'; cat /sys/class/power_supply/BAT1/voltage_now
  updated:              Mon 17 Feb 2020 07:07:31 AM CAT (0 seconds ago)
    voltage:             17.156 V
17156000

请注意,当更新时间是0 秒前,其值是相同的。多次尝试该命令,当时间不同时,您会看到更大的差异120 秒前

如果您想upower立即为您提供更新的值,您可以使用以下命令强制刷新

dbus-send --print-reply --system --dest=org.freedesktop.UPower /org/freedesktop/UPower/devices/battery_BAT1  org.freedesktop.UPower.Device.Refresh; upower -i /org/freedesktop/UPower/devices/battery_BAT1 |egrep 'updated|voltage'

那么,这两个数据源的数据来源是什么?

的数据源upowerupowerd.upowerd将从中读取数据/sys/.../BAT1/*并将历史记录存储在中/var/lib/upower/。当upower在配置的轮询时间之前发送请求时Upowerupowerd将回复limiting data to last 120 seconds并返回历史值。

相关内容