Udev

確定筆記型電腦電源的 devtype 和子系統

  • September 7, 2015

我正在 Ubuntu 機器上編寫一個小型 C 程序,libudev用於監視電源的變化。在這個階段,我只想成功檢測交流適配器何時處於活動狀態以及電池何時處於活動狀態。我正在調整此處找到的程式碼以供使用libudevhttp ://www.signal11.us/oss/udev/

連結的程式碼範例正在使用 USB 設備,而有問題的功能 ( udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_device");) 是我目前正在嘗試更改的功能。從外殼執行udevadm info /sys/class/power_supply/BAT0(電池)後,我得到以下輸出:

P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:18/PNP0C09:00/PNP0C0A:00/power_supply/BAT0
E: DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:18/PNP0C09:00/PNP0C0A:00/power_supply/BAT0
E: POWER_SUPPLY_CAPACITY=61
E: POWER_SUPPLY_CAPACITY_LEVEL=Normal
E: POWER_SUPPLY_CHARGE_FULL=3850000
E: POWER_SUPPLY_CHARGE_FULL_DESIGN=3950000
E: POWER_SUPPLY_CHARGE_NOW=2365000
E: POWER_SUPPLY_CURRENT_NOW=916000
E: POWER_SUPPLY_CYCLE_COUNT=0
E: POWER_SUPPLY_MANUFACTURER=LGC-LGC3.95
E: POWER_SUPPLY_MODEL_NAME=DELL 92NCT556
E: POWER_SUPPLY_NAME=BAT0
E: POWER_SUPPLY_PRESENT=1
E: POWER_SUPPLY_SERIAL_NUMBER= 5359
E: POWER_SUPPLY_STATUS=Discharging
E: POWER_SUPPLY_TECHNOLOGY=Li-ion
E: POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11100000
E: POWER_SUPPLY_VOLTAGE_NOW=11339000
E: SUBSYSTEM=power_supply

所以我可以說子系統的參數應該是“power_supply”,但我不確定應該為“devtype”添加什麼。我試過“BAT0”和“power”無濟於事。

程式碼吐出:

Device Node Path: (null)
Unable to find parent power supply device.

(!dev)如果在嘗試dev使用我上面列出的函式進行設置後評估為 true ,它將執行此操作。

有人可以為我指出正確的方向來解決這個問題嗎?引用連結的程式碼會有所幫助,但我發現這個庫的文件是……有限的。

在這一subsystem行中列出:

E: SUBSYSTEM=power_supply

但是,電池和 AC 適配器似乎沒有 a devtype,因此將aNULL作為參數傳遞給函式是完全可以接受的devtype

在這種情況下,函式呼叫如下所示:

udev_device_get_parent_with_subsystem_devtype(dev, "power_supply", NULL);

如果啟用了這些udev_monitor*功能,則power_supply使用以下方法可能更容易過濾事件:

udev_monitor_filter_add_match_subsystem_devtype(mon, "power_supply", NULL);

引用自:https://unix.stackexchange.com/questions/228054