Điều gì quyết định mô-đun hạt nhân nào được xây dựng trong nhân tĩnh trong quá trình biên dịch?


7

Tôi vừa biên dịch một kernel mới và tự hỏi: Điều gì quyết định trong quá trình biên dịch mà các mô-đun kernel được xây dựng trong kernel một cách tĩnh?

Sau đó tôi đã xóa /lib/modules, khởi động lại và thấy rằng hệ thống của tôi hoạt động tốt, vì vậy nó xuất hiện tất cả các mô-đun thiết yếu được xây dựng tĩnh trong kernel.

Không có /lib/modules, kernel tải 22. Với thư mục hiện tại, nó tải 67 mô-đun.

Câu trả lời:


15

Bạn làm điều này như một phần của quá trình cấu hình, thông thường khi bạn chạy make config, make menuconfighoặc tương đương. Bạn có thể đặt mô-đun là tích hợp (được đánh dấu là *) hoặc được mô đun hóa (được đánh dấu là M).

Bạn có thể xem các ví dụ về điều này trong một ảnh chụp màn hình của make menuconfig, từ đây :

ảnh chụp màn hình menuconfig


Trong tập tin nguồn nào tôi tìm thấy cài đặt mặc định trong trường hợp tôi không thay đổi gì?
JohnnyFromBF

1
.config trong thư mục nơi bạn ban hành make && make menu_config.
icbyte

Ý tôi là, các cài đặt mặc định được lấy như thế nào? Không có .config khi tôi tải xuống các nguồn kernel, nó được tạo khi tôi chấp nhận các cài đặt mặc định sau khi thực hiện make config. Nhưng tôi muốn biết nơi nào make configlấy các thiết lập mặc định?
JohnnyFromBF

Hoặc hãy đặt nó theo cách này: nơi nào make defconfiglấy giá trị mặc định của nó? Dựa vào liên kết nàycreates a config file that uses default settings based on the current system's architecture. Nhưng làm thế nào để nó có được current system's architecture?
JohnnyFromBF

1
@JohnnyFromBF Chúng được đặt trong Kconfigcho kiến trúc trong các nguồn kernel, ví dụ, hãy xem phần "mặc định" dòng trong github.com/torvalds/linux/blob/master/arch/x86/Kconfig
Chris Xuống

4

Cho rằng bạn đã thêm thẻ /kernelngoài /linux-kernel, tôi giả sử rằng bạn cũng quan tâm đến trường hợp chung.

Trong Solaris từ năm 1991, mọi thứ đều được tải động, ngoại trừ mã keo nhân cơ bản, bộ lập lịch mặc định và máy nhắn tin / trao đổi.

Ngay cả mã hệ thống tập tin gốc và trình tải mô-đun cũng được tải động.

Điều này tránh sự cần thiết phải tự cấu hình kernel. Cho rằng Solaris cũng không cần phải định cấu hình các tính năng phụ thuộc kích thước (các đối tượng kernel mới được tự động tạo vào thời gian chạy miễn là có đủ bộ nhớ), không cần bất kỳ cấu hình thủ công nào trên Solaris.

Tôi tự hỏi khi nào Linux sẽ đạt đến trạng thái tự động hóa này ... Tuy nhiên tôi tin rằng điều này sẽ không bao giờ xảy ra vì cấu hình kernel không cần thiết về mặt lý thuyết (xem Solaris) được sử dụng như một phương pháp hài hước để nói với người dùng hey, you are able to control the linux kernel.


Linux cũng được tải động. Tuy nhiên, không giống như kịch bản mà bạn mô tả cho Solaris (tôi không biết rõ về Solaris nên bạn có thể đang mô tả sai mọi thứ), người dùng, có tùy chọn biên dịch tĩnh trình điều khiển thiết bị trực tiếp vào kernel. Điều này làm cho Linux hữu ích hơn đáng kể so với Solaris để sử dụng trong các thiết bị nhúng, v.v.
slebetman

Lưu ý ảnh chụp màn hình trong câu trả lời của Chris. Khi biên dịch kernel, bạn có thể chọn tải động một mô-đun ( <M> Modularizetùy chọn) hoặc biên dịch tĩnh nó trong ( <Y> Includestùy chọn)
slebetman

Thực hiện theo "cách Linux" cũng cho phép bạn vô hiệu hóa hoàn toàn các mô-đun hạt nhân có thể tải, trong một số trường hợp và các mô hình mối đe dọa nhất định có thể tăng cường bảo mật (bằng cách đảm bảo rằng không có cách nào có sẵn để tiêm mã thực thi vào kernel đang chạy). Hỗ trợ mô-đun hạt nhân có thể tải là một trong số nhiều tùy chọn trong cấu hình nhân Linux. (Và bạn cũng có thể biên dịch hầu hết mọi thứ trong nhân Linux dưới dạng các mô đun có thể tải được, nếu đó là tách trà của bạn.)
một CVn

Solaris thực hiện các mô-đun hạt nhân đã ký để bảo mật.
schily

Vậy Solaris có sử dụng đĩa RAM ban đầu hay thứ gì đó tương tự không? Làm thế nào các mô-đun có thể được tải mà không có trình tải mô-đun?
Melab
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.