Trường hợp modprobe tải trình điều khiển mà udev yêu cầu?


7

Chúng ta hãy lấy một kịch bản trong đó một hệ thống Linux đã khởi động và đang chạy chính xác. Một người dùng đi cùng và cắm một thiết bị bộ nhớ USB.

Chuỗi các sự kiện xảy ra được minh họa trên sơ đồ dưới đây:

nhập mô tả hình ảnh ở đây

Trường hợp modprobe tải trình điều khiển của nó vào? Là trình điều khiển cho thiết bị được yêu cầu được tìm thấy /sys/bus/driverssau khi modprobe tải nó hoặc trước đó?

Điều tôi đang cố gắng thiết lập ở đây là mối quan hệ giữa các mục trong /sys/và các sự kiện xảy ra trên biểu đồ trên.

Câu trả lời:


6

Thông báo uevent chứa thông tin về thiết bị ( ví dụ ). Thông tin này chứa thông tin nhận dạng nhà cung cấp và kiểu máy đã đăng ký cho các thiết bị được kết nối với xe buýt như PCI và USB. Udev phân tích các sự kiện này và xây dựng một tên mô-đun dạng cố định mà nó chuyển đến modprobe. modprobetìm bên dưới /lib/modules/VERSIONmột tệp được gọi depmod.aliaslà kernel được cài đặt và ánh xạ các tên mô-đun dạng cố định thành tên tệp mô-đun trình điều khiển thực tế. Xem Các mô-đun trình điều khiển được tải và tải tự động? để biết thêm chi tiết về quy trình - câu trả lời đó mô tả những ngày trước khi hạt nhân gọi modprobetrực tiếp, nhưng cách thức modprobevà bí danh mô-đun làm việc đã không thay đổi.

Xem thêm Bài thuyết trình của Michael Opdenacker Hotplugging với udev , có nhiều ví dụ và mô tả các khía cạnh khác của quản lý thiết bị với udev và Linux từ hướng dẫn đầu có phần về cách xác định tên mô-đun dạng cố định.

modprobetải một mô-đun bằng cách gọi cuộc gọi init_modulehệ thống. Nó không tương tác với sysfs theo bất kỳ cách nào. Khi mô-đun được tải, kernel tạo một mục nhập cho nó /sys/module. Bất kỳ mục nào xuất hiện ở nơi khác trong sysfs đều tùy thuộc vào mã trong mô-đun (ví dụ: mô-đun có trình điều khiển cho một loại thiết bị USB sẽ gọi một số mã hỗ trợ USB chung có thêm mục nhập bên dưới /sys/bus/usb/drivers).


Cảm ơn bạn đã trả lời nhưng nó không trả lời câu hỏi ban đầu của tôi. Trước khi hỏi nó, tôi thực sự đã xem bài thuyết trình của Michaels và các liên kết khác mà bạn cung cấp. Tôi cũng đã đọc bài báo của Patricks Mochels về sysfs. Tôi đã phải bỏ lỡ điều gì đó hoặc nó không được mô tả trong bất kỳ nguồn nào mà tôi đã đi qua cho đến nay. Khi modprobe tải động mô-đun hạt nhân, mô-đun đó (trình điều khiển) sau đó xuất hiện tại /sys/bus/driversthư mục? Ngoài ra modprobe có liên lạc trở lại với kernel thông qua socket netlink không? Nó có liên lạc trở lại sysfs không?
Lập trình viên

2
Các câu hỏi trong bình luận của bạn không phải là những gì bạn đã hỏi trong câu hỏi ban đầu của bạn! Nhưng tôi đã chỉnh sửa câu trả lời của mình để giải quyết chúng. Không, modprobe không giao tiếp qua netlink hoặc sysfs (cả hai tính năng đều trẻ hơn tải mô-đun), nó gọi cuộc gọi init_modulehệ thống.
Gilles 'SO- ngừng trở nên xấu xa'

Cảm ơn bạn bây giờ tất cả đã rõ ràng! Ngoài ra - vâng, tôi đã có hai câu hỏi liên quan khác trong phần bình luận trước của tôi trên phần đầu của câu hỏi ban đầu vì bạn dường như khá hiểu biết nên cảm ơn vì đã trả lời chúng. Bây giờ câu hỏi của tôi đã được trả lời, tôi sẽ có thể ngủ yên, ít nhất là vào một ngày khác ...
Lập trình viên Shady
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.