私のカーネルドライバはバッテリプロパティ(get_property、set_property)にアクセスする必要があります。
Q:バッテリーの電源構造を見つける方法は?
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
ドライバで繰り返されます。コールバック関数がゼロを返すたびに、クラスで使用可能な次のデバイスを確認します。