커널 패닉 시 Qemu가 실패하고 종료되도록 할 수 있나요?

커널 패닉 시 Qemu가 실패하고 종료되도록 할 수 있나요?

다양한 아티팩트를 테스트하기 위해 지속적인 통합 파이프라인에 Qemu를 추가하려고 합니다 initrd. 나는 다음과 같이 Qemu를 실행할 수 있다는 것을 발견했습니다.

qemu-system-x86_64 \
    -machine q35 \
    -drive if=pflash,format=raw,file=OVMF_CODE.fd,readonly \
    -drive if=pflash,format=raw,file=OVMF_VARS.fd \
    -kernel vmlinuz-4.4.0-121-generic \
    -initrd my-initramfs.cpio.xz \
    -nographic

...스크립트에서 이 작업을 수행하면 qemu-system-x86_64상태가 종료됩니다.0init

# poweroff -f

이는 init 스크립트가 종료되지 않기 때문에 작동합니다. poweroff -f호출하고 "영원히" 잠자기 상태로 있거나 Qemu가 "전원 끄기"를 수행할 때까지입니다.

ACPI: Preparing to enter system sleep state S5
reboot: Power down

init오류를 강제로 표시하여 exit스크립트의 문제를 감지 할 수 있기를 원합니다 set -eu. 스크립트를 올바르게 종료하면 init커널 패닉이 발생하지만 qemu-system-x86_64프로세스가 영원히 중단됩니다.

영원히 매달리지 않게 하려면 어떻게 해야 합니까? Qemu 호스트가 Qemu 게스트에서 커널 패닉을 감지하도록 하려면 어떻게 해야 합니까?

추가 설명:

내 애플리케이션의 특성은 보안에 민감합니다. 즉, Linux 커널 구성/컴파일은 "허용"되지만 커널 매개변수 전달은 허용되지 않습니다. 한 가지 점을 강조하기 위해,CMDLINE_OVERRIDE활성화되었습니다.

답변1

QEMU -no-reboot+ 커널 CLIpanic=-1

0또한 비슷한 것을 반환 pvpanic하지만 다음과 같은 장점이 있습니다.

  • 아무것도 다시 컴파일할 필요가 없으며 시작 매개변수만 있으면 됩니다.
  • arm과 aarch64는 -M virt물론 x86에서도 작동하지만 pvpanic은 x86에만 해당되는 것 같습니다.arch/x86

시험용이 설정.

panicGDB를 사용하여 기호 추적

panic또 다른 접근 방식은 함수의 주소에 도달한 시점을 감지한 다음 QEMU 종료를 시도하는 것입니다 .

다음과 같이 GDB를 확실히 깨뜨릴 수 있습니다 panic:https://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu/33203642#33203642

하지만 TODO: 상태 1로 QEMU를 종료하는 방법은 무엇입니까? GDB 내에서 사용하면 GDB에서 QEMU 모니터로 monitor quit의 전달은 매우 가깝지만 상태로 종료되지 않기 때문에 그렇지 않습니다 .quit0

보석 5기본 추적은 기본적으로 수행되는데, 이는 훌륭합니다.

이는 다음과 같은 경우에 발생합니다.https://github.com/gem5/gem5/blob/1da285dfcc31b904afc27e440544d006aae25b38/src/arch/arm/linux/system.cc#L73

아마도 QEMU 개발자는 이 기술에서 영감을 얻어 비슷한 것을 구현할 수 있을 것입니다.

답변2

나는 작동하는 것을 가지고 있습니다 :

  • 를 사용하여 커널을 구성(및 빌드)합니다. CONFIG_PVPANIC=y이렇게 하면 장치에 대한 컴파일된 지원이 포함된 커널이 생성됩니다 pvpanic.
  • qemu-system-x86_64옵션과 함께 호출됩니다 -device pvpanic. 이는 Qemu에게 커널 패닉을 포착하고 종료하도록 지시합니다.

커널 패닉으로 인해 qemu-system-x86_64성공적으로 종료되었지만( status 반환 0) 적어도 더 이상 중단되지는 않습니다.

올바른 방향을 알려준 @dsstorefile1에게 큰 감사를 드립니다.

인용하다:

관련 정보