การไหลของกิจกรรม USB จากพื้นที่เคอร์เนลไปยังพื้นที่ผู้ใช้คืออะไร ฉันได้รับป๊อปอัปบนเดสก์ท็อปของฉันเมื่อฉันเสียบ USB ไดรฟ์ - ลำดับเหตุการณ์ที่นำไปสู่การตรวจจับไดรฟ์ USB ใหม่เพื่อติดตั้งและแสดงป๊อปอัปนั้นคืออะไร
การไหลของกิจกรรม USB จากพื้นที่เคอร์เนลไปยังพื้นที่ผู้ใช้คืออะไร ฉันได้รับป๊อปอัปบนเดสก์ท็อปของฉันเมื่อฉันเสียบ USB ไดรฟ์ - ลำดับเหตุการณ์ที่นำไปสู่การตรวจจับไดรฟ์ USB ใหม่เพื่อติดตั้งและแสดงป๊อปอัปนั้นคืออะไร
คำตอบ:
นี่คือudev
ระบบ Linux ที่ทันสมัย udev
ภูตเริ่มต้นด้วยระบบจะค้นหาใน/etc/udev/rules.d
และ/lib/udev/rules.d
และจะทำงานกฎการจับคู่สำหรับเหตุการณ์เคอร์เนล การใส่ไดรฟ์ USB จะทำให้เกิดเหตุการณ์udev
จะค้นหากฎการจับคู่และดำเนินการ
กฎเหล่านั้นจะเป็นตัวกำหนดระบบของคุณ ในปีที่ผ่านมาudev
มีการสื่อสารกับ HAL ซึ่งจะแจ้งเตือนการใช้งานผ่าน DBUS วิธีนี้เป็นวิธีที่ล้าสมัยในขณะนี้ในความโปรดปรานของแบบครบวงจรudev
การแก้ปัญหาซึ่งผมคิดว่าจะเกี่ยวข้องกับการudevd
สื่อสารผ่านทางdbus
โดยตรงหรือผ่านทางdbus-ส่ง
คุณสามารถตรวจสอบกิจกรรมของทางudev
udevadm monitor
ฉันยังไม่มั่นใจในสิ่งนี้เลยดังนั้นเอาเกลือเม็ดหนึ่งและวิจัยเพิ่มเติม
มันเริ่มต้นด้วยระบบย่อย kernel hotplug หลังจากติดตั้งอุปกรณ์แล้วจะเรียกสิ่งที่โปรแกรม userspace ตั้งค่าเพื่อจัดการเหตุการณ์ hotplug (ถ้าตั้งค่าไว้echo hotplug_handler > /proc/sys/kernel/hotplug
) หรือส่งแพ็กเก็ตข้อมูลผ่านซ็อกเก็ต kobject_uevent netlink เมื่อเคอร์เนลเรียกทำงานตัวจัดการ hotplug มันจะตั้งค่าตัวแปรสภาพแวดล้อมบางอย่าง เมื่อเคอร์เนลส่งชุดข้อมูลจะมีคู่ key = value หากคุณต้องการคุณสามารถตั้งค่าสคริปต์ที่เพิ่งบันทึกสภาพแวดล้อมและตั้งค่าเป็นตัวจัดการ (ไม่ใช่ในระบบการผลิตของคุณ - การตั้งค่าการทดสอบ)
โดยปกติแล้ว udev จะตั้งค่าเป็นตัวจัดการและมันจะมีการตั้งค่ากฎหลายประการเกี่ยวกับวิธีการจัดการเหตุการณ์ จากตรงนั้นมันสามารถเปิดโปรแกรมอื่น ๆ ที่ทำสิ่งอื่น ๆ (เช่นข้อความปัญหา dbus) กฎของ udev เหล่านี้ขึ้นอยู่กับการกระจายความสนใจเป็นพิเศษ
มีข้อมูลจำนวนมากในชุดข้อความนี้ที่มีคนพยายามเขียนเอกสารบางอย่าง - หมายเหตุข้อความแรกไม่ถูกต้อง อ่านต่อไป
udev
ฟัง uevents บนซ็อกเก็ต netlink (วิธีเดิมมีปัญหาเกี่ยวกับการทำให้เป็นอนุกรม / การเกิดขึ้นพร้อมกัน)