Qemu를 사용하여 라즈베리 파이를 에뮬레이션 할 수 없음 : 커널 패닉


15

Fedora 22 컴퓨터에서 Raspberry Pi를 에뮬레이트하기 위해 인터넷에서 다양한 가이드를 따르려고합니다. 나는이 질문을 발견했다 : QEMU로 raspbian을 에뮬레이트 하고 그것을 사용 하여 커널을 잡기 위해 kernel-qemu 를 찾는 데 사용했다 . 나는 2015-09-24-raspbian-jessie.imgRaspberry Pi의 좋은 사람들로부터 다운로드 했습니다.

실행하려고 qemu-system-arm하면 커널 패닉이 발생합니다. 내가 놓친 것이 있습니까?

qemu-system-arm입력 한 명령 줄 은 다음과 같습니다 .

qemu-system-arm -cpu arm1176 -m 256 -M versatilepb -no-reboot -nographic -kernel kernel-qemu -appc=2 console=ttyAMA0 rw" -hda 2015-09-24-raspbian-jessie.img -net nic -net user,hostfwd=tcp::9999-:22

커널 메시지가 뒤 따른다 :

sd 0:0:0:0: [sda] Attached SCSI disk
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@fluxnic.net>
eth0: SMC91C11xFD (rev 1) at d089a000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
mousedev: PS/2 mouse device common for all mice
TCP cubic registered
NET: Registered protocol family 17
input: AT Raw Set 2 keyboard as /devices/fpga:06/serio0/input/input0
input: ImExPS/2 Generic Explorer Mouse as /devices/fpga:07/serio1/input/input1
EXT2-fs (sda2): error: couldn't mount because of unsupported optional features (244)
EXT4-fs (sda2): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (sda2): recovery complete
EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 8:2.
devtmpfs: mounted
Freeing init memory: 120K
Kernel panic - not syncing: Attempted to kill init!
[<c0032bec>] (unwind_backtrace+0x0/0xf0) from [<c03064dc>] (panic+0x58/0x170)
[<c03064dc>] (panic+0x58/0x170) from [<c0044054>] (do_exit+0x5d0/0x68c)
[<c0044054>] (do_exit+0x5d0/0x68c) from [<c004435c>] (do_group_exit+0x40/0xb0)
[<c004435c>] (do_group_exit+0x40/0xb0) from [<c004ed48>] (get_signal_to_deliver+0x1a8/0x378)
[<c004ed48>] (get_signal_to_deliver+0x1a8/0x378) from [<c002f124>] (do_signal+0x90/0x518)
[<c002f124>] (do_signal+0x90/0x518) from [<c002fa64>] (do_notify_resume+0x48/0x54)
[<c002fa64>] (do_notify_resume+0x48/0x54) from [<c002cc38>] (work_pending+0x24/0x28)

2
흐릿한 이미지를 모방하려고 했습니까? 커널이 작동하면 jessie 여야합니다.
dhruvvyas90

아! 예, 커널이 img와 일치하지 않으면 문제가 발생합니다! 희미한 이미지가 작동합니다 ... 감사합니다.
Mike S

답변:


4

@dastaan이 말했듯이 커널 버전은 img 파일과 일치해야합니다. 4.1 커널 버전 이미지 파일을 3.18 커널과 함께 사용하려고했습니다.

이제 올바른 이미지를 사용하고 있습니다.

감사!

편집 :이 작업을하는 것은 매우 간단합니다 : https://github.com/dhruvvyas90/qemu-rpi-kernel/ 에서 이미지를 가져온 다음 https://www.raspberrypi.org/ 에서 원하는 해당 Raspian 이미지를 다운로드 하십시오 다운로드 / raspbian / . 현재 Jessie와 Wheezy는 두 곳 모두에 있지만 향후 Github 사이트에서 적절한 커널을 사용할 수 있다는 보장은 없습니다. 어쨌든, 나는 속도에 너무 감명받지 않았기 때문에 랩톱의 유선 네트워크 포트에 실제 Pi를 넣고 5200 mAh 핸드폰 보조 배터리를 통해 전원을 공급하고 랩톱에서 VNC를 사용하는 것을보고 있습니다. 디스플레이.

나는 제시가 일하지 못하게했다. 그것은 Wheezy 커널과 Jessie 이미지를 가지고 있었지만 Jessie 커널은 없었습니다.


