udev - เปลี่ยนกิจกรรมจาก udev_device_get_action


0

ฉันกำลังตรวจสอบเหตุการณ์ของอุปกรณ์ทั้งหมดที่เชื่อมต่อกับโฮสต์ ลินุกซ์มีภูต udev ซึ่งฟังทุกเหตุการณ์เฉพาะอุปกรณ์เช่นออนไลน์ออฟไลน์เพิ่มลบและการเปลี่ยนแปลง

ฉันใช้ฟังก์ชั่นที่จัดทำโดย linux udev_device_get_actionซึ่งใช้เพื่อรับเหตุการณ์ / การกระทำบนอุปกรณ์นั้น

ในเครื่องของฉันฉันได้รับเหตุการณ์การเปลี่ยนแปลงที่ส่งคืนจากฟังก์ชันนี้อย่างต่อเนื่องในตัวแปรของรหัสของฉัน [มันจะส่งกลับตัวชี้ตัวละคร]

ฉันตรวจสอบโค้ด linux สำหรับฟังก์ชั่นudev_device_get_actionมันแค่คืนค่าการดำเนินการจากโครงสร้างอุปกรณ์ udev

UDEV_EXPORT const char *udev_device_get_action(struct udev_device *udev_device)
{
        if (udev_device == NULL)
                return NULL;
        return udev_device->action;
}

ดังนั้นฉันจะรู้ได้อย่างไรว่าเหตุการณ์การเปลี่ยนแปลงเหล่านั้นมาจากไหน?

คำตอบ:


1

uevents ถูกสร้างโดยเคอร์เนลเอง (นั่นคือโดยไดรเวอร์เคอร์เนล)

udev ได้รับพวกเขาผ่าน  netlink (7)โดยใช้ตระกูล NETLINK_KOBJECT_UEVENT กลุ่มที่ 1 จากนั้นจะเพิ่มฟิลด์พิเศษต่าง ๆ จากกฎ & hwdb และเผยแพร่ยูเวนต์เพิ่มเติมไปยังกลุ่ม kobject-uevent 2 ในที่สุดเมื่อ libudev ได้รับพวกเขา

เป็นไปได้ที่จะทริกเกอร์ uevents ด้วยตนเอง (เช่นโดยการเขียน "เพิ่ม" หรือ "เปลี่ยน" ไปยัง/sys/…/ueventไฟล์ของอุปกรณ์ที่กำหนด) แต่โดยปกติจะไม่ได้ทำยกเว้นเมื่อใช้ "udevadm ทริกเกอร์"


แต่อะไรคือความหมายของ CHANGE_EVENTS ที่ฉันได้รับมากมายจาก udevd .. ? ในไดร์เวอร์ของฉันฉันได้ดูแลเพิ่ม, ลบ, ออนไลน์, กิจกรรมออฟไลน์ของ UDEV สำหรับอุปกรณ์ แต่ฉันไม่ได้รับวัตถุประสงค์มากกว่าพฤติกรรมหลังฟัง CHANGE_EVENTS อะไรคือสาเหตุของสิ่งนี้และสิ่งที่จะนำไปใช้กับบล็อกไดรฟ์เวอร์?
amitam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.