Làm cách nào để khởi động Linux với rootfs trong RAM?


16

Rootfs là một hình ảnh squashfs và bộ tải khởi động của tôi đang tải nó vào một số địa chỉ trong SDRAM. Những thông số nào tôi cần để truyền vào kernel để nó có thể gắn kết rootfs từ đó? Hỗ trợ Squashfs được tích hợp sẵn và nó đã hoạt động với

root=/dev/mtdblock2 rootfstype=squashfs  

để khởi động từ đèn flash.

EDIT: Đây là một thiết bị nhúng dựa trên MIPS, sử dụng bộ tải khởi động tùy chỉnh. Thông thường, bộ nạp khởi động trích xuất kernel đã nén từ flash vào SDRAM và sau đó kernel mount / dev / mtdblock2 làm rootfs. Tôi đang cố gắng cải thiện bộ tải khởi động để nó có thể tải hình ảnh xuống RAM và khởi động mà không cần ghi vào đèn flash.

Tôi không thể tìm ra cách làm cho Linux gắn hình ảnh hệ thống tập tin vào RAM dưới dạng rootfs.


Vui lòng mô tả rõ hơn, những gì bạn đang cố gắng để đạt được, nếu bạn đã biết squashfs hoạt động. Làm thế nào để bạn biết rằng nó hoạt động? Chuyện gì xảy ra Và quan trọng nhất, những gì không hoạt động theo cách bạn muốn?
rozcietrzewiacz

1
Ngoài ra, thiết bị sử dụng bộ nạp khởi động nào?
rozcietrzewiacz

Tôi nghĩ rằng nếu bạn sử dụng memdisk (từ SYSLINUX) làm kernel, nó sẽ tải toàn bộ hình ảnh trong bộ nhớ và sau đó khởi động từ nó
golimar

Câu trả lời:


10

Tôi sẽ sử dụng một initramfs. ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

Nhiều bản phân phối Linux sử dụng initramfs (không bị nhầm lẫn với initrd, chúng khác nhau) trong quá trình khởi động, chủ yếu là để có thể bắt đầu các chương trình không gian người dùng từ rất sớm trong quá trình khởi động. Tuy nhiên, bạn có thể sử dụng nó cho bất cứ điều gì bạn muốn.

Lợi ích của initramfs so với initrd là initramfs sử dụng hệ thống tập tin tmpfs trong khi initrd sử dụng thiết bị khối ram. Sự khác biệt chính ở đây là đối với một initrd, bạn phải phân bổ toàn bộ không gian cho hệ thống tập tin, ngay cả khi bạn sẽ không sử dụng tất cả không gian đó. Vì vậy, nếu bạn không sử dụng không gian hệ thống tập tin, bạn sẽ lãng phí ram, trên thiết bị nhúng, thường là một nguồn tài nguyên khan hiếm. Tmpfs là một hệ thống tệp hết ram, nhưng chỉ sử dụng nhiều ram như hiện đang sử dụng trên hệ thống tệp. Vì vậy, nếu bạn xóa một tập tin từ một tmpfs, ram đó ngay lập tức được giải phóng.

Bây giờ thông thường một initramfs là tạm thời, chỉ được sử dụng để chạy một số chương trình cực kỳ sớm trong quá trình khởi động. Sau khi các chương trình đó chạy, điều khiển được chuyển sang hệ thống tập tin thực sự đang chạy trên một đĩa vật lý. Tuy nhiên, bạn không phải làm điều đó. Không có gì ngăn cản bạn chạy ra khỏi initramfs vô thời hạn.


Vì vậy, tôi thực sự đã cố gắng thiết lập một hệ thống chạy "ra khỏi initramfs vô thời hạn". Phần lớn hệ thống đã hoạt động, nhưng tôi đã gặp một số vấn đề - Tôi tự hỏi liệu bạn có thể làm sáng tỏ được không? Câu hỏi được đăng ở đây
dtmland


0

Tôi sử dụng phramtrình điều khiển cho mục đích này: nó mô phỏng một thiết bị MTD sử dụng bộ nhớ vật lý, nghĩa là bạn có thể sử dụng chính xác hình ảnh rootfs để kiểm tra / phát triển mà sau này bạn sẽ ghi vào flash thực. Phép thuật phân tử trên dòng lệnh kernel sẽ giống như

phram.phram=rootfs,0x100000,9Mi root=/dev/mtdblock0 memmap=9M\$100000

Lưu ý rằng bạn cũng cần memmapđối số để đảm bảo kernel không cố sử dụng bộ nhớ đó cho chính nó. 9MB là rootfs của tôi lớn như thế nào (hoặc đã). \ Trước $ là cần thiết trong bộ tải khởi động của tôi, có thể không có trong bạn. Địa chỉ tôi đã chọn ở đó là tùy ý, vì tôi không biết bộ nhớ vật lý được bố trí trên thiết bị của bạn như thế nào, vì vậy hãy chọn một địa chỉ có ý nghĩa đối với bạn. Tôi giả sử trước đây bạn đã sử dụng tftp hoặc một cái gì đó để tải rootfs của bạn tại địa chỉ đó

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.