Tôi đang cố gắng tìm hiểu toàn bộ quá trình khởi động của máy kể từ khi bạn nhấn nút nguồn. Có một phần từ bootloader đến giai đoạn initramfs tôi không hiểu lắm về một số bit nhỏ khác.
Đưa ra cấu hình Grub này cho một mục nhập, được lấy từ bản cài đặt mặc định của Ubuntu gần đây:
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 96fb7310-5adb-4f66-bf59-04acd08d76a3
echo 'Loading Linux x.y.z ...'
linux /vmlinuz-x.y.z root=/dev/mapper/some-device-name ro nomodeset
echo 'Loading initial ramdisk ...'
initrd /initrd.img-x.y.z
Điều này thực sự làm gì về trạng thái hệ thống và bộ nhớ? Tôi hiểu rằng nhiệm vụ của Grub là "tải và chạy kernel" và nó có bộ mô-đun riêng để truy cập các tệp trên thiết bị (hoặc mạng) để truy cập chúng. Trong ví dụ ở đây insmod
s, set root
và search
- nhưng đây chỉ là từ quan điểm của Grub, và không được chia sẻ với kernel, phải không?
Tôi cũng đoán rằng Grub đang tải (một bản sao?) Của kernel vào bộ nhớ ( linux
lệnh ) và đá nó để bắt đầu thực thi. (hai bước khác nhau rõ ràng - vì vậy, làm thế nào?) Các tham số đã cho có thể được đọc trong kernel và được diễn giải (đây có phải là một chuỗi lớn được ánh xạ vào bộ nhớ ở đâu đó không?) và cung cấp các tùy chọn để sắp xếp những thứ được yêu cầu.
Tôi cũng thấy initrd
tùy chọn này . Điều này trỏ đến initramfs nén của tôi, cần thiết để khởi động thiết bị gốc thực sự được chỉ định bởi root=
. Nhưng làm thế nào là initramfs này được cung cấp cho kernel? Nó không được chuyển bất kỳ địa chỉ bộ nhớ nào đến nơi mà nó có thể tải nó, cũng như không thể truy cập chính nó, vì nó đã được tải trước khi kernel được khởi động. Một số tài liệu kernel nói rằng 'thiết bị' hệ thống tệp initramfs này có thể truy cập được thông qua /dev/ram0
, nhưng tôi không thấy cách nó trở thành một tệp thiết bị có thể truy cập để bắt đầu. Có điều gì đó xảy ra dưới nước tôi không thấy, tôi đoán.
Tôi cũng không thấy điều này liên quan đến các trình tải khởi động khác, bao gồm các nền tảng nhúng, ví dụ như sử dụng U-boot / Coreboot. Đây có phải đang làm điều tương tự như Grub (cùng địa chỉ bộ nhớ tiêu chuẩn không?) Và mức độ này so với Grub về việc tải kernel / initrd ở mức độ nào?
Chỉ cần được rõ ràng về câu hỏi của tôi, tôi nghĩ rằng tôi hiểu tại sao các giai đoạn khởi động khác nhau tồn tại và những gì chuyển tiếp diễn ra, nhưng tôi không thấy cách họ diễn ra và những gì mà trách nhiệm chính xác là cho mỗi giai đoạn. Tôi có cảm giác tôi đang bỏ lỡ một số "tiêu chuẩn" mà tất cả điều này được đưa ra.
Tôi sẽ đánh giá cao một số lời giải thích về điều này.
boot
lệnh ngầm ở cuối chuỗi. Tôi không chắc chính xác những gì nó làm trong Grub, nhưng nếu bạn sử dụng dòng lệnh Grub để nhập các lệnh này theo cách thủ công, bạn cầnboot
hoặc nó sẽ chỉ ngồi mãi ởgrub>
(hoặc ít nhất, cho đến khi bạn chán và tắt máy tính ). Các lệnh trước "chỉ" thiết lập một môi trường.