initrd/initramfs là tùy chọn và không phải là yêu cầu. bzImage là ảnh hạt nhân thuần túy và có thể được khởi động trực tiếp bởi bộ nạp khởi động. Tuy nhiên, có thể cần phải thực hiện một số nhiệm vụ (tải các mô-đun hệ thống, trình điều khiển để truy cập đĩa, gắn hệ thống tệp gốc từ một số phương tiện trao đổi mà không có tên/đường dẫn cố định, v.v.) thường yêu cầu quyền truy cập vào công cụ hệ thống tệp và không gian người dùng.
Đó là những gì initramfs là dành cho: Đây là bản lưu trữ CPIO được đính kèm vào ảnh hạt nhân (hình ảnh hạt nhân là vùng chứa cho initramfs không theo cách khác) trong chính hình ảnh hạt nhân hoặc trình khởi động lúc khởi động.
Bản lưu trữ CPIO đó chứa rootfs ban đầu với các mô-đun cần thiết để thiết lập tất cả các thiết bị để truy cập hệ thống tệp gốc phù hợp và một số chương trình xác định các thiết bị đó, tải mô-đun, thực hiện một số tác vụ khởi động khác. và bắt đầu/sbin/init
initrd tương tự, với sự khác biệt chính là hình ảnh hệ thống tệp, có thể và thường được nén. Hạt nhân phải có hỗ trợ cho hệ thống tập tin được sử dụng được tích hợp sẵn và sẽ gắn kết hình ảnh này làm hình ảnh ban đầu /.
Vì CPIO đơn giản hơn bởi nhiều đơn đặt hàng, nên initramfs được ưu tiên hơn initrd, vì điều này tiết kiệm cả yêu cầu cho bất kỳ mô-đun hệ thống tệp nào được tích hợp và cũng giúp việc tạo initramfs dễ dàng hơn. Thay vì phải tạo ra một hình ảnh ext2, loopdevice gắn kết và cư trú nó, nó sôi xuống để tạo ra một kho lưu trữ đơn giản, không giống như sử dụng tar.
Tuy nhiên, nếu bạn biên dịch hạt nhân với tất cả các trình điều khiển và mô-đun cần thiết được tích hợp vào ảnh hạt nhân và thiết bị hệ thống tệp gốc của bạn có tên cố định trong hệ thống, bạn không cần initramfs vì hạt nhân có thể tự làm mọi thứ sau đó.
Bạn đã thử bỏ tùy chọn 'initrd = ...' khỏi bộ nạp khởi động chưa? Về nguyên tắc initrd là tùy chọn, miễn là hạt nhân của bạn có tất cả các trình điều khiển cần thiết được biên dịch vào nó để tìm kiếm hệ thống tệp gốc. Ngoài ra, đây là câu hỏi lập trình như thế nào? –
Có thể, và nó được sử dụng để được rằng tất cả các hệ thống Linux khởi động mà không có một initrd. Nhưng initrd làm cho nhiều thứ trở nên dễ dàng hơn nhiều. Tôi tò mò ... Tại sao bạn muốn khởi động mà không có initrd? Biết rằng có lẽ sẽ làm cho nó dễ dàng hơn để cung cấp một câu trả lời có ý nghĩa hơn. – Flimzy
Tôi đã phát triển dự án openwrt và muốn tạo một hình ảnh hạt nhân nhỏ. Bỏ qua phần initrd đã tạo lỗi khởi động. – Neel