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.