2011-12-12 27 views
12

Tôi muốn biết điều này cho lần khởi động đầu tiên và khởi động tiếp theo.Hạt nhân Linux biết trình điều khiển nào cần tải khi khởi động?

Tôi đang biên dịch hạt nhân của riêng mình và muốn nó càng gọn gàng càng tốt. Tôi muốn xây dựng các tập tin .config bằng tay (chủ yếu là một kinh nghiệm học tập), vì vậy tôi cần phải biết tất cả mọi thứ có thể được loại trừ. Tôi biết một giải pháp có thể là nhìn vào danh sách distro hiện tại của tôi của các trình điều khiển nạp. Tuy nhiên, tôi tò mò về cách phát hiện của tôi distro những gì các trình điều khiển để tải ban đầu.

TIA.

+3

Đoán đây sẽ là câu hỏi hay hơn cho http://unix.stackexchange.com. – ziesemer

+0

http://doc.opensuse.org/documentation/html/openSUSE_113/opensuse-reference/cha.udev.html – firo

Trả lời

3

Greg Kroah đưa ra một ví dụ tuyệt vời về cách tìm chính xác trình điều khiển nào bạn cần cho hạt nhân. Vui lòng Greg cho cuốn sách của ông đi miễn phí trực tuyến

http://files.kroah.com/lkn/

Một trích dẫn từ cuốn sách của Greg

I'm especially proud of the chapter on how to figure out how to configure 
a custom kernel based on the hardware running on your machine. This is an 
essential task for anyone wanting to wring out the best possible speed and 
control of your hardware. 
+0

Cảm ơn câu trả lời của bạn Adrian. Tôi đang thực sự làm việc thông qua chương 7 của cuốn sách ngay bây giờ. Greg Kroah mô tả chi tiết quá trình khám phá những mô-đun nào hiện đang được nạp bởi hạt nhân đang chạy - điều này rất có giá trị. Những gì tôi tò mò về là làm thế nào mà các hệ điều hành biết để tải các mô-đun ở nơi đầu tiên? – izzy

+0

ASAIK Lực lượng vũ phu nói chung - nó cố gắng tải nó - nếu nó không hoạt động phần cứng có lẽ không có. –

12

Làm thế nào để Linux kernel biết driver nào để nạp lúc khởi động?

Hạt nhân tạo sự kiện cho thiết bị, ví dụ: bus PCI khi chúng được cắm (hoặc nóng hoặc lạnh; các sự kiện được xếp hàng đợi cho đến khi không gian người dùng chạy AFAIR). udev sẽ nhận các sự kiện này và thực hiện các cuộc gọi modprobe bao gồm PID/VID (ID sản phẩm/nhà cung cấp) của (các) thiết bị; đây thường là một chuỗi với một số * trong đó. modprobe sau đó sẽ tính toán giao điểm của tập được biểu thị bằng ký tự đại diện yêu cầu tải của udev và tập hợp các bí danh của các mô-đun hạt nhân (bản thân chúng có thể là các ký tự đại diện).

Vì USB/Firewire/v.v. bộ điều khiển thường được gắn vào bus PCI, đó là cách trình điều khiển HCI của bạn được tải. Đó là cách mọi thứ trở lại; tải sau đó được thực hiện với USB/Firewire PID/VIDs của khóa học.

Mô-đun giao thức mạng (ví dụ: ipv6) tuy nhiên không được xử lý thông qua udev; thay vào đó, khi một chương trình gọi số socket(AF_INET6, ...) hạt nhân gọi trực tiếp modprobe (chính xác hơn là: /proc/sys/kernel/modprobe) với một bí danh không có ký tự đại diện, net-pf-10 trong trường hợp IPv6, vì AF_INET6 xảy ra có giá trị 10. modprobe sau đó tải ipv6.ko, vì đó là những gì có bí danh net-pf-10.

Tương tự đối với hệ thống tệp, cố gắng mount -t foo cũng sẽ làm cho hạt nhân cũng gọi modprobe (lần nữa, thông qua ____call_usermodehelper), lần này với số foo làm đối số.

Truy cập các nút thiết bị (ví dụ: /dev/loop0, miễn là nó tồn tại) có cùng một chiến lược nếu loop.ko chưa được tải. Hạt nhân ở đây yêu cầu block-major-7-0 (vì loop0 thường có (7,0), xem ls -l) và loop.ko có bí danh block-major-7-* phù hợp.

+0

Không có tệp nào như mô-đun.syms, liệt kê thiết bị được tải vào thời gian khởi động? – brokenfoot

Các vấn đề liên quan