Không thể mô phỏng Raspberry Pi bằng Qemu: Kernel Panic


15

Tôi đang cố gắng làm theo các hướng dẫn khác nhau trên Internet để mô phỏng Raspberry Pi trên máy Fedora 22 của tôi. Tôi đã tìm thấy câu hỏi này: Giả lập raspbian với QEMU và sử dụng nó để tìm kernel-qemu để lấy kernel. Tôi đã tải xuống 2015-09-24-raspbian-jessie.imgtừ những người tốt ở Raspberry Pi.

Khi tôi cố chạy qemu-system-armtôi nhận được một kernel hoảng loạn. Có thiếu điều gì không?

Đây là qemu-system-armdòng lệnh mà tôi đã gõ:

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

Tiếp theo là các thông điệp kernel:

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
Bạn đã thử mô phỏng hình ảnh khò khè? Nếu kernel làm việc với nó, nó phải là jessie.
dhruvvyas90

Ôi, duh! Có khi kernel không khớp với img, mọi thứ sẽ vỡ! Hình ảnh khò khè hoạt động ... Cảm ơn.
Mike S

Câu trả lời:


4

Như @dastaan ​​đã nói, phiên bản kernel cần khớp với tệp img. Tôi đã cố gắng sử dụng tệp hình ảnh phiên bản kernel 4.1 với kernel 3.18.

Bây giờ tôi đang sử dụng hình ảnh phù hợp, nó hoạt động.

Cảm ơn!

Chỉnh sửa: Làm cho điều này hoạt động khá đơn giản: Lấy hình ảnh từ https://github.com/dhruvvyas90/qemu-rpi-kernel/ , sau đó tải xuống hình ảnh Raspian tương ứng bạn muốn tại https://www.raspberrypi.org/ tải xuống / raspbian / . Hiện tại, Jessie và Wheezy đang ở cả hai nơi nhưng không có gì đảm bảo trong tương lai rằng hạt nhân phù hợp sẽ có sẵn trên trang web Github đó. Trong mọi trường hợp, bản thân tôi không ấn tượng lắm về tốc độ, vì vậy tôi đang xem việc đặt một Pi thực sự vào cổng mạng có dây của máy tính xách tay của tôi và cung cấp năng lượng thông qua pin phụ trợ điện thoại 5200 mAh và sử dụng VNC trên máy tính xách tay như một màn hình

Tôi đã không làm cho Jessie làm việc; đó là vấn đề - tôi đã có nhân Wheezy và hình ảnh của Jessie, nhưng tôi không có nhân của cô ấy.


1
Bạn có thể thêm câu trả lời chi tiết về cách bạn giải quyết nó bằng cách sử dụng kernel mới nhất không? Nó sẽ giúp những người dùng khác cố gắng giả lập jessie. Cảm ơn.
dhruvvyas90

3
Tôi đã thử một nhân jessie và hình ảnh jessie và chúng đều thất bại với cùng một lỗi. Một hạt nhân 4.1 ( github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/ chủ ) và bài đăng jessie thông thường tháng 5 năm 2015 từ Raspbian.
Michael McGarrah

Không có hành vi phạm tội, nhưng không có thứ gọi là hạt nhân jessie. Với trình cài đặt mạng raspbian, bạn có thể chọn cài đặt wheezy hoặc jessie và trong cả hai trường hợp, hạt nhân chính xác sẽ được cài đặt.
Diederik de Haas

Mặc dù sự thật là các hạt nhân được đặt tên theo phiên bản, vấn đề của tôi không phải là làm thế nào để tải xuống trình cài đặt mạng raspbian. Vấn đề của tôi là khớp các tệp hình ảnh từ những người tốt ở Raspberry Pi với một phiên bản kernel phù hợp. Trong tương lai, tôi hy vọng rằng những người gặp phải câu hỏi này sẽ xem xét các thông báo lỗi của tôi và nhận ra vấn đề của họ có thể là gì.
Mike S

@MichaelMcGarrah đã làm cho nó hoạt động sau khi đọc wiki của repo đó: raspberrypi.stackexchange.com/a/53993/33424 Bạn phải điều chỉnh hình ảnh Raspbian một chút.
Ciro Santilli 心 心 事件


0

Hầu hết các hướng dẫn đã lỗi thời và chứa các liên kết bị hỏng. Bạn phải sử dụng kernel đã vá phù hợp với phiên bản raspbian bạn đang sử dụng.

Hướng dẫn sau đây hoạt động kể từ feb 2017. Nó có một đoạn script đảm nhiệm việc thay đổi hình ảnh raspbian để chạy trên QEMU và cũng tự động chia sẻ kết nối mạng của bạn với raspbian.

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


0

Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, hạt nhân vani

nhập mô tả hình ảnh ở đây

Các bước:

  1. Biên dịch QEMU 2.9.0 từ nguồn:

    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. Tải về hình ảnh và giải nén kernel và dts từ nó:

    1. Tải về hình ảnh và giải nén nó:

      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. Gắn hình ảnh thứ hai của phân vùng. Cách dễ nhất là:

      sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
      

      Điều này chỉ hoạt động với mới nhất losetuptrên Ubuntu 16.04, các phương pháp khác tại: https://askubfox.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576

      Điều này in một thiết bị vòng lặp, ví dụ:

      /dev/loop0
      

      Vì vậy chúng tôi làm:

      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. Chạy:

    ./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 \
    ;
    

