Я пытаюсь получить уровень заряда батареи внутри модуля ядра Linux (модуль вставляется через modprobe). В идеале я хотел бы использовать вызов API ядра для получения информации о батарее. Я искал в Интернете решения, а также исследовал исходный код ядра Linux и источник программы «acpi» Майкла Мескеса в поисках идей.
Вот некоторые из техник, которые, как мне кажется, я могу использовать:
- Прочтите и проанализируйте
/proc/acpi/battery/BAT0/state
и/proc/acpi/battery/BAT0/info
- Читайте из
/sys/class/power_supply/BAT0/charge_now
иcharge_full
без анализа. - Я мог бы попробовать использовать вызовы из исходных кодов ядра Linux / acpi / battery.c, если бы смог выяснить, как открыть интерфейс. Наверное, мне понадобятся методы
acpi_battery_get_status
иacpi_battery_get_info
- Я также заметил, что внутри drivers / acpi / sbs.c есть метод
acpi_battery_read
, а прямо над ним есть комментарий «Интерфейс драйвера». Это может быть другой способ, если кто-нибудь знает, как это использовать.
Я предполагаю, что, вероятно, читать файлы внутри модуля ядра - плохая идея, но я не совсем уверен, как эти файлы сопоставляются с вызовами функций ядра, так что это может быть нормально.
Итак, вы можете дать мне несколько советов / рекомендаций?
Изменить: я включил свое решение в ответ ниже.