การไหลของกิจกรรม 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-ส่ง
คุณสามารถตรวจสอบกิจกรรมของทางudevudevadm monitor
ฉันยังไม่มั่นใจในสิ่งนี้เลยดังนั้นเอาเกลือเม็ดหนึ่งและวิจัยเพิ่มเติม
มันเริ่มต้นด้วยระบบย่อย kernel hotplug หลังจากติดตั้งอุปกรณ์แล้วจะเรียกสิ่งที่โปรแกรม userspace ตั้งค่าเพื่อจัดการเหตุการณ์ hotplug (ถ้าตั้งค่าไว้echo hotplug_handler > /proc/sys/kernel/hotplug) หรือส่งแพ็กเก็ตข้อมูลผ่านซ็อกเก็ต kobject_uevent netlink เมื่อเคอร์เนลเรียกทำงานตัวจัดการ hotplug มันจะตั้งค่าตัวแปรสภาพแวดล้อมบางอย่าง เมื่อเคอร์เนลส่งชุดข้อมูลจะมีคู่ key = value หากคุณต้องการคุณสามารถตั้งค่าสคริปต์ที่เพิ่งบันทึกสภาพแวดล้อมและตั้งค่าเป็นตัวจัดการ (ไม่ใช่ในระบบการผลิตของคุณ - การตั้งค่าการทดสอบ)
โดยปกติแล้ว udev จะตั้งค่าเป็นตัวจัดการและมันจะมีการตั้งค่ากฎหลายประการเกี่ยวกับวิธีการจัดการเหตุการณ์ จากตรงนั้นมันสามารถเปิดโปรแกรมอื่น ๆ ที่ทำสิ่งอื่น ๆ (เช่นข้อความปัญหา dbus) กฎของ udev เหล่านี้ขึ้นอยู่กับการกระจายความสนใจเป็นพิเศษ
มีข้อมูลจำนวนมากในชุดข้อความนี้ที่มีคนพยายามเขียนเอกสารบางอย่าง - หมายเหตุข้อความแรกไม่ถูกต้อง อ่านต่อไป
udevฟัง uevents บนซ็อกเก็ต netlink (วิธีเดิมมีปัญหาเกี่ยวกับการทำให้เป็นอนุกรม / การเกิดขึ้นพร้อมกัน)