用/sys/class/leds/
使LED闪烁后,我现在试图了解如何使用linux kernel power supply attributes,特别是CHARGE_CONTROL_LIMIT
控制计算机中的电池。但是,/sys/class/power_supply/BAT0/
中没有这样的属性。
据我了解,man 5 sysfs
,sysfs
(通常安装为sys
)是用户空间和内核空间之间的接口。
存在一个内核模块,用于创建和更新/sys/class/power_supply/BAT0/
该内核模块可以,但似乎未实现CHARGE_CONTROL_LIMIT
。它确实实现了其他属性:
cat /sys/class/power_supply/BAT0/charge_full
2884000
cat /sys/class/power_supply/BAT0/charge_now
2884000
cat /sys/class/power_supply/BAT0/cycle_count
0 <--- this seems broken
cat /sys/class/power_supply/BAT0/capacity
100
为了检验这个假设,我寻求了负责任的内核模块的文档/来源。
/sys/class/power_supply/BAT0/
的内核模块 ArchWiki和this page演示了如何在给定modalias
的情况下查找内核模块。
cat /sys/class/power_supply/BAT0/device/modalias
acpi:PNP0C0A:
sudo grep -E 'PNP0C0A' /lib/modules/*/modules.alias
# nothing is found
我看到电池硬件的类型为acpi
,但是在modalias
中没有与其modules.alias
完全匹配的电池。 (我尝试了几种通配符组合来找到它,无济于事。)
@ 0andriy建议检查/drivers/platform/x86
,我这样做如下:
find /lib/modules/5.0.0-15-generic/kernel -type f -name '*.ko' | xargs modinfo | grep -E 'alias.*PNP0C0A'
# Nothing
# Trying another query, to check that the query works:
find /lib/modules/5.0.0-15-generic/kernel/drivers -type f -name '*.ko' | xargs modinfo | grep -E 'alias.*TOS'
alias: acpi*:TOS1900:*
alias: acpi*:TOS6208:*
alias: acpi*:TOS6207:*
alias: acpi*:TOS6200:*
这是具有最新内核的HP笔记本电脑
uname -a
Linux lithium 5.0.0-15-generic #16-Ubuntu SMP Mon May 6 17:41:33 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
答案 0 :(得分:1)
问题在于电源可能来自已经静态链接到内核的模块(在lsmod中不可见或在/ lib / modules中),而不是作为独立模块使用。所以:
A)首先检查/ sys / module。这是一个目录,其中包含动态链接(即lsmod可见)和静态链接的条目。检查是否在此处看到一个(可能是小写的)pnp *条目。
B)如果这样做,并且不在lsmod中,则需要内核源。这些可以从HP获得,但是您可以从库存来源(http://kernel.org)开始,因为很有可能在主线内核中。
C)那些/ sys条目是通过调用“ power_supply_register”的代码创建的。在所有模块上尝试使用蛮力grep,以查看匹配的模块。您也可以在Linux源代码树上执行此操作(类似于find。-type f | xargs grep power_supply_register或grep -R等)。
是否可以限制充电限额等取决于所讨论的模块。祝你好运。