Là toàn bộ kernel được tải vào bộ nhớ khi khởi động?


14

Tôi đọc qua tài liệu IBM phổ biến này (tôi thấy nó được nhắc đến khá thường xuyên trên web) giải thích chức năng của đĩa RAM ban đầu.

Tôi nhấn một bức tường trong khái niệm làm thế nào điều này hoạt động mặc dù.

Trong tài liệu nó nói

Trình tải khởi động, chẳng hạn như GRUB, xác định hạt nhân sẽ được tải và sao chép hình ảnh hạt nhân này và bất kỳ initrd liên quan nào vào bộ nhớ

Tôi đã nhầm lẫn: Nó sao chép toàn bộ kernel vào bộ nhớ hay chỉ là một phần của nó? Nếu toàn bộ kernel nằm trong bộ nhớ thì tại sao chúng ta thậm chí cần đĩa RAM ban đầu?

Tôi nghĩ mục đích của initrd là có thể có một hình ảnh hạt nhân tổng quát nhỏ và initrd sẽ cài đặt các mô-đun chính xác trong đó trước khi hình ảnh kernel được tải. Nhưng nếu toàn bộ kernel đã có trong bộ nhớ thì tại sao chúng ta cần initrd?

Điều đó cũng mang đến một điều khiến tôi bối rối - các mô-đun được nạp vào kernel nằm ở đâu? Có phải tất cả các mô-đun hạt nhân được lưu trữ bên trong initrd?


Đúng. Toàn bộ nhân. Và rootfs đầu tiên của nó. Nhưng hạt nhân linux đã không sử dụng initrd trong nhiều năm.
mikeerv

Phải tôi đã đọc nó. Nó đã được thay thế phần lớn bởi initramfs phải không? Và nó vẫn là một quá trình tương tự với initramfs đúng không?
dùng1028270

1
nó đã được thay thế hoàn toàn cho tất cả các hạt nhân kể từ loạt 2.6. Nhưng quá trình này có phần giống nhau ngoại trừ việc initramfs không bao giờ được vượt qua - nó luôn ở đó và luôn luôn là root. Bạn phải gắn kết dev gốc của bạn trên nó, thực sự. Cũng có những lợi ích của việc không cần phải mô phỏng một khối dev riêng và tương tự.
mikeerv

Thật tuyệt, tôi sẽ đọc bài báo mà bạn liên kết đến. Vì vậy, các mô-đun hạt nhân được lưu trữ trong rootfs initramfs?
dùng1028270

1
@edwardtorvalds - đó là tất cả được xử lý udevthông thường, và có, tự động.
mikeerv

Câu trả lời:


17

Toàn bộ kernel được tải vào bộ nhớ khi khởi động, thường là cùng với initramfsngày nay. (Vẫn có thể thiết lập một hệ thống để khởi động mà không cần initramfsnhưng điều đó là bất thường trên máy tính để bàn và máy chủ.)

Các initramfsvai trò 's là để cung cấp các chức năng cần thiết để gắn kết hệ thống tập tin 'thực' và tiếp tục khởi động hệ thống. Điều đó liên quan đến các mô-đun hạt nhân, và cả các nhị phân khác nhau: bạn cần ít nhất udev, có thể là một số mạng và kmodtải các mô-đun.

Các mô-đun có thể được tải vào kernel muộn hơn là chỉ khởi động, do đó không có sự chuẩn bị đặc biệt nào về kernel initramfs. Họ có thể được lưu trữ ở bất cứ đâu: các initramfs, /lib/modulestrên hệ thống tập tin thực tế, trong một cây phát triển nếu bạn đang phát triển một mô-đun ... Các initramfschỉ cần chứa các module đó là cần thiết để gắn kết hệ thống tập tin gốc (trong đó có phần còn lại).


OK có ý nghĩa với tôi. Tôi nghĩ rằng tôi đã kết hợp hình ảnh hạt nhân và hệ thống tập tin mà nó sử dụng rõ ràng là hoàn toàn riêng biệt.
dùng1028270

5

Toàn bộ hạt nhân (nhưng không phải mô-đun của nó) sẽ được tải vào bộ nhớ. Nếu có các mô-đun mà hạt nhân sẽ cần trước khi có bất kỳ hệ thống tệp nào (điều này thường có nghĩa là trình điều khiển cho các hệ thống tệp và thiết bị của chúng), thì các mô-đun đó sẽ nằm trong initramfs (trong bộ nhớ) và hạt nhân sẽ tải chúng từ đó. Các mô-đun khác có thể được tải sau từ hệ thống tập tin.


3

Hạt nhân trong các thiết lập Linux hiện đại dựa trên nhiều mô-đun, nghĩa là hạt nhân thích hợp (được tải khi khởi động vào RAM) chỉ bao gồm chức năng tối thiểu, tất cả phần còn lại được biên dịch dưới dạng mô-đun (có thể tải khi chạy). Để làm cho điều này hoạt động ngay cả khi các thiết bị hoặc hệ thống tập tin cần thiết để khởi động là các mô-đun, một initramfsđược nạp với kernel (như tên của nó, đây là vùng RAM với hệ thống tệp đơn giản, được gắn khi khởi động). Hệ thống tập tin tạm thời này được gắn kết /và chứa các chương trình khởi động và các mô-đun cần thiết. Sau khi khởi động initramfsxong, Linux sẽ thực thi một pivot_root(8), kết hợp thực tế /và ném initramfsnội dung.

Điểm phức tạp của vấn đề này là, ví dụ, một bản phân phối có thể biên dịch một kernel (kernel tối thiểu và bộ mô-đun đầy đủ), và khi cài đặt kernel tạo ra một initramfsthiết kế phù hợp với phần cứng và thiết lập của máy đích. Tất cả điều này là bắt buộc do sự đa dạng của các thiết bị và cấu hình của "Máy tính cá nhân".


Nó không làm pivot_root.
mikeerv
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.