Qemu не загружается, когда мой initrd (cpio) большой ~80 МБ

Я новичок в qemu и пытаюсь изучить программирование ядра, я создаю initrd с полем занятости, но когда я добавляю большой tarbal ~ 80 МБ в cpio, qemu не загружается.

Я хотел включить golang в intrd, чтобы протестировать новое ядро.

Вот что происходит:

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
 % 

Потом запускаю через qemu со свежесделанным ядром с rootfs=2.6M

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

Но когда я включаю tar.gz для golang в rootfs, он стреляет до 80M, а затем не загружается.

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
 % 

Я пытаюсь запустить его той же командой, и он не запускается...

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

Что я делаю не так ? Любые указатели, пожалуйста :)


person mfrw    schedule 18.03.2017    source источник
comment
Может быть, конфигурация ядра имеет небольшой размер по умолчанию для размера initrd / initramfs?   -  person 0andriy    schedule 18.03.2017
comment
Используйте initramfs вместо initrd (который устарел). Initramfs имеет динамический размер и может занимать столько же памяти, сколько доступно. Кстати, доступ к rootfs не осуществляется до конца последовательности загрузки ядра (т.е. после инициализации устройства). Если вы не получили нет... вывода, значит, инициализация ядра не удалась. Попробуйте включить функцию earlyprintk.   -  person sawdust    schedule 18.03.2017
comment
@sawdust, они используют initramfs (примечание cpio -o -H newc выше).   -  person 0andriy    schedule 20.03.2017
comment
@0andriy -- Тогда что указывает -initrd ./../busybox/test_build/rootfs_bb.gz в командной строке qemu?   -  person sawdust    schedule 20.03.2017
comment
Он указывает initramfs/initrd, который вы хотите использовать... (rootfs)... Кстати, я нашел решение, я не давал достаточно памяти для qemu... Я использовал флаг -m size=512, он запустился.. .   -  person mfrw    schedule 21.03.2017
comment
@sawdust, вы можете проверить kernel/init.c IIRC для получения подробной информации об автоматическом распознавании формата файла. Неважно, какое имя или формат (initrd/initramfs) у файла.   -  person 0andriy    schedule 21.03.2017
comment
Вы путаете initrd и initramfs. Это не одно и то же. Кстати, это был риторический вопрос, и вы неправильно ответили в соответствии с руководством по qemu.   -  person sawdust    schedule 22.03.2017
comment
Я согласен, что они оба не одинаковы, но, на мой взгляд, ядро ​​​​достаточно вменяемо, чтобы разобраться и действовать соответствующим образом.   -  person mfrw    schedule 22.03.2017


Ответы (1)


Наконец-то я нашел решение, не дал ему достаточно памяти, поэтому он терпел неудачу. Я наконец запустил его с

-м размер=512

И побежал хорошо

person mfrw    schedule 20.03.2017