1
최신 커널을 사용하여 어떻게 해결했는지 자세한 답변을 추가 할 수 있습니까? jessie를 모방하려는 다른 사용자를 도울 것입니다. 감사.
dhruvvyas90

3
jessie 커널과 jessie 이미지를 시도했지만 동일한 오류로 실패합니다. 4.1 커널 ( github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/… ) 및 일반 jessie post 2015 년 5 월 Raspbian.
Michael McGarrah

공격은 없지만 jessie 커널과 같은 것은 없습니다. raspbian netinstaller 를 사용하면 wheezy 또는 jessie를 설치하도록 선택할 수 있으며 두 경우 모두 동일한 커널이 설치됩니다.
Diederik de Haas

커널이 버전별로 이름이 붙여진 것은 사실이지만 내 문제는 raspbian netinstaller를 다운로드하는 방법이 아닙니다. 내 문제는 Raspberry Pi의 좋은 사람들의 이미지 파일을 적절한 커널 버전과 일치시키는 것이 었습니다. 앞으로이 질문에 부딪힌 사람들이 내 오류 메시지를보고 문제가 무엇인지 깨달을 수 있기를 바랍니다.
Mike S

@MichaelMcGarrah는 해당 리포지토리의 위키를 읽은 후 작동하도록했습니다. raspberrypi.stackexchange.com/a/53993/33424 Raspbian 이미지를 약간 조정해야합니다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件


1

우분투 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, 바닐라 커널

여기에 이미지 설명을 입력하십시오

단계 :

  1. 소스에서 QEMU 2.9.0을 컴파일하십시오.

    sudo apt-get build-dep qemu-system-arm
    git clone --recursive git://git.qemu-project.org/qemu.git
    cd qemu
    git checkout v2.9.0
    ./configure
    make `nproc`
    
  2. 이미지를 다운로드하고 커널과 dts를 추출하십시오.

    1. 이미지를 다운로드하고 압축을 풉니 다 :

      wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip
      unzip 2016-05-27-raspbian-jessie.zip
      
    2. 파티션의 두 번째 이미지를 마운트하십시오. 가장 쉬운 방법은 다음과 같습니다.

      sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
      

      이것은 losetupUbuntu 16.04의 최신 버전에서만 작동하며 /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576

      루프 장치를 인쇄합니다. 예 :

      /dev/loop0
      

      그래서 우리는 :

      sudo mkdir /mnt/rpi
      sudo mount /dev/loop0p1 /mnt/rpi
      cp /mnt/rpi/kernel7.img bcm2709-rpi-2-b.dtb .
      sudo umount /mnt/rpi
      sudo losetup -d /dev/loop0
      
  3. 운영:

    ./arm-softmmu/qemu-system-arm \
        -M raspi2 \
        -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2" \
        -cpu arm1176 \
        -dtb bcm2709-rpi-2-b.dtb \
        -sd 2016-05-27-raspbian-jessie.img \
        -kernel kernel7.img \
        -m 1G \
        -smp 4 \
        -serial stdio \
    ;
    

그런 다음 호스트 터미널에 표시되는 터미널에 로그인 할 수 있습니다.

현재 제한 사항 :

  • -M raspi2QEMU 2.6.0에 추가되었으며 Ubuntu 16.04에는 QEMU 2.5.0 만 있으므로 소스에서 QEMU를 컴파일해야합니다. 그러나 이것은 어렵지 않습니다.
  • GUI는 SDL과 VNC에서 테스트 된 마우스 / 키보드를 보여 주지만 응답하지 않습니다. 그러나 CLI는 완벽하게 작동합니다. 따라서 현재 GUI로 이동 한 Lite 이미지를 사용할 수도 있습니다.
  • 네트워킹 없음

우분투 16.04, QEMU 2.5.0, Raspbian 2016-05-27, 수정 된 커널

이 방법은 -M versatilepbUbuntu 16.04의 QEMU 2.5.0에있는 것을 사용합니다 .

