负责/ sys / class / power_supply / BAT0的内核模块是什么?

时间:2019-05-20 00:28:59

标签: linux-kernel sysfs

/sys/class/leds/使LED闪烁后,我现在试图了解如何使用linux kernel power supply attributes,特别是CHARGE_CONTROL_LIMIT控制计算机中的电池。但是,/sys/class/power_supply/BAT0/中没有这样的属性。

我如何回答这个问题:

据我了解,man 5 sysfssysfs(通常安装为sys)是用户空间和内核空间之间的接口。

假设:

  1. 存在一个内核模块,用于创建和更新/sys/class/power_supply/BAT0/

  2. 的内容
  3. 该内核模块可以,但似乎未实现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/的内核模块

ArchWikithis 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

1 个答案:

答案 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等)。

是否可以限制充电限额等取决于所讨论的模块。祝你好运。