Linux PC에서 에뮬레이션


48

Raspberry Pi OS가 포함 된 SD 카드를 Linux PC에 연결하고 에뮬레이터에서 OS를 부팅하려면 어떻게해야합니까?

VMWare가 작동하지 않는 이유는 무엇입니까?

이 방법의 한계는 무엇입니까?

관련 : Windows PC에서 에뮬레이션


에뮬레이션 질문 대신 가상화 질문이 아닙니까?
Zoot

1
가상화 편집에 대한 에뮬레이션이 마음에 들지 않습니다. 대화 할 수 있습니까?
Alex Chamberlain

2
기본 문제는 Pi에 VM CPU가 실행 방법을 알고있는 x86과 호환되지 않는 ARM CPU가 있다는 것입니다. 에뮬레이터가 필요합니다.
Thorbjørn Ravn Andersen

(데스크탑 환경 픽셀, 대부분의 응용 프로그램을 포함하여) Raspbian의 많은 기능과 사용자 정의 데비안의 버전에서 다운로드 사용 가능한 유의 라즈베리 파이 웹 사이트
angussidney

답변:


52

예, 이것은 가능합니다. 그러나 실제로는 생각하는 방식과 약간 다릅니다.


전문

SD 카드에는 운영 체제 이미지 가 포함되어 있습니다 . 장치 전원을 켤 때이 이미지를 부풀려서 작동합니다.

이미 알고 있듯이이 시스템을 작동시키기 위해이 이미지를 SD 카드에 플래시합니다. 그러나 이미지를 플래시 하기 전에 수행 할 수있는 작업 은 프로세서 에뮬레이터QEMU를 사용하여 이미지를 재생 하는 것이며 ARM 명령어 세트를 에뮬레이션 할 수 있습니다.

이런 식으로 SD 카드에 이미지를 플래시 한 후에도 이미지 변경 (설치, 컴파일 등)이 그대로 유지됩니다.

이제 QEMU를 사용하여 이미지를로드하는 방법에 대해 설명하겠습니다. Arch Linux 이미지로 시연 할 것이지만 프로세스는 관계없이 동일해야합니다.


QEMU 사용

전제 조건

시스템에 대한 QEMU 를 확보 해야합니다. QEMU에는 입력 장치가 작동하기 위해서는 SDL 개발 패키지가 설치되어 있어야하며 패키지 관리자에서 제공해야하는 요구 사항이 하나만 있어야합니다.

일반 패키지 관리자를 사용하여 패키지를 다운로드하는 것이 좋습니다.

아치 :

sudo pacman -S sdl qemu

우분투 :

최신 버전 (14.04 이후)에는 패키지가 있습니다.

sudo apt-get install qemu-system-arm

이전 버전의 경우 :

sudo apt-get install libsdl-dev
sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get update
sudo apt-get install qemu-system

QEMU를 직접 구축

또는 QEMU를 직접 구축 할 수 있습니다. 새 버전을 사용하고 싶을 때 좋지만 컴파일 중에 느리고 많은 오류가 발생할 수 있습니다! 웹 사이트에서 QEMU를 빌드하는 경우 ARM 지원을 위해 컴파일해야합니다. 먼저 배포 저장소를 확인하십시오. 이것은 그렇게 할 수 있습니다;

mkdir rpi-emu && cd rpi-emu
wget http://wiki.qemu.org/download/qemu-1.1.0-1.tar.bz2
tar xvjf qemu-1.1.0-1.tar.bz2
cd qemu-1.1.0-1
./configure –target-list=arm-softmmu,arm-linux-user
make
sudo make install

다음과 같은 ARM 지원이 있는지 확인하십시오.

qemu-system-arm --version
QEMU emulator version 1.0,1, Copyright (c) 2003-2008 Fabrice Bellard

이미지 얻기

우리는 Arch Linux와 함께 작업하고 있으므로 Arch Arm 이미지를 사용할 것입니다. 그러나 이것을 작업하고 싶거나 이미 이미지가있는 것으로 바꾸십시오. 이 경우이 단계를 건너 뛰십시오.

wget http://anorien.csc.warwick.ac.uk/mirrors/raspberrypi.org/images/archlinuxarm/archlinuxarm-29-04-2012/archlinuxarm-29-04-2012.zip
unzip archlinuxarm-29-04-2012.zip 

QEMU가 작동하려면 커널 이미지 (.img 파일 안에 있음)도 필요합니다.

