Qemu gagal memuat ketika initrd (cpio) saya besar ~80 mb

Saya baru mengenal qemu dan mencoba mempelajari pemrograman kernel, saya membuat initrd yang memiliki kotak sibuk, tetapi ketika saya menambahkan tarbal besar ~80Mb di cpio qemu gagal dimuat.

Saya ingin memasukkan golang di intrd, sehingga saya bisa menguji kernel baru.

Inilah yang terjadi:

mfrw@kp ~/os/busybox/test_build
 % ls
bin  linuxrc  sbin  usr
mfrw@kp ~/os/busybox/test_build
 % !find
find . | cpio -o -H newc | gzip > rootfs_bb.gz
cpio: File ./rootfs_bb.gz grew, 1261568 new bytes not copied
7374 blocks
mfrw@kp ~/os/busybox/test_build
 % ls -ltrh
total 2.6M
drwxr-xr-x 2 mfrw mfrw 4.0K Mar 18 01:56 bin
lrwxrwxrwx 1 mfrw mfrw   11 Mar 18 01:56 linuxrc -> bin/busybox
drwxr-xr-x 2 mfrw mfrw 4.0K Mar 18 01:56 sbin
drwxr-xr-x 4 mfrw mfrw 4.0K Mar 18 15:24 usr
-rw-r--r-- 1 mfrw mfrw 2.6M Mar 18 15:31 rootfs_bb.gz
mfrw@kp ~/os/busybox/test_build
 % 

Lalu saya jalankan menggunakan qemu dengan kernel yang baru dibuat dengan rootfs = 2.6 M

mfrw@kp ~/os/linux_staging % qemu-system-x86_64 -nographic -no-reboot -kernel arch/x86/boot/bzImage -initrd ./../busybox/test_build/rootfs_bb.gz  -append "panic=1 console=ttyS0 rdinit=/bin/sh"
[    0.000000] Linux version 4.11.0-rc2+ (mfrw@kp) (gcc version 6.3.1 20170109 (GCC) ) #7 SMP Sat Mar 18 02:34:27 IST 2017
[    0.000000] Command line: panic=1 console=ttyS0 rdinit=/bin/sh
[    0.000000] x86/fpu: x87 FPU will use FXSAVE
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
...... the kernel boots fine

Tetapi ketika saya memasukkan tar.gz untuk golang di rootfs, ia memotret hingga 80M dan kemudian gagal untuk boot

mfrw@kp ~/os/busybox/test_build
 % cp ~/go/go1.6.linux-amd64.tar.gz usr 
mfrw@kp ~/os/busybox/test_build
 % !fin
find . | cpio -o -H newc | gzip > rootfs_bb.gz
170406 blocks
mfrw@kp ~/os/busybox/test_build
 % ls -ltrh
total 82M
drwxr-xr-x 2 mfrw mfrw 4.0K Mar 18 01:56 bin
lrwxrwxrwx 1 mfrw mfrw   11 Mar 18 01:56 linuxrc -> bin/busybox
drwxr-xr-x 2 mfrw mfrw 4.0K Mar 18 01:56 sbin
drwxr-xr-x 4 mfrw mfrw 4.0K Mar 18 15:34 usr
-rw-r--r-- 1 mfrw mfrw  82M Mar 18 15:34 rootfs_bb.gz
mfrw@kp ~/os/busybox/test_build
 % 

Saya mencoba menjalankannya dengan perintah yang sama dan gagal dijalankan...

mfrw@kp ~/os/linux_staging % qemu-system-x86_64 -nographic -no-reboot -kernel arch/x86/boot/bzImage -initrd ./../busybox/test_build/rootfs_bb.gz  -append "panic=1 console=ttyS0 rdinit=/bin/sh"
.... no .. output

Apa yang saya lakukan salah? Mohon petunjuknya :)


person mfrw    schedule 18.03.2017    source sumber
comment
Mungkin konfigurasi kernel memiliki default kecil untuk ukuran initrd/initramfs?   -  person 0andriy    schedule 18.03.2017
comment
Gunakan initramfs alih-alih initrd (yang sudah tidak digunakan lagi). Initramfs berukuran dinamis, dan bisa sebesar memori yang tersedia. BTW rootfs tidak diakses sampai akhir urutan boot kernel (yaitu setelah inisialisasi perangkat). Jika Anda mendapatkan no ...output, berarti inisialisasi kernel gagal. Coba aktifkan fitur earlyprintk.   -  person sawdust    schedule 18.03.2017
comment
@sawdust, mereka menggunakan initramfs (catatan cpio -o -H newc di atas).   -  person 0andriy    schedule 20.03.2017
comment
@0andriy -- Lalu apa yang ditentukan oleh -initrd ./../busybox/test_build/rootfs_bb.gz di baris perintah qemu?   -  person sawdust    schedule 20.03.2017
comment
Ini menentukan initramfs/initrd yang ingin Anda gunakan... (rootfs)... Tapi saya menemukan solusinya, saya tidak memberikan cukup memori untuk qemu ... Saya menggunakan flag -m size=512 yang dijalankan.. .   -  person mfrw    schedule 21.03.2017
comment
@sawdust, Anda dapat memeriksa kernel/init.c IIRC untuk detail pengenalan otomatis format file. Tidak peduli apa nama atau format (initrd/initramfs) file tersebut.   -  person 0andriy    schedule 21.03.2017
comment
Kalian menggabungkan initrd dan initramfs. Itu bukanlah hal yang sama. BTW itu pertanyaan retoris, dan jawaban Anda salah menurut manual qemu.   -  person sawdust    schedule 22.03.2017
comment
Saya setuju keduanya tidak sama, tetapi menurut saya kernelnya cukup waras untuk mengetahuinya, dan bertindak dengan tepat   -  person mfrw    schedule 22.03.2017


Jawaban (1)


Saya akhirnya menemukan solusinya, tidak memberikan cukup memori sehingga gagal. Saya akhirnya menjalankannya dengan

-ukuran m=512

Dan itu berjalan dengan baik

person mfrw    schedule 20.03.2017