ไม่สามารถจำลอง Raspberry Pi โดยใช้ Qemu: Kernel Panic


15

ฉันพยายามทำตามคำแนะนำต่าง ๆ บนอินเทอร์เน็ตเพื่อเลียนแบบ Raspberry Pi บนเครื่อง Fedora 22 ของฉัน ฉันได้พบคำถามนี้: เลียนแบบราสเบียนกับ QEMUและใช้มันเพื่อค้นหาkernel-qemuเพื่อคว้าเคอร์เนล ฉันดาวน์โหลด2015-09-24-raspbian-jessie.imgจากคนดี ๆ ที่ Raspberry 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/จากนั้นดาวน์โหลดรูปภาพ Raspian ที่คุณต้องการที่https://www.raspberrypi.org/ ดาวน์โหลด / raspbian / ขณะนี้ Jessie และ Wheezy กำลังขึ้นทั้งสองแห่ง แต่ไม่มีการรับประกันในอนาคตว่าเคอร์เนลที่เหมาะสมจะมีอยู่ในไซต์ Github นั้น ไม่ว่าในกรณีใดฉันไม่ได้รู้สึกประทับใจกับความเร็วตัวเองดังนั้นฉันจึงกำลังมองหาการวาง Pi จริงลงในพอร์ตเครือข่ายแบบมีสายของแล็ปท็อปของฉันและเปิดเครื่องผ่านแบตเตอรี่เสริมมือถือ 5200 mAh และใช้ VNC บนแล็ปท็อป จอแสดงผล

ฉันไม่ได้ทำให้เจสซีทำงาน นั่นเป็นปัญหา - ฉันมีเคอร์เนล Wheezy และอิมเมจเจสซี่ แต่ฉันไม่มีเคอร์เนลเจสซี


1
คุณสามารถเพิ่มคำตอบโดยละเอียดว่าคุณแก้ไขได้อย่างไรโดยใช้เคอร์เนลล่าสุด มันจะช่วยให้ผู้ใช้รายอื่นพยายามเลียนแบบเจสซี ขอบคุณ
dhruvvyas90

3
ฉันลองเคอร์เนล jessie และรูปภาพ jessie และพวกเขาล้มเหลวด้วยข้อผิดพลาดเดียวกัน เคอร์เนล 4.1 ( github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/ … ) และโพสต์ของเจสซีประจำพฤษภาคม 2015 จาก Raspbian
Michael McGarrah

ไม่มีความผิด แต่ไม่มีสิ่งเช่นเจสซีเคอร์เนล ด้วยraspbian netinstallerคุณสามารถเลือกที่จะติดตั้ง wheezy หรือ jessie และในทั้งสองกรณีเคอร์เนลเดียวกันจะได้รับการติดตั้ง
Diederik de Haas

แม้ว่ามันจะเป็นความจริงที่ว่าชื่อของเมล็ดนั้นเป็นรุ่น แต่ปัญหาของฉันไม่ได้เป็นวิธีการดาวน์โหลดโปรแกรมติดตั้ง raspbian netinstaller ปัญหาของฉันคือจับคู่ไฟล์รูปภาพจากคนดี ๆ ที่ Raspberry Pi กับรุ่นเคอร์เนลที่เหมาะสม ในอนาคตฉันหวังว่าคนที่เจอปัญหานี้จะดูที่ข้อความแสดงข้อผิดพลาดของฉันและตระหนักถึงปัญหาที่อาจเกิดขึ้น
Mike S

@MichaelMcGarrah ให้มันทำงานหลังจากอ่านวิกิของ repo นั้น: raspberrypi.stackexchange.com/a/53993/33424คุณต้องปรับแต่งภาพ Raspbian นิดหน่อย
Ciro Santilli 新疆改造中心法轮功六四事件

1

โปรดดูที่เคอร์เนลที่เปิดใช้งาน qemu ของฉัน: https://github.com/diederikdehaas/raspbian-kernel
ในข้อความยืนยันคุณสามารถค้นหาคำอธิบายโดยละเอียดเกี่ยวกับสิ่งที่เปลี่ยนแปลงไป
ส่วนใหญ่อ้างอิงจากบทความนี้: https://web.archive.org/web/20131210001638/http://xecdesign.com/compiling-a-kernel/


1

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 รุ่นล่าสุดเท่านั้นและวิธีการอื่น ๆ ที่: /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 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


วิธีการของคุณlosetupซับซ้อนเกินไป คุณสามารถแทนเพียงแค่ใช้fdisk -l your-image.imgและจากนั้นใช้ชดเชยพาร์ติชันในตัวเลือกmount -o loop,offset=$((512*YOUR_OFFSET))
Ruslan

-M raspi2 ไม่ทำงาน
zhaofeng-shu33

0

ไกด์ส่วนใหญ่ล้าสมัยและมีลิงก์ที่ใช้งานไม่ได้ คุณต้องใช้เคอร์เนลที่ถูกปะแก้ซึ่งตรงกับเวอร์ชั่น raspbian ที่คุณใช้

คำแนะนำต่อไปนี้ทำงานเมื่อวันที่ feb 2017 มันมีสคริปต์ที่ดูแลการเปลี่ยนภาพ raspbian สำหรับทำงานบน QEMU และยังแบ่งปันการเชื่อมต่อเครือข่ายของคุณกับ raspbian โดยอัตโนมัติ

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


-1

คุณสามารถดาวน์โหลดเคอร์เนลที่กำหนดเองของฉัน (4.1.7) สำหรับ Raspbian Jessie บน GitHub ของฉันpolaco1782 ทำตามคำแนะนำเกี่ยวกับไฟล์ doc


1
เคอร์เนลของคุณส่งฉันไปที่พรอมต์โหมดฉุกเฉินทุกครั้งที่ฉันพยายามเลียนแบบ ฉันทำตามที่เขียนไว้ในไฟล์ read me (ดูโพสต์ล่าสุดเมื่อ -> raspberrypi.org/forums/viewtopic.php?t=112259 ) คุณสามารถแก้ไขคำตอบของคุณเพื่อแสดงทีละขั้นตอนว่าคุณเปลี่ยนอะไรในภาพเจสซีพื้นฐานเพื่อให้มันทำงานได้ มันจะเป็นประโยชน์สำหรับผู้ใช้คนอื่น ๆ ในขณะนี้ที่ภาพ jessie เป็นภาพสดผู้ใช้มากขึ้นและมากขึ้นจะเลียนแบบ jessie ใน qemu ขอบคุณล่วงหน้า.
dhruvvyas90

คุณสามารถขยายคำตอบของคุณเพื่ออธิบายเกี่ยวกับเคอร์เนลของคุณเองได้ไหม?
Greenonline

ฉันสามารถแก้ไขปัญหาของฉันได้โดยแสดงความคิดเห็นในfstabรายการ mmcblk
dhruvvyas90

@Greenonline เนื่องจาก qemu ไม่รองรับแพลตฟอร์ม Rpi จึงมีการปรับแต่งเคอร์เนลที่จำเป็นในการจำลอง rpi บน Qemu คุณไม่สามารถใช้ Rpi เคอร์เนลและทำให้มันออกนอกกรอบได้
dhruvvyas90
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.