这是一个非常简单的问题,但我认为它的简单性在于它有水色输出。
情况是我有兴趣更好地了解托管的文件/sys/class/power_supply
以及管理系统电池监控的文件。就我而言,我使用带有电池的笔记本电脑,其目录位于/sys/class/power_supply/BAT0
.另一方面我有AC适配器/sys/class/power_supply/AC0
据我了解,中的接口这里。
在电池接口内,我找到了各种文件:
/sys/class/power_supply/BAT0$ ls
alarm model_name
capacity power
capacity_level present
charge_full serial_number
charge_full_design status
charge_now subsystem
current_now technology
cycle_count type
device uevent
hwmon2 voltage_min_design
manufacturer voltage_now
我理解这个capacity
参考的是当前电池百分比。我也通过上下文理解capacity_level
:status
/sys/class/power_supply/BAT0$ cat capacity
81
/sys/class/power_supply/BAT0$ cat capacity_level
Normal
/sys/class/power_supply/BAT0$ cat status
Discharging
但是,我不理解其他文件,例如charge_full
、charge_full_design
、或:charge_now
current_now
cycle_count
/sys/class/power_supply/BAT0$ cat charge_full
900000
/sys/class/power_supply/BAT0$ cat charge_full_design
4100000
/sys/class/power_supply/BAT0$ cat charge_now
630000
/sys/class/power_supply/BAT0$ cat current_now
1191000
/sys/class/power_supply/BAT0$ cat cycle_count
0
在uevent
课程中,您可以查看之前的每个变量,并了解更多详细信息:
POWER_SUPPLY_NAME=BAT0
POWER_SUPPLY_TYPE=Battery
POWER_SUPPLY_STATUS=Discharging
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-ion
POWER_SUPPLY_CYCLE_COUNT=0
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11400000
POWER_SUPPLY_VOLTAGE_NOW=11759000
POWER_SUPPLY_CURRENT_NOW=1089000
POWER_SUPPLY_CHARGE_FULL_DESIGN=4100000
POWER_SUPPLY_CHARGE_FULL=900000
POWER_SUPPLY_CHARGE_NOW=675000
POWER_SUPPLY_CAPACITY=75
POWER_SUPPLY_CAPACITY_LEVEL=Normal
POWER_SUPPLY_MODEL_NAME=standard
POWER_SUPPLY_MANUFACTURER=OEM
POWER_SUPPLY_SERIAL_NUMBER=00001
清楚理解电池容量的百分比来自于POWER_SUPPLY_CHARGE_NOW
( /sys/class/power_supply/BAT0/charge_now
)对POWER_SUPPLY_CHARGE_FULL
( /sys/class/power_supply/BAT0/charge_full
)的计算:100*675000/900000=75。
但你如何理解这些价值观呢?从哪里来POWER_SUPPLY_CHARGE_NOW
?上述值的电压有什么干扰吗?
答案1
您可能想了解 Linux 电源设备类是如何定义的包括/linux/power_supply.h在Linux内核源代码中。那里描述的数据结构中的值按原样呈现在/sys/class/power_supply/*
:
/*
* All voltages, currents, charges, energies, time and temperatures in uV,
* µA, µAh, µWh, seconds and tenths of degree Celsius unless otherwise
* stated. It's driver's job to convert its raw values to units in which
* this class operates.
*/
/*
* For systems where the charger determines the maximum battery capacity
* the min and max fields should be used to present these values to user
* space. Unused/unknown fields will not appear in sysfs.
*/
所以所有的charge_*
值都以微安时为单位,并且current_now
单位是微安。
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11400000
POWER_SUPPLY_VOLTAGE_NOW=11759000
电池的最小设计电压(= 切勿放电至低于此电压)为 11400000 微伏 = 11.4 伏。
当前电压水平为 11.759 伏。
POWER_SUPPLY_CURRENT_NOW=1089000
电池现在提供 1.089 安培的电流。
POWER_SUPPLY_CHARGE_FULL_DESIGN=4100000
POWER_SUPPLY_CHARGE_FULL=900000
POWER_SUPPLY_CHARGE_NOW=675000
当它是新的时,该电池声称充满电的容量为 4.10 安培小时,但此后它已经退化,因此目前充满电的容量仅为 0.9 安培小时。目前,它还剩 0.675 安培小时的电量。
因此,作为一个简单的估计,根据您现在从电池获取的电流,您将拥有 0.675 Ah / 1.089 A = 大约 0.62 小时,或大约剩余 37 分钟的电量。
该power_supply.h
文件还有许多其他信息丰富的注释,直接描述了各种值的含义。您可能想阅读这些评论。