참고 : 데비안에서는이 단계가 필요하다고 생각하지 않습니다. 누군가 확인해주세요.

운 좋게도 사전 컴파일 된 이미지가 있으며 여기 에서 직접 사용할 수 있습니다 ( 직접 다운로드 ).

TODO : 여기서 커널 이미지를 컴파일하는 방법을 보여 주겠습니까?

VM 시작

이제 다음을 갖추어야합니다.

  • 제공된 sha1을 사용하여 확인할 수있는 img 파일 (권장).
  • 커널 이미지 (zImage).
  • ARM 용 QEMU

다음 긴 명령을 사용하여 가상 머신을 시작할 수 있습니다.

qemu-system-arm -kernel zImage -cpu arm1176 -M versatilepb -serial stdio -append "root=/dev/sda2" -hda archlinuxarm-29-04-2012.img -clock dynticks

이 방법을 사용하면 수백 메가 바이트의 저장 공간 만 남게됩니다 (이미지에 여분의 공간이 무엇이든). QEMU 사용 설명서 에 따라 가상 하드 디스크를 만들 수 있습니다 .


이것이 내가 추구했던 것보다 더 많은 것입니다-감사합니다! 이것은 훌륭한 참고 답변입니다
Alex L

@Alex 문제 없습니다. 정교화해야하는 경우 알려주십시오. 또한, 데비안 이미지가 작동하는지 알려주고 다른 경우 지침에 추가 할 수 있습니다.
Jivings

여기에는 상당히 철저한 연습이 있습니다
Alex L

@Alex 그것은 좋은 것입니다, 나는 그것을 보지 못했습니다.
Jivings

2
다른 하나는 닫혀 있으므로 다시 열 수 있습니다.
Jivings

8

우분투 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의 최신 버전에서만 작동하며 https://askubuntu.com/questions/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 에뮬레이션을 수행하는 방법


2
야, 너 대단해!
Subin

4

Raspberry Pi는 대부분의 PC와 다른 프로세서 아키텍처를 가지고 있기 때문에 제안하는 것을 수행 할 수 없습니다. 대부분의 PC는 x86 기반이지만 RPi는 ARM 기반 컴퓨터입니다.

RPi에서 Microsoft Windows와 같이 실행할 수없는 이유와 같은 이유 입니다.

VmWare는 x86 기반 운영 체제 (32 비트 및 64 비트) 만 가상화 할 수 있으므로 작동하지 않습니다. QEMU와 같이 ARM을 가상화 할 수있는 다른 에뮬레이터가 있지만 기본 CPU 가상화 지원없이 전체 소프트웨어 에뮬레이션을 실행하므로 속도가 느릴 것으로 예상 할 수 있습니다.


3
x86에서 RasPi 에뮬레이션 하는 방법 (예 : QEMU)에 대한 추가 정보를 포함 할 수 있습니까? 그 설명에 감사하지만, 나는이 질문에 정말로 집중하고 싶었습니다.
Alex L

3
다운 투표를해서 죄송 합니다만, 이것은 asker가 필요로하는 것을 달성하는 방법을 설명하지 않습니다.
G-.

반면에, 그것은 다른 답변이하지 않는 질문의 다른 지점을 다루고 있습니다. 난 당신의 downvotes가

3
기본 virt 지원이 없더라도 라즈베리 파이보다 훨씬 강력한 머신에서 가상화 할 수 있기 때문에 속도가 상대적으로 느립니다
Kenneth Wilke

0

iotify.io에서 센서, 명령 행 및 파일 편집기에 포함 된 Raspberry Pi 시뮬레이터를 쉽게 시험해볼 수 있습니다. https://docs.iotify.io/ 에서 문서를 확인 하여 다양한 프로젝트, OS를 시작하고 Raspberry Pi 작업 환경에 익숙해 지십시오.

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


1
기술적으로 이것은 정답이지만 무료 광고를 위해 당사 사이트를 사용하고 있습니다. 당신이 제공하는 것은 무료 일 수 있지만 여전히 괜찮지는 않습니다. 커뮤니티에 대한 귀하의 기여에 감사 드리지만 다른 곳에서 귀하의 광고를 보시기 바랍니다.
다스 베이더

4
@DarthVader : 포스터가 제품과 관련이 있다는 사실을 알리고 질문에 대한 답변을 제공했기 때문에 나는 그것을 받아 들일 만하다고 생각합니다.
Jacobm001
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.