dtb와 머신이 교체되면 qemu-system-arm이 중단되는 이유는 무엇입니까?

dtb와 머신이 교체되면 qemu-system-arm이 중단되는 이유는 무엇입니까?

임베디드 시스템을 에뮬레이트하기 위해 qemu-system-arm을 사용하려고 합니다. 저는 Ubuntu 20.04를 사용하고 있으며 QEMU 에뮬레이터 버전 5.0.0(Debian 1:5.0-5ubuntu6~ppa0)의 백포트를 설치했습니다. 처음에는 "간단한" 것을 시도해 보고 Raspberry Pi를 에뮬레이트해야겠다고 생각했습니다. 약 12개의 예제를 시도한 후 마침내 작동하는 예제를 찾았습니다.여기. 커널과 dtb를 추출하기 위한 링크의 지침에 따라 다음 명령을 사용하여 Raspberry Pi 2b를 에뮬레이트할 수 있었습니다.

qemu-system-arm -M raspi2 -kernel ./kernel7.img -dtb ./bcm2709-rpi-2-b.dtb -sd ./2020-02-13-raspbian-buster-lite.img -serial stdio -append "$(<cmdline.txt)"

훌륭해요. 그러나 다른 버전의 Raspberry Pi를 실행하기 위해 변경하려고 하면 qemu가 중단됩니다.

qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -kernel ./kernel7.img -dtb ./bcm2709-rpi-2-b.dtb -sd ./2020-02-13-raspbian-buster-lite.img -serial stdio -append "$(<cmdline.txt)"
qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -kernel ./kernel7.img -dtb ./bcm2708-rpi-b.dtb -sd ./2020-02-13-raspbian-buster-lite.img -serial stdio -append "$(<cmdline.txt)"

나는 이것이 -M versatilepb -cpu arm1176 -m 256Raspberry Pi 1 아키텍처의 근사치라고 생각합니다. Raspberry Pi 2 및 Raspberry Pi 1에서 dtb로 시도했지만 VM에서 부팅하지 못하고 다음과 같은 불만이 표시됩니다.

pulseaudio: set_sink_input_volume() failed
pulseaudio: Reason: Invalid argument
pulseaudio: set_sink_input_mute() failed
pulseaudio: Reason: Invalid argument

나는 또한 다음을 시도했습니다.

qemu-system-aarch64 -M raspi3 -kernel ./kernel7.img -dtb ./bcm2710-rpi-3-b.dtb -sd ./2020-02-13-raspbian-buster-lite.img -serial stdio -append "$(<cmdline.txt)"

Raspberry Pi 3를 에뮬레이트해야 한다고 생각하지만 출력이 전혀 인쇄되지 않고 중단됩니다. 나는 또한 다른 많은 조합을 시도했지만 대부분 출력이 인쇄되지 않고 중단되었습니다.

Qemu가 터미널에 출력되지 않고(그리고 빈 Qemu 창과 함께) 중단되는 원인에 대한 설명이 필요합니다. 이는 -M으로 로드된 시스템과 dtb 파일 및/또는 커널 간의 불일치로 인해 발생합니까? 정확히 일치하지 않는 것은 무엇입니까? 사용된 메모리 주소인가요? 사용 가능한 주변 장치?

아니면 이것은 qemu-system-arm의 정상적인 동작입니까? 제한된 하드웨어 세트에서만 작동하고 다른 모든 항목에는 일치하는 VM을 정확하게 구성하기 위해 하드웨어 아키텍처에 대한 자세한 지식이 필요합니까?

아니면 qemu 설치에 문제가 있나요? 위에서 언급했듯이 약 12개의 예가 있습니다(예:이것그리고이것) 이것은 나에게 효과가 없습니다. 나는 이것이 다른 버전의 qemu에 대한 예제이거나 뭔가 미묘하게 잘못된 일을 하고 있기 때문이라고 생각했지만 어쩌면 아닐 수도 있습니까?

관련 정보