ฉันจะเชื่อมต่อการ์ด SD ที่มี Raspberry Pi OS กับ Linux PC ของฉันและบูตระบบปฏิบัติการในโปรแกรมจำลองได้อย่างไร
ทำไม VMWare ถึงไม่ทำงาน
อะไรคือข้อ จำกัด ของวิธีนี้?
ที่เกี่ยวข้อง: การจำลองบนพีซี Windows
ฉันจะเชื่อมต่อการ์ด SD ที่มี Raspberry Pi OS กับ Linux PC ของฉันและบูตระบบปฏิบัติการในโปรแกรมจำลองได้อย่างไร
ทำไม VMWare ถึงไม่ทำงาน
อะไรคือข้อ จำกัด ของวิธีนี้?
ที่เกี่ยวข้อง: การจำลองบนพีซี Windows
คำตอบ:
ใช่มันเป็นไปได้อย่างสมบูรณ์ อย่างไรก็ตามในความเป็นจริงมันแตกต่างกันเล็กน้อยกับวิธีที่คุณคิด
การ์ด SD มีภาพของระบบปฏิบัติการ และทำงานโดยขยายภาพนี้เมื่อเปิดอุปกรณ์
อย่างที่ฉันคาดหวังว่าคุณรู้แล้วคุณแฟลชภาพนี้ไปยังการ์ด SD เพื่อสร้างระบบการทำงาน อย่างไรก็ตามสิ่งที่คุณสามารถทำได้ก่อนที่คุณจะฉายภาพนั้นจะเล่นโดยใช้QEMUซึ่งเป็นโปรแกรมจำลองโปรเซสเซอร์และช่วยให้เราเลียนแบบชุดคำสั่ง ARM
ด้วยวิธีนี้การเปลี่ยนแปลงใด ๆ ที่คุณทำกับรูปภาพ (การติดตั้งการคอมไพล์และอื่น ๆ ) จะยังคงอยู่หลังจากคุณแฟลชไปยังการ์ด SD
ตอนนี้ฉันจะพูดถึงวิธีการใช้ QEMU เพื่อโหลดรูปภาพ ฉันจะสาธิตด้วยอิมเมจ Arch Linux แต่กระบวนการควรเหมือนกันโดยไม่คำนึงถึง
คุณจะต้องได้รับ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 มีคนโปรดยืนยัน
โชคดีที่มีรูปภาพที่เตรียมไว้ให้แล้วและคุณสามารถใช้รูปได้จากที่นี่ ( ดาวน์โหลดโดยตรง )
สิ่งที่ต้องทำ: สาธิตวิธีรวบรวมอิมเมจเคอร์เนลที่นี่หรือไม่
ตอนนี้คุณควรจะมี:
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
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, เคอร์เนลวานิลลา
รวบรวม 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`
ดาวน์โหลดภาพและแตกเคอร์เนลและ dts จากมัน:
ดาวน์โหลดภาพและเปิดเครื่องรูดมัน:
wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip
unzip 2016-05-27-raspbian-jessie.zip
เมานต์อิมเมจที่สองของพาร์ติชัน วิธีที่ง่ายที่สุดคือ:
sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
วิธีนี้ใช้ได้กับlosetup
Ubuntu 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
วิ่ง:
./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 จากแหล่งที่มา แต่นี่ไม่ใช่เรื่องยากUbuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, เคอร์เนลที่ถูกดัดแปลง
วิธีนี้ใช้-M versatilepb
ซึ่งมีอยู่ใน QEMU 2.5.0 ของ Ubuntu 16.04
ข้อเสียคือคุณต้องดาวน์โหลดเคอร์เนลที่แก้ไข (ดูที่การเลียนแบบด้วย Qemu: ทำไมเคอร์เนลพิเศษ? ) และปรับเปลี่ยนภาพดังนั้นจึงเป็นตัวแทนของระบบจริงน้อยลง
เราเลือก4.4.12
ตั้งแต่นั้นเป็นรุ่นเคอร์เนลในภาพ Raspbian
กระบวนการในการสร้างเคอร์เนล blob นั้นได้อธิบายไว้ในที่เก็บที่: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
ทำไมต้องใช้อิมเมจเคอร์เนลพิเศษนี้: การจำลองด้วย Qemu: ทำไมต้องใช้เคอร์เนลพิเศษ
ปรับเปลี่ยนภาพ Raspbian ตามที่กล่าวไว้ที่: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331b9f922b0f33e2314
สรุป:
เมานต์อิมเมจแบบเดียวกับที่เราทำ-M raspi2
แต่ใช้พาร์ติชั่นที่สองแทนอันแรก:
sudo mount /dev/loop0p2 /mnt/rpi
แก้ไขภาพ:
# 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
วิ่ง:
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
คุณไม่สามารถทำสิ่งที่คุณแนะนำได้เพราะ Raspberry Pi มีสถาปัตยกรรมโปรเซสเซอร์ที่แตกต่างจากพีซีส่วนใหญ่ ในขณะที่พีซีส่วนใหญ่ใช้ x86 แต่ RPi เป็นคอมพิวเตอร์ที่ใช้ ARM
นี่คือเหตุผลเดียวกับสาเหตุที่คุณไม่สามารถเรียกใช้ตัวอย่างเช่น Microsoft Windows บน RPi
VmWare ไม่ทำงานเพราะมันสามารถจำลองระบบปฏิบัติการ x86 แบบเสมือนได้เท่านั้น (32 บิตและ 64 บิต) มีอีมูเลเตอร์อื่น ๆ ที่สามารถจำลองเสมือน ARM เช่น QEMU ได้ แต่เหล่านั้นกำลังรันการจำลองซอฟต์แวร์เต็มรูปแบบโดยไม่รองรับ CPU virtualizaton ดั้งเดิมดังนั้นคุณสามารถคาดหวังว่ามันจะทำงานช้า
คุณสามารถลองใช้ตัวจำลอง Raspberry Pi ที่มาพร้อมกับเซ็นเซอร์บรรทัดคำสั่งและตัวแก้ไขไฟล์ได้ที่ iotify.io ตรวจสอบเอกสารของเราที่https://docs.iotify.io/เพื่อเริ่มต้นกับโปรเจ็กต์ต่าง ๆ , OS และทำให้คุณคุ้นเคยกับสภาพแวดล้อมการทำงานของ Raspberry Pi