Sau đó, bạn có thể đăng nhập vào thiết bị đầu cuối hiển thị trên thiết bị đầu cuối máy chủ của bạn.

Những hạn chế hiện tại:

  • -M raspi2đã được thêm vào trong QEMU 2.6.0 và Ubuntu 16.04 chỉ có QEMU 2.5.0, vì vậy chúng tôi phải biên dịch QEMU từ nguồn. Nhưng điều này không khó.
  • GUI hiển thị nhưng không phản hồi với chuột / bàn phím, đã được thử nghiệm trên cả SDL và VNC. Nhưng CLI hoạt động hoàn hảo tuy nhiên. Vì vậy, bây giờ bạn cũng có thể sử dụng hình ảnh Lite đã có GUI.
  • không có mạng

Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, kernel đã sửa đổi

Phương pháp này sử dụng -M versatilepbhiện có trên QEMU 2.5.0 của Ubuntu 16.04.

Nhược điểm là bạn phải tải xuống một hạt nhân đã sửa đổi (xem Thi đua với Qemu: tại sao hạt nhân phụ? ) Và sửa đổi hình ảnh, vì vậy nó ít đại diện cho hệ thống thực.

  1. Tải xuống: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie

    Chúng tôi chọn 4.4.12vì đó là phiên bản kernel trong hình ảnh Raspbian.

    Quá trình tạo blob kernel đó được mô tả tại kho lưu trữ tại: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools

    Tại sao hình ảnh hạt nhân bổ sung này là cần thiết: Thi đua với Qemu: tại sao hạt nhân phụ?

  2. Sửa đổi hình ảnh Raspbian như được đề cập tại: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulation-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014c

    Tóm lược:

    1. Gắn hình ảnh giống như chúng ta đã làm cho -M raspi2, nhưng sử dụng phân vùng thứ hai thay vì phân vùng thứ nhất:

      sudo mount /dev/loop0p2 /mnt/rpi
      
    2. Chỉnh sửa hình ảnh:

      # 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. Chạy:

    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
    

[thất bại] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, hạt nhân vani

Trên Ubuntu mới hơn này, QEMU 2.8.0 là mặc định, vì vậy chúng tôi không cần phải biên dịch QEMU từ nguồn cho -M raspi2. Tuy nhiên, 2.8.0 bị treo khi khởi động sau thông báo:

Console: switching to colour frame buffer device 100x30

Điều này cho thấy làm thế nào -M raspi2vẫn không ổn định .

[thất bại] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, hạt nhân vani

Trên hình ảnh mới hơn này, sử dụng cùng một phương thức cho 2016-05-27, kernel hoảng loạn khi khởi động với:

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 kim loại trần trên QEMU

https://github.com/bztsrc/raspi3-tutorial là một tập hợp các ví dụ hay chỉ hoạt động trên QEMU, ultraquick bắt đầu tại: Cách thực hiện mô phỏng QEMU cho hình ảnh Raspberry Pi bằng kim loại trần


Phương pháp của bạn với losetupquá phức tạp. Thay vào đó, bạn có thể chỉ sử dụng fdisk -l your-image.img, và sau đó sử dụng offset cho phân vùng trong mounttùy chọn -o loop,offset=$((512*YOUR_OFFSET)).
Ruslan

-M raspi2 không hoạt động
zhaofeng-shu33

-1

Bạn có thể tải xuống kernel tùy chỉnh của tôi (4.1.7) cho Raspbian Jessie trên github của tôi, polaco1782 . Làm theo hướng dẫn trên tập tin doc.


1
Nhân của bạn gửi cho tôi đến dấu nhắc chế độ khẩn cấp mỗi khi tôi cố gắng mô phỏng. Tôi đã làm như nó được viết trong tập tin đọc tôi. (Xem bài đăng cuối cùng trên -> raspberrypi.org/forums/viewtopic.php?t=112259 ) Bạn có thể chỉnh sửa câu trả lời của mình để hiển thị từng bước những gì bạn đã thay đổi trong hình ảnh jessie cơ bản để làm cho nó hoạt động. Nó sẽ trở nên hữu ích cho những người dùng khác vì bây giờ hình ảnh jessie đang hoạt động, ngày càng nhiều người dùng sẽ mô phỏng jessie trên qemu. Cảm ơn trước.
dhruvvyas90

Bạn có thể mở rộng câu trả lời của mình để giải thích những gì là tùy chỉnh về kernel của bạn không?
Greenonline

Tôi đã có thể giải quyết vấn đề của mình bằng cách bình luận fstabcác mục mmcblk.
dhruvvyas90

@Greenonline Vì qemu không hỗ trợ nền tảng Rpi, nên có một tinh chỉnh cấu hình kernel cần thiết để mô phỏng rpi trên Qemu. Bạn không thể lấy kernel Rpi và làm cho nó hoạt động tốt.
dhruvvyas90
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.