我是 qemu 的新手,正在尝试学习内核编程,我创建了一个具有繁忙框的 initrd,但是当我在 cpio 中添加一个大 tarbal ~80Mb 时,qemu 无法加载。
我想在 intrd 中包含 golang,以便我可以测试新内核。
这是正在发生的事情:
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.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
但是当我在根部中包含 golang 的 tar.gz 时,它会射到 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
我做错了什么?任何指示请:)
我终于找到了解决方案,没有给它足够的内存,所以它失败了。我终于用它运行了它
-m 大小 = 512
而且运行良好