การจำลองบนพีซี Linux


48

ฉันจะเชื่อมต่อการ์ด SD ที่มี Raspberry Pi OS กับ Linux PC ของฉันและบูตระบบปฏิบัติการในโปรแกรมจำลองได้อย่างไร

ทำไม VMWare ถึงไม่ทำงาน

อะไรคือข้อ จำกัด ของวิธีนี้?

ที่เกี่ยวข้อง: การจำลองบนพีซี Windows


นี่ไม่ใช่คำถาม virtualization แทนที่จะเป็นคำถามเลียนแบบใช่ไหม
Zoot

1
ฉันไม่ชอบการจำลองการแก้ไขการจำลองเสมือน ... เราสามารถพูดคุยเกี่ยวกับมันได้หรือไม่
Alex Chamberlain

2
ปัญหาพื้นฐานคือ Pi มีซีพียู ARM ซึ่งเข้ากันไม่ได้กับ x86 ซึ่งเป็นสิ่งที่ VMWare รู้วิธีเรียกใช้ คุณต้องการโปรแกรมจำลอง
Thorbjørn Ravn Andersen

โปรดทราบว่าเดเบียนรุ่นที่ปรับแต่งด้วยคุณสมบัติมากมายของ Raspbian (รวมถึง PIXEL สภาพแวดล้อมเดสก์ท็อปและแอพพลิเคชั่นส่วนใหญ่) สามารถดาวน์โหลดได้จากเว็บไซต์ Raspberry Pi
angussidney

คำตอบ:


52

ใช่มันเป็นไปได้อย่างสมบูรณ์ อย่างไรก็ตามในความเป็นจริงมันแตกต่างกันเล็กน้อยกับวิธีที่คุณคิด


คำนำ

การ์ด SD มีภาพของระบบปฏิบัติการ และทำงานโดยขยายภาพนี้เมื่อเปิดอุปกรณ์

อย่างที่ฉันคาดหวังว่าคุณรู้แล้วคุณแฟลชภาพนี้ไปยังการ์ด SD เพื่อสร้างระบบการทำงาน อย่างไรก็ตามสิ่งที่คุณสามารถทำได้ก่อนที่คุณจะฉายภาพนั้นจะเล่นโดยใช้QEMUซึ่งเป็นโปรแกรมจำลองโปรเซสเซอร์และช่วยให้เราเลียนแบบชุดคำสั่ง ARM

ด้วยวิธีนี้การเปลี่ยนแปลงใด ๆ ที่คุณทำกับรูปภาพ (การติดตั้งการคอมไพล์และอื่น ๆ ) จะยังคงอยู่หลังจากคุณแฟลชไปยังการ์ด SD

ตอนนี้ฉันจะพูดถึงวิธีการใช้ QEMU เพื่อโหลดรูปภาพ ฉันจะสาธิตด้วยอิมเมจ Arch Linux แต่กระบวนการควรเหมือนกันโดยไม่คำนึงถึง


ใช้ QEMU

Prerequesites

คุณจะต้องได้รับ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 ดังนั้นตรวจสอบที่เก็บ distro ของคุณก่อน สามารถทำได้เช่นนั้น

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)

หมายเหตุ: ฉันไม่คิดว่าขั้นตอนนี้จำเป็นสำหรับ Debian มีคนโปรดยืนยัน

โชคดีที่มีรูปภาพที่เตรียมไว้ให้แล้วและคุณสามารถใช้รูปได้จากที่นี่ ( ดาวน์โหลดโดยตรง )

สิ่งที่ต้องทำ: สาธิตวิธีรวบรวมอิมเมจเคอร์เนลที่นี่หรือไม่

เริ่มต้น VM

ตอนนี้คุณควรจะมี:

  • ไฟล์ img ที่คุณสามารถตรวจสอบได้โดยใช้ sha1 ที่ให้มา (แนะนำ)
  • รูปภาพเคอร์เนล (zImage)
  • QEMU สำหรับ ARM

Virtual Machine สามารถเริ่มต้นได้โดยใช้คำสั่ง long-winded ต่อไปนี้:

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

โปรดทราบว่าคุณจะมีพื้นที่เก็บข้อมูลหลายร้อยเมกะไบต์โดยใช้วิธีนี้ (สิ่งใดก็ตามที่มีอยู่ในรูปภาพ) ฮาร์ดดิสก์เสมือนสามารถสร้างขึ้นโดยต่อไปนี้คู่มือผู้ใช้ QEMU


นี่คือสิ่งที่ฉันเป็นหลังจาก - ขอบคุณ! นี่คือคำตอบอ้างอิงที่ดี
อเล็กซ์ L

@ Alex ไม่มีปัญหาแจ้งให้เราทราบหากคุณต้องการให้ฉันทำอย่างละเอียด นอกจากนี้บอกฉันว่าคุณทำให้รูปภาพเดเบียนทำงานได้หรือไม่และเราสามารถเพิ่มลงในคำแนะนำได้ถ้าต่างกัน
Jivings

มีคำแนะนำอย่างละเอียดพอสมควรที่นี่
อเล็กซ์ L

@ Alex เป็นคนดีฉันไม่เห็น
Jivings

2
ส่วนที่เหลือปิดดังนั้นสิ่งที่ฉันทำได้คือโหวตให้เปิดใหม่อีกครั้ง
Jivings

8

