Điều gì xảy ra khi ổ USB được cắm?


21

Luồng sự kiện USB từ không gian kernel đến không gian người dùng là gì? Tôi nhận được một cửa sổ bật lên trên máy tính để bàn của mình khi tôi cắm vào ổ USB - chuỗi sự kiện dẫn đến việc phát hiện ổ USB mới để gắn nó và hiển thị cửa sổ bật lên đó là gì?

Câu trả lời:


6

Điều này được trao bởi udevcác hệ thống Linux hiện đại. Các udevdaemon bắt đầu với hệ thống sẽ tìm kiếm trong /etc/udev/rules.d/lib/udev/rules.dvà sẽ chạy quy tắc phù hợp cho các sự kiện hạt nhân. Chèn một ổ đĩa USB sẽ kích hoạt một sự kiện, udevsẽ tìm kiếm một quy tắc phù hợp và sẽ thực hiện nó.

Các quy tắc sẽ xác định những gì hệ thống của bạn làm. Trong những năm gần đây, udevđã liên lạc với HAL, nơi sẽ cảnh báo các ứng dụng thông qua DBUS. Cách tiếp cận này hiện đã lỗi thời trong một udevgiải pháp hợp nhất , mà tôi cho rằng sẽ liên quan đến việc udevdgiao dbustiếp trực tiếp hoặc qua dbus-send .

Bạn có thể theo dõi các hoạt động của udevthông qua udevadm monitor.


2

Tôi chưa hoàn toàn tự tin với điều này, vì vậy hãy dùng nó với một hạt muối và nghiên cứu thêm.

Nó bắt đầu với hệ thống con kernel hotplug. Sau khi thiết bị được thiết lập, nó sẽ gọi bất kỳ chương trình không gian người dùng nào được thiết lập để xử lý các sự kiện cắm nóng (nếu được đặt bởi echo hotplug_handler > /proc/sys/kernel/hotplug) hoặc gửi gói dữ liệu qua ổ cắm netlink kobject_uevent. Khi kernel khởi chạy trình xử lý hotplug, nó sẽ thiết lập một số biến môi trường. Khi kernel gửi một datapquet, nó bao gồm các cặp key = value. Nếu bạn muốn, bạn có thể thiết lập một tập lệnh chỉ ghi nhật ký môi trường và thiết lập nó làm trình xử lý (tất nhiên không phải trên hệ thống sản xuất của bạn - một thiết lập thử nghiệm).

Thông thường, udev được thiết lập là trình xử lý và nó sẽ có một số quy tắc thiết lập về cách xử lý các sự kiện. Từ đó, nó có thể khởi chạy các chương trình khác làm những việc khác (như phát hành tin nhắn dbus). Các quy tắc udev này phụ thuộc rất nhiều vào phân phối lợi ích cụ thể.

Có rất nhiều thông tin trong chủ đề này , nơi ai đó đang cố gắng viết một số tài liệu - lưu ý tin nhắn đầu tiên không chính xác; hãy đọc tiếp.


2
udevNgày xưa điều này là chính xác, nhưng không lâu lắm: bây giờ lắng nghe những điều cần thiết trên một ổ cắm netlink. (Cách cũ có vấn đề nối tiếp / đồng thời.)
ephemient

Vì tôi chưa quen với phần này của Linux ( udev , hotplug ), tôi muốn có ý tưởng về mọi dòng bạn đã mô tả ở đây. Vì vậy, bạn có thể vui lòng giải thích khi bắt đầu với hệ thống con kernel hotplug .
Sen

@ephemient: Cảm ơn đã trả lời. Bạn có thể vui lòng giải thích chuỗi các sự kiện.
Sen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.