2017-12-10 1 views
3

나는 complied linux 커널 (버전 4.9) 과 샘플 프로그램으로 생성 한 initfs로 qemu-arm을 실행하려고했습니다.Qemu-Arm 검은 화면이 붙어 있습니다 - 바닐라 커널 실행

이것은 우수한 게시물 인 here을 기반으로 작성되었습니다.

다음
qemu-system-arm -M vexpress-a9 -kernel linux-4.9/arch/arm/boot/zImage -initrd initramfs -append "console=tty1" 

, QEMU 나에게 이러한 오류를 표시하고 그래픽 창에 붙어지고 :

이 내가 실행 한 명령은

pulseaudio: set_sink_input_volume() failed 
pulseaudio: Reason: Invalid argument 
pulseaudio: set_sink_input_mute() failed 
pulseaudio: Reason: Invalid argument 
심지어 내가없이 실행할 때 - 커널을로드하기위한 initrd 매개 변수 - 아무 일도 일어나지 않습니다.

this 예에서 vmlinuz-3.2.0-4-vexpress 이미지로 실행 해 보았는데 저에게 효과적이었습니다.

누군가가 문제가 될 수있는 단서가 있습니까? 그것이 zImage라는 사실과 함께 무엇인가? 디버깅 할 수있는 방법이 있습니까?

감사합니다.

답변

0

"QEMU가 앉아서 아무 것도 인쇄하지 않습니다"는 일반적인 증상이며, 거의 항상 "올바르게 구성되지 않았기 때문에 게스트 커널이 무엇인가 인쇄하기 전에 충돌했습니다"라는 의미입니다. 이 꽤 많이 당신이 실제 하드웨어에 잘못 구성 커널을 부팅하려고하면 당신이 얻을 같은 효과이며, 디버깅 프로세스가 동일한에 관한 것입니다 : 명백한 커널 설정 옵션이 올바르게 설정되어

  • 검사 :에 특히, ARM 보드와 CPU를 지원하도록 빌드 했으므로 콘솔 출력에 사용하려는 장치에 대한 지원을 활성화했습니다.
  • 직렬 포트 정보를 출력하도록 QEMU를 구성하고 콘솔 출력을 직렬로 보내도록 게스트를 구성하고 가능한 earlycon/earlyprintk 옵션을 활성화합니다 (직렬 출력은 그래픽 출력보다 훨씬 빨리 발생합니다. Linux ke 초기 커널/earlyprintk 옵션을 사용하면 커널이 기본값보다 이전에 출력을 시작합니다.
  • 커널이 작동하는 경우 작동하지 않는 경우 커널 구성 간의 차이점을보고 누락 된지 확인하십시오 뭔가
  • 경우 다른 모든
  • 특히 QEMU 고유의 것입니다 당신이 이것에 대해

아무것도에 무슨 일이 일어나고 있는지 알아 디버거를 중단해야 실패 - 그것은 당신이 경우 거쳐야하는 고통의 같은 종류의 하드웨어에 커널을 구현하려고합니다.

추신 : 내 첫 번째 추측은 충분한 메모리가 없기 때문에 커널이 충돌하고 있다는 것입니다. QEMU에 '-m'옵션이 전달되지 않았으므로 기본값은 128MB입니다. vexpress-a9 보드는 최대 1GB를 처리 할 수 ​​있습니다. earlycon은 아마도이 문제를 확인하기에 충분한 디버그 출력이 될 것입니다. 또한 -dtb를 통해 장치 트리 blob을 전달하지 않습니다. 이는 최신 커널의 경우 문제가 될 수 있습니다 (이전 커널은 문제없이 부팅됩니다).

+0

최대 메모리 양을 설정했지만 여전히 아무 것도하지 않습니다. 또한 안드로이드 에뮬레이터로 실행 해 보았습니다. 행운을 불렀습니다. 이 경우 qemu 모니터가 도움이 될 수 있습니까? – sborpo

+1

안드로이드 에뮬레이터는 커널을 컴파일했다고 가정하는 vexpress 보드의 에뮬레이터가 아니기 때문에 도움이되지 않습니다. 당신은 장치 트리 BLOB를 제공하려고 시도 했습니까? 그렇지 않으면 위에서 추천 한 디버그 방법을 시도해보십시오. –

+0

실제로 dtb를 사용하면 작동하지만 거기가 없으면 그것을 할 수있는 방법이 있습니까? 커널 매개 변수는? boot.img – sborpo

관련 문제