Ubuntu 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 raspi2ถูกเพิ่มใน QEMU 2.6.0 และ Ubuntu 16.04 มี QEMU 2.5.0 เท่านั้นดังนั้นเราต้องคอมไพล์ QEMU จากแหล่งที่มา แต่นี่ไม่ใช่เรื่องยาก
  • GUI แสดง แต่ไม่ตอบสนองต่อเมาส์ / คีย์บอร์ดทดสอบบนทั้ง SDL และ VNC แต่ CLI ทำงานได้อย่างสมบูรณ์แบบ ดังนั้นคุณอาจใช้ภาพ Lite ที่ใช้งาน GUI ได้ในตอนนี้
  • ไม่มีเครือข่าย

Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, เคอร์เนลที่ถูกดัดแปลง

วิธีนี้ใช้-M versatilepbซึ่งมีอยู่ใน QEMU 2.5.0 ของ Ubuntu 16.04

ข้อเสียคือคุณต้องดาวน์โหลดเคอร์เนลที่แก้ไข (ดูที่การเลียนแบบด้วย 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. ปรับเปลี่ยนภาพ Raspbian ตามที่กล่าวไว้ที่: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331b9f922b0f33e2314

    สรุป:

    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
    

[ล้มเหลว] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, เคอร์เนลวานิลลา

เกี่ยวกับเรื่องนี้ใหม่อูบุนตู 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 โลหะเปลือย RPI3 บน QEMU

https://github.com/bztsrc/raspi3-tutorialเป็นชุดที่ดีของตัวอย่างที่ใช้งานกับ QEMU, ultraquick เริ่มต้นได้ที่: วิธีการจำลอง QEMU สำหรับโลหะเปลือยภาพ Raspberry Pi


2
เพื่อนคุณยอดเยี่ยม!
Subin

4

คุณไม่สามารถทำสิ่งที่คุณแนะนำได้เพราะ Raspberry Pi มีสถาปัตยกรรมโปรเซสเซอร์ที่แตกต่างจากพีซีส่วนใหญ่ ในขณะที่พีซีส่วนใหญ่ใช้ x86 แต่ RPi เป็นคอมพิวเตอร์ที่ใช้ ARM

นี่คือเหตุผลเดียวกับสาเหตุที่คุณไม่สามารถเรียกใช้ตัวอย่างเช่น Microsoft Windows บน RPi

VmWare ไม่ทำงานเพราะมันสามารถจำลองระบบปฏิบัติการ x86 แบบเสมือนได้เท่านั้น (32 บิตและ 64 บิต) มีอีมูเลเตอร์อื่น ๆ ที่สามารถจำลองเสมือน ARM เช่น QEMU ได้ แต่เหล่านั้นกำลังรันการจำลองซอฟต์แวร์เต็มรูปแบบโดยไม่รองรับ CPU virtualizaton ดั้งเดิมดังนั้นคุณสามารถคาดหวังว่ามันจะทำงานช้า


3
คุณสามารถรวมข้อมูลเพิ่มเติมเกี่ยวกับวิธีเลียนแบบ RasPi ใน x86 (เช่นกับ QEMU) ได้หรือไม่? นั่นคือสิ่งที่ฉันอยากจะมุ่งเน้นไปที่คำถามนี้แม้ว่าคำอธิบายจะได้รับการชื่นชม
อเล็กซ์ L

3
ขออภัยที่จะลงคะแนน แต่นี่ไม่ได้อธิบายวิธีการบรรลุสิ่งที่ผู้ถามต้องการ
G-

ในทางกลับกันมันจะเน้นประเด็นอื่น ๆ ของคำถามที่คำตอบอื่นไม่ได้ ฉันคิดว่า downvotes ของคุณไม่ได้รับการรับรอง (มันไม่เหมือนคำถามนี้นำไปสู่อย่างใดอย่างหนึ่ง)

3
แม้ว่าจะไม่ได้รับการสนับสนุนจากเจ้าของภาษา แต่ความช้านั้นค่อนข้างสัมพันธ์กันเพราะคุณอาจทำการจำลองเสมือนบนเครื่องที่ทรงพลังมากกว่าราสเบอร์รี่ปี่
Kenneth Wilke

0

คุณสามารถลองใช้ตัวจำลอง Raspberry Pi ที่มาพร้อมกับเซ็นเซอร์บรรทัดคำสั่งและตัวแก้ไขไฟล์ได้ที่ iotify.io ตรวจสอบเอกสารของเราที่https://docs.iotify.io/เพื่อเริ่มต้นกับโปรเจ็กต์ต่าง ๆ , OS และทำให้คุณคุ้นเคยกับสภาพแวดล้อมการทำงานของ Raspberry Pi

ป้อนคำอธิบายรูปภาพที่นี่


1
ในขณะที่เทคนิคนี้เป็นคำตอบคุณค่อนข้างชัดเจนว่าใช้เว็บไซต์ของเราเพื่อโฆษณาฟรี ในขณะที่สิ่งที่คุณเสนออาจฟรี แต่ก็ยังไม่เป็นไร เราขอขอบคุณที่คุณมีส่วนร่วมกับชุมชน แต่โปรดโฆษณาของคุณที่อื่น
Darth Vader

4
@DarthVader: เนื่องจากผู้โพสต์ทำให้ทราบว่าพวกเขามีส่วนเกี่ยวข้องกับผลิตภัณฑ์และมันจะตอบคำถามฉันมีแนวโน้มที่จะเรียกมันว่ายอมรับได้
Jacobm001
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.