2017-03-18 11 views
0

qemu를 처음 사용하고 커널 프로그래밍을 배우려고합니다. 사용중인 상자가있는 initrd를 만듭니다.하지만 큰 타르발을 ~ 80Mb에 추가하면 cpio qemu가로드되지 않습니다.내 initrd (cpio) 크기가 ~ 80 mb 일 때 Qemu가로드되지 않습니다.

새로운 커널을 테스트 할 수 있도록 intol에 golang을 포함시키고 싶었습니다.

이 일어나고있는 것입니다 : 그럼 난 rootfs와 갓 만든 커널로 QEMU를 사용하여 실행

[email protected] ~/os/busybox/test_build 
% ls 
bin linuxrc sbin usr 
[email protected] ~/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 
[email protected] ~/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 
[email protected] ~/os/busybox/test_build 
% 

= 2.6 M

[email protected] ~/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+ ([email protected]) (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의를 포함하는 경우 rootfs에서 최대 80M을 촬영 한 다음 부팅에 실패합니다.

[email protected] ~/os/busybox/test_build 
% cp ~/go/go1.6.linux-amd64.tar.gz usr 
[email protected] ~/os/busybox/test_build 
% !fin 
find . | cpio -o -H newc | gzip > rootfs_bb.gz 
170406 blocks 
[email protected] ~/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 
[email protected] ~/os/busybox/test_build 
% 

동일한 명령으로 실행하려고합니다. 실행에 실패 ...

내가 뭘 잘못하고 있니? 모든 포인터를주십시오 :)

+0

은 어쩌면 구성은 initrd를/다시 initramfs 크기의 작은 기본을 가지고 커널 잘 달렸다? – 0andriy

+0

initrd 대신 initramfs를 사용하십시오 (더 이상 사용되지 않습니다). initramfs는 동적으로 크기가 조정되며 사용 가능한 메모리만큼 커질 수 있습니다. BTW 커널 부트 시퀀스에서 늦게 (예 : 장치 초기화 후)까지 rootfs에 액세스하지 않습니다. * "no ... output"*을 얻으면 커널 초기화가 실패합니다. ** earlyprintk ** 기능을 활성화 해보십시오. – sawdust

+0

@sawdust, 그들은 * initramfs *를 사용하고 있습니다 (위의'cpio -o -H newc'에주의하십시오). – 0andriy

답변

0

결국 해결책을 찾았지만, 충분한 메모리를주지 못해서 실패했습니다. 는 드디어

-m 크기

그것을 실행 = 512

그리고