내 커널 드라이버는 배터리 속성(get_property, set_property)에 액세스해야 합니다.
질문: 배터리의 전원 공급 구조를 찾는 방법은 무엇입니까?
power_supply_get_by_name
방금 배터리 이름이 다를 수 있다는 것을 알았습니다 . power_supply 유형을 확인해야 하는데 여기서 막히게 됩니다.
유형을 직접 확인 get_by_type
하거나 직접 확인하거나 power_supply_get_by_name에 전달하면 문제가 없습니다.get_all_power_supplies
get_power_supply_names
커널에서 파일에 액세스하지 않으려면 type="battery" power_supply를 찾는 더 좋은 방법은 무엇입니까?
공급품이 변경되거나 사라지거나 다시 나타날 수 있으므로 매번 공급품을 다시 받아야 한다고 생각합니까? 어떤 경우에는 운전자가 몇 초마다 전원에 접근할 수 있으므로 배터리를 찾는 데 오랜 시간을 소비하지 않는 것이 가장 좋습니다.
답변1
파티가 1년이나 늦었습니다. :) 이것이 Cycle Power 클래스의 모든 객체 뒤에 있는 기본 아이디어입니다.
#include <linux/power_supply.h>
static int power_supply_printer(struct device *dev, const void *data)
{
struct power_supply *psy = dev_get_drvdata(dev);
(void)data;
printk(KERN_INF "power-supply = %s\n", psy->desc->name);
/* Return 1 if found, 0 if this is not valid. */
return 0;
}
static __init int my_driver_init(void)
{
struct device *dev;
dev = class_find_device(power_supply_class, NULL, NULL /* data*/, power_supply_printer);
...
}
이 기능은 모든 power_suppy_class
드라이버를 통해 반복됩니다. 콜백 함수가 0을 반환할 때마다 클래스에서 사용 가능한 다음 장치를 확인합니다.