Bagaimana cara saya mem-boot Linux dengan rootfs di RAM?

16

Rootfs adalah gambar squashfs dan bootloader saya memuatnya ke beberapa alamat di SDRAM. Parameter apa yang perlu saya sampaikan ke kernel agar dapat me-mount rootfs dari sana? Dukungan Squashfs adalah bawaan dan sudah berfungsi dengan baik

root=/dev/mtdblock2 rootfstype=squashfs  

untuk boot dari flash.

EDIT: Ini adalah perangkat tertanam berbasis MIPS, menggunakan bootloader khusus. Biasanya, bootloader mengekstrak kernel terkompresi dari flash ke dalam SDRAM, dan kemudian kernel mount / dev / mtdblock2 sebagai rootfs. Saya mencoba untuk meningkatkan bootloader sehingga dapat mengunduh gambar ke RAM dan boot tanpa menulis ke flash.

Saya tidak tahu bagaimana membuat Linux me-mount image sistem file dalam RAM sebagai rootfs.

Atilla Filiz
sumber
Tolong jelaskan lebih baik, apa yang ingin Anda capai, jika Anda sudah tahu squashfs berfungsi. Bagaimana Anda tahu itu bekerja? Apa yang terjadi? Dan yang paling penting, apa yang tidak sesuai keinginan Anda?
rozcietrzewiacz
1
Juga, bootloader apa yang digunakan perangkat?
rozcietrzewiacz
Saya pikir jika Anda menggunakan memdisk (dari SYSLINUX) sebagai kernel, itu memuat seluruh gambar dalam memori dan kemudian boot dari itu
golimar

Jawaban:

10

Saya akan menggunakan initramfs. ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

Banyak distribusi Linux menggunakan initramfs (jangan bingung dengan initrd, mereka berbeda) selama proses boot, sebagian besar untuk dapat memulai program userspace sangat awal dalam proses boot. Namun, Anda dapat menggunakannya untuk apa pun yang Anda inginkan.

Manfaat initramfs daripada initrd adalah initramfs menggunakan sistem file tmpfs sementara initrd menggunakan perangkat blok ram. Perbedaan utama di sini adalah untuk initrd, Anda harus melakukan pra-alokasi semua ruang untuk sistem file, bahkan jika Anda tidak akan menggunakan semua ruang itu. Jadi, jika Anda tidak menggunakan ruang sistem file, Anda membuang ram, yang pada perangkat tertanam, sering kali merupakan sumber daya yang langka. Tmpfs adalah sistem file yang kehabisan ram, tetapi hanya menggunakan ram sebanyak saat ini yang digunakan pada sistem file. Jadi jika Anda menghapus file dari tmpfs, ram itu segera dibebaskan.

Sekarang biasanya initramfs bersifat sementara, hanya digunakan untuk menjalankan beberapa program sangat awal dalam proses boot. Setelah program-program tersebut berjalan, kontrol dialihkan ke sistem file nyata yang berjalan pada disk fisik. Namun, Anda tidak harus melakukan itu. Tidak ada yang menghentikan Anda dari kehabisan initramfs tanpa batas.

Patrick
sumber
Jadi saya sebenarnya telah mencoba untuk mengatur sistem yang berjalan "dari initramfs tanpa batas". Sistem ini untuk sebagian besar, tapi saya punya beberapa masalah - Saya bertanya-tanya apakah Anda mungkin bisa menjelaskan? Pertanyaan diposting di sini
dtmland
0

Saya menggunakan phramdriver untuk tujuan ini: ini mengemulasi perangkat MTD menggunakan memori fisik, yang berarti Anda dapat menggunakan gambar rootfs yang sama persis untuk pengujian / pengembangan yang nantinya akan Anda bakar ke flash asli. Sihir yang diperlukan pada baris perintah kernel akan menjadi sesuatu seperti

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

Perhatikan bahwa Anda juga memerlukan memmapargumen untuk memastikan kernel tidak mencoba menggunakan memori itu untuk dirinya sendiri. 9MB adalah seberapa besar rootfs saya (atau dulu). \ Sebelum $ diperlukan di bootloader saya, mungkin bukan milik Anda. Alamat yang saya pilih ada yang arbitrer, karena saya tidak tahu bagaimana memori fisik diletakkan di perangkat Anda, jadi pilih satu yang masuk akal untuk Anda. Saya berasumsi Anda sebelumnya menggunakan tftp atau sesuatu untuk memuat rootfs Anda di alamat itu

telent
sumber