จะเกิดอะไรขึ้นเมื่อเสียบไดรฟ์ USB


21

การไหลของกิจกรรม USB จากพื้นที่เคอร์เนลไปยังพื้นที่ผู้ใช้คืออะไร ฉันได้รับป๊อปอัปบนเดสก์ท็อปของฉันเมื่อฉันเสียบ USB ไดรฟ์ - ลำดับเหตุการณ์ที่นำไปสู่การตรวจจับไดรฟ์ USB ใหม่เพื่อติดตั้งและแสดงป๊อปอัปนั้นคืออะไร

คำตอบ:


6

นี่คือudevระบบ Linux ที่ทันสมัย udevภูตเริ่มต้นด้วยระบบจะค้นหาใน/etc/udev/rules.dและ/lib/udev/rules.dและจะทำงานกฎการจับคู่สำหรับเหตุการณ์เคอร์เนล การใส่ไดรฟ์ USB จะทำให้เกิดเหตุการณ์udevจะค้นหากฎการจับคู่และดำเนินการ

กฎเหล่านั้นจะเป็นตัวกำหนดระบบของคุณ ในปีที่ผ่านมาudevมีการสื่อสารกับ HAL ซึ่งจะแจ้งเตือนการใช้งานผ่าน DBUS วิธีนี้เป็นวิธีที่ล้าสมัยในขณะนี้ในความโปรดปรานของแบบครบวงจรudevการแก้ปัญหาซึ่งผมคิดว่าจะเกี่ยวข้องกับการudevdสื่อสารผ่านทางdbusโดยตรงหรือผ่านทางdbus-ส่ง

คุณสามารถตรวจสอบกิจกรรมของทางudevudevadm monitor


2

ฉันยังไม่มั่นใจในสิ่งนี้เลยดังนั้นเอาเกลือเม็ดหนึ่งและวิจัยเพิ่มเติม

มันเริ่มต้นด้วยระบบย่อย kernel hotplug หลังจากติดตั้งอุปกรณ์แล้วจะเรียกสิ่งที่โปรแกรม userspace ตั้งค่าเพื่อจัดการเหตุการณ์ hotplug (ถ้าตั้งค่าไว้echo hotplug_handler > /proc/sys/kernel/hotplug) หรือส่งแพ็กเก็ตข้อมูลผ่านซ็อกเก็ต kobject_uevent netlink เมื่อเคอร์เนลเรียกทำงานตัวจัดการ hotplug มันจะตั้งค่าตัวแปรสภาพแวดล้อมบางอย่าง เมื่อเคอร์เนลส่งชุดข้อมูลจะมีคู่ key = value หากคุณต้องการคุณสามารถตั้งค่าสคริปต์ที่เพิ่งบันทึกสภาพแวดล้อมและตั้งค่าเป็นตัวจัดการ (ไม่ใช่ในระบบการผลิตของคุณ - การตั้งค่าการทดสอบ)

โดยปกติแล้ว udev จะตั้งค่าเป็นตัวจัดการและมันจะมีการตั้งค่ากฎหลายประการเกี่ยวกับวิธีการจัดการเหตุการณ์ จากตรงนั้นมันสามารถเปิดโปรแกรมอื่น ๆ ที่ทำสิ่งอื่น ๆ (เช่นข้อความปัญหา dbus) กฎของ udev เหล่านี้ขึ้นอยู่กับการกระจายความสนใจเป็นพิเศษ

มีข้อมูลจำนวนมากในชุดข้อความนี้ที่มีคนพยายามเขียนเอกสารบางอย่าง - หมายเหตุข้อความแรกไม่ถูกต้อง อ่านต่อไป


2
กาลครั้งหนึ่งสิ่งนี้มีความถูกต้อง แต่ไม่ใช่เป็นเวลานานในปัจจุบัน: udevฟัง uevents บนซ็อกเก็ต netlink (วิธีเดิมมีปัญหาเกี่ยวกับการทำให้เป็นอนุกรม / การเกิดขึ้นพร้อมกัน)
ephemient

เนื่องจากฉันใหม่สำหรับส่วนนี้ของ Linux ( udev , hotplug ) ฉันต้องการมีความคิดในทุกบรรทัดที่คุณอธิบายไว้ที่นี่ ดังนั้นคุณจะกรุณาอธิบายรายละเอียดเกี่ยวเริ่มต้นด้วยเคอร์เนล hotplug ระบบย่อย
Sen

@ephemient: ขอบคุณสำหรับการตอบกลับ คุณช่วยอธิบายลำดับเหตุการณ์ได้ไหม
Sen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.