我正在尝试获取 Linux 内核模块中的电池电量(该模块是通过 modprobe 插入的)。理想情况下,我想使用内核 API 调用来获取电池信息。我在网上搜索了解决方案,并且我还探索了 Linux 内核源代码和 Michael Meskes 的程序“acpi”的源代码以获取想法。
这些是我认为可以使用的一些技术:
/proc/acpi/battery/BAT0/state
和 /proc/acpi/battery/BAT0/info
/sys/class/power_supply/BAT0/charge_now
和 charge_full
不涉及解析。 acpi_battery_get_status
和 acpi_battery_get_info
acpi_battery_read
在它的正上方有一条评论说“驱动程序界面”。如果有人知道如何使用它,这可能是另一种方式。 我认为在内核模块中读取文件可能是个坏主意,但我不确定这些文件如何映射到内核函数调用,所以可能没问题。
那么,你们能给我一些建议/建议吗?
编辑:我在下面的答案中包含了我的解决方案。
最佳答案
我找到了适合我的解决方案。首先确保#include
假设您知道电池的名称,此代码给出了如何获取当前电池容量的示例。char name[]= "BAT0";
int result = 0;
struct power_supply *psy = power_supply_get_by_name(name);
union power_supply_propval chargenow, chargefull;
result = psy->get_property(psy,POWER_SUPPLY_PROP_CHARGE_NOW,&chargenow);
if(!result) {
printk(KERN_INFO "The charge level is %d\n",chargenow.intval);
}
result = psy->get_property(psy,POWER_SUPPLY_PROP_CHARGE_FULL,&chargefull);
if(!result) {
printk(KERN_INFO "The charge level is %d\n",chargefull.intval);
}
关于linux-kernel - 如何在 Linux 内核模块中获取电池电量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4858657/