단점은 수정 된 커널을 다운로드하고 ( Qemu로 에뮬레이션 : 왜 추가 커널? ) 이미지를 수정해야하므로 실제 시스템을 덜 대표한다는 것입니다.

  1. 다운로드 : https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie

    우리 4.4.12는 그것이 Raspbian 이미지에서 커널 버전이기 때문에 선택 합니다.

    커널 Blob을 생성하는 프로세스는 https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools 의 저장소에 설명되어 있습니다.

    이 추가 커널 이미지가 필요한 이유 : Qemu로 에뮬레이션 : 왜 추가 커널입니까?

  2. https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c에 언급 된대로 Raspbian 이미지를 수정 하십시오.

    요약:

    1. 에 대한 것처럼 이미지를 마운트 -M raspi2하지만 첫 번째 파티션 대신 두 번째 파티션을 사용하십시오.

      sudo mount /dev/loop0p2 /mnt/rpi
      
    2. 이미지를 편집하십시오.

      # Comment out the line present there with #
      sudo vim /mnt/rpi/etc/ld.so.preload
      # Comment out the lines of type: "/dev/mmcblk*"
      sudo vim /mnt/rpi/etc/fstab
      
  3. 운영:

    sudo apt-get install qemu-system-arm
    qemu-system-arm \
        -kernel kernel-qemu-4.4.12-jessie \
        -cpu arm1176 \
        -m 256 \
        -M versatilepb \
        -no-reboot \
        -serial stdio \
        -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
        -hda 2016-05-27-raspbian-jessie.img
    

[실패] 우분투 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, 바닐라 커널

이 최신 Ubuntu에서는 QEMU 2.8.0이 기본값이므로에 대한 소스에서 QEMU를 컴파일 할 필요가 없습니다 -M raspi2. 그러나 다음 메시지가 표시되면 부팅시 2.8.0이 중단됩니다.

Console: switching to colour frame buffer device 100x30

이것은 -M raspi2여전히 얼마나 불안정한지를 보여줍니다 .

[실패] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, 바닐라 커널

이 새로운 이미지에서 2016-05-27과 동일한 방법을 사용하여 부팅시 커널 패닉이 다음과 같이 표시됩니다.

Please append a correct "root=" boot option; here are the available partitions:
...
[    4.138114] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

bztsrc/raspi3-tutorial QEMU의 RPI3 베어 메탈

https://github.com/bztsrc/raspi3-tutorial는 QEMU에 불과 작업, ultraquick가에서 시작하는 것을 예 좋은 집합은 다음과 같습니다 베어 메탈 라즈베리 파이 이미지 QEMU 에뮬레이션을 수행하는 방법


당신의 방법 losetup은 지나치게 복잡합니다. 대신을 사용 fdisk -l your-image.img하고 파티션의 오프셋 mount옵션을 사용할 수도 -o loop,offset=$((512*YOUR_OFFSET))있습니다.
Ruslan

-M raspi2하지 작업
zhaofeng-shu33

0

대부분의 안내서는 구식이며 끊어진 링크가 포함되어 있습니다. 사용중인 raspbian 버전과 일치하는 패치 된 커널을 사용해야합니다.

다음 안내서는 2017 년 2 월부터 작동합니다.이 안내서는 QEMU에서 실행하기 위해 라스 비안 이미지를 변경하는 스크립트를 특징으로하며 네트워크 연결을 raspbian과 자동으로 공유합니다.

https://ownyourbits.com/2017/02/06/raspbian-on-qemu-with-network-access/


-1

당신은 내 GitHub의에 Raspbian 제시 내 사용자 정의 커널 (4.1.7)을 다운로드 할 수 있습니다 polaco1782을 . doc 파일의 지시 사항을 따르십시오.


1
커널은 내가 에뮬레이션하려고 할 때마다 비상 모드 프롬프트로 보냅니다. 나는 read me 파일로 작성되었습니다. (마지막 게시물-> raspberrypi.org/forums/viewtopic.php?t=112259 참조 ) 기본 jessie 이미지에서 변경된 내용을 단계별로 표시하도록 답을 편집 할 수 있습니까? 제시 이미지가 생겨나면서 점점 더 많은 사용자가 qemu에서 제시를 에뮬레이트 할 것이므로 다른 사용자에게 편리 할 것입니다. 미리 감사드립니다.
dhruvvyas90

커널에 대한 사용자 정의가 무엇인지 설명하기 위해 답변을 확장 할 수 있습니까?
Greenonline

fstabmmcblk 항목 을 주석으로 처리 하여 문제를 해결할 수있었습니다 .
dhruvvyas90

@Greenonline qemu는 Rpi 플랫폼을 지원하지 않으므로 Qemu에서 rpi를 에뮬레이트하는 데 필요한 커널 구성 조정이 있습니다. Rpi 커널을 꺼내서 즉시 사용할 수는 없습니다.
dhruvvyas90
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.