Làm cách nào để mô phỏng raspberry pi 2 trên Ubuntu 14.04 PC?


7

Ở đây tôi có một hình ảnh của Raspberry Pi (được thiết kế lại). Hãy gọi nó làpi2-16gb.img

Mô phỏng ARM Raspberry Pi 2 model B v1.1 trên PC Ubuntu

Bây giờ tôi muốn mô phỏng nó trước khi chèn nó vào Pi 2.

Tôi đã tạo một kịch bản khởi động start_arm_pi.shnhư thế này:

#!/bin/bash
# Starts raspberry pi image in configuration mode

qemu-system-arm -kernel ./boot_for_pi2/kernel.img \
    -cpu arm1176 -m 1024 \
    -M versatilepb -no-reboot -serial stdio \
    -append "root=/dev/mapper/crypt_sdcard cryptdevice=/dev/mmcblk0p2:crypt_sdcard panic=1 rootfstype=ext4 rw init=/bin/bash" \
    -hda /path/to/pi2-16gb.img 

Nhưng có lỗi:

pulseaudio: set_sink_input_volume() failed
pulseaudio: Reason: Invalid argument
pulseaudio: set_sink_input_mute() failed
pulseaudio: Reason: Invalid argument

Về tấm ảnh

Trên thực tế có hai phân vùng của tệp hình ảnh pi2-16gb.img.

/boot/từ /dev/mmcblk0p1/từ /dev/mmcblk0p2. Nhưng /dev/mmcblk0p2được mã hóa bằng mã hóa LUKS .

những kernel.imgcó nguồn gốc từ phân vùng bỏ mã hóa/dev/mmcblk0p1

Tất cả các tệp trong phân vùng /dev/mmcblk0p1(sẽ được gắn kết như /boot/trong hình này.

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

Và tôi nghĩ rằng tệp cmdline.txt và tệp config.txt có thể hữu ích.

Nội dung của cmdline.txt

dwc_otg.fiq_fix_enable = 0 console = ttyAMA0,115200 kgdboc = ttyAMA0,115200 console = tty1 thang máy = deadline root = / dev / mapper / crypt_sdcard cryptdevice = / dev / mmcblk

Nội dung của config.txt

initramfs initramfs.gz 0x00f00000 hdmi_ignore_hotplug = 1

Bạn có một số ý tưởng mô phỏng Pi trên máy tính Ubuntu của tôi không?

Cảm ơn bạn một triệu !!


cập nhật

Tôi đã có một Pi 2 vật lý chạy hình ảnh này.

Và từ cổng nối tiếp TTL (Tx, Rx), tôi đã nhận được tin nhắn như sau)

pastebin (chấm) com / Y7Xg5WRg

Tìm thấy một dòng thông tin về lệnh kernel:

. , Họ root = / dev / mapper / crypt_sdcard cryptdevice = / dev / mmcblk0p2: crypt_sdcard rootfstype = ext4 rootwait

Điều này sẽ hữu ích?


cập nhật

Tôi đã tìm thấy qemuđã hỗ trợ Raspberry Pi 2 từ phiên bản 2.6.0 theo trang doc của nó: wiki.qemu (dot) org / ChangeLog / 2.6

Vì vậy, tôi đã biên dịch qemuphiên bản 2.6.0 trên PC Ubuntu 14.04 x86_64 của mình. Và tôi đã khởi động nó bằng lệnh này.

/usr/local/src/qemu-2.6.0/bin/debug/native/arm-softmmu/qemu-system-arm \
    -kernel /path/to/boot_for_pi2/kernel7.img \
    -cpu arm1176 -m 256 \
    -M raspi2 \
    -no-reboot \
    -serial stdio \
    -sd /path/to/pi2-16gb.img \
    -append "dwc_otg.fiq_fix_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 elevator=deadline root=/dev/mapper/crypt_sdcard cryptdevice=/dev/mmcblk0p2:crypt_sdcard rootfstype=ext4"

Và đây là đầu ra ngay bây giờ.

WARNING: Image format was not specified for '/path/to/pi2-16gb.img' and probing guessed raw.
        Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
        Specify the 'raw' format explicitly to remove the restrictions.
Uncompressing Linux... done, booting the kernel.

Nhưng nó dừng lại ở đây và cửa sổ qemu màu đen không có gì ...

Điều này có nghĩa là có gì đó không ổn với kernel?

File kernel7.imgcó nguồn gốc từ /boot/phân vùng của nó thực sự.


cập nhật

Tôi đã khởi động trình giả lập thành công nhưng bị lỗi ...

/usr/local/src/qemu-2.6.0/bin/debug/native/arm-softmmu/qemu-system-arm \
-kernel /path/to/kernel-qemu-4.4.11-jessie \
-m 256 \
-cpu arm1176 \
-M versatilepb \
-no-reboot \
-serial stdio \
-hda /media/alex/F049-1FB6/2016-05-27-raspbian-jessie.img \
-append "dwc_otg.lpm_enable=0 root=/dev/sda2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait init=/bin/bash" \

Trình điều khiển có thể được gắn kết. Ở đây tôi đã thử nó với một hình ảnh rasbian mới nhất2016-05-27-raspbian-jessie.img

Hạt nhân qemu tôi đã sử dụng là từ:

github (chấm) com / dhruvvyas90 / qemu-rpi-kernel

Nhưng tôi đã có một hạt nhân hoảng loạn ...

Đây là lỗi chi tiết.

gỡ lỗi kernel hoảng loạn


Có vẻ như không có khoảng trống ở giữa #!/bin/bashtôi tin rằng không gian đó là bắt buộc để tập lệnh của bạn hoạt động.
sir_ian

Không sao cả. Không phải điều này.
dotlash

Bạn không nên sử dụng kernel "Đa năng" hoặc "Qemu" với phiên bản QEMU mới nhất. Sử dụng Raspberry Kernel thật (giải nén nó từ hình ảnh?).
flakeshake

Tôi đã thử Kernel có nguồn gốc từ hình ảnh nhưng nó thậm chí không tải. Vậy tôi nên cài đặt mô hình CPU nào để sử dụng với qemu2.6?
dotlash

Câu trả lời:


2

Tôi đã thành công trong việc ra mắt Raspbian Jessie Lite trên Kubfox 14.04 sau khi tôi biên dịch QEMU từ git. Có một chút vấn đề: Tôi đã không làm cho đầu vào bàn phím hoạt động (phải sử dụng thiết bị đầu cuối nối tiếp ảo thay thế).

Dù sao, đây là những gì tôi đã làm:

1) Biên dịch QEMU từ git (điều chỉnh các tùy chọn cấu hình cho nhu cầu của bạn, nhưng chúng đã hoạt động đủ tốt với tôi):

$ sudo apt-get build-dep qemu
$ git clone https://github.com/qemu/qemu
$ cd qemu
$ ./configure --prefix=$HOME/opt/qemu --with-sdlabi=1.2 \
  --disable-gtk --enable-sdl
$ make
$ make install

2) Xác định bố cục phân vùng ảnh Raspbian:

$ fdisk -l 2017-07-05-raspbian-jessie-lite.img

Disk 2017-07-05-raspbian-jessie-lite.img: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders, total 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5e88b289

                              Device Boot      Start         End      Blocks   Id  System
2017-07-05-raspbian-jessie-lite.img1            8192       93596       42702+   c  W95 FAT32 (LBA)
2017-07-05-raspbian-jessie-lite.img2           94208     4194303     2050048   83  Linux

3) Phân vùng đầu tiên của hình ảnh Mount Raspbian có tính đến các số liệu để bắt đầu các phân vùng thu được ở trên (sector 8192 cho phân vùng 1):

$ cd ~/raspbian
$ sudo mkdir -pv /mnt/tmp
$ sudo mount ./2017-07-05-raspbian-jessie-lite.img /mnt/tmp/ -oloop,offset=$((8192*512))

4) Lấy cmdline.txt ban đầu từ đó, cũng như kernel và .dtbtệp chính xác :

$ cp -v /mnt/tmp/{kernel7.img,bcm2709-rpi-2-b.dtb,cmdline.txt} .

5) Ngắt hình ảnh:

$ sudo umount /mnt/tmp

6) Để ngăn hạt nhân phàn nàn rằng phân vùng gốc vượt quá kích thước thẻ SD, hãy thêm một chút số không vào hình ảnh (ở đây tôi chọn 2 GiB - đây là một chút quá mức, nhưng sẽ không bị tổn thương, hãy điều chỉnh cho bạn nhu cầu):

$ fallocate -l 2G ./2017-07-05-raspbian-jessie-lite.img

7) Cuối cùng chúng ta cũng có thể thực hiện lần khởi chạy đầu tiên, trong đó tập lệnh ban đầu sẽ thay đổi kích thước hệ thống tập tin để phù hợp với toàn bộ thiết bị:

$ ~/opt/qemu/bin/qemu-system-arm -M raspi2 -kernel ./kernel7.img \
   -dtb ./bcm2709-rpi-2-b.dtb -sd ./2017-07-05-raspbian-jessie-lite.img \
   -append "$(<cmdline.txt)"

Nhân sẽ không thiết lập lại, vì vậy khi in sysrq: SysRq: Resetting, chỉ cần giết QEMU qua Ctrl + C hoặc đóng cửa sổ của nó.

8) Một lần nữa gắn phân vùng khởi động và sao chép cập nhật cmdline.txt:

$ sudo mount ./2017-07-05-raspbian-jessie-lite.img /mnt/tmp/ -oloop,offset=$((8192*512))
$ cp -v /mnt/tmp/cmdline.txt .
$ sudo umount /mnt/tmp

9) Cuối cùng, khởi chạy QEMU như bạn đã làm trong bước 7) và Raspbian bắt đầu bình thường, vì vậy sau một hoặc hai phút, bạn sẽ có mặt tại dấu nhắc đăng nhập.

Bây giờ, vì bàn phím không hoạt động (dường như là giới hạn QEMU cho RPi), bạn có thể muốn thiết lập bảng điều khiển nối tiếp ảo. Để làm điều này, hãy đảm bảo rằng trận chung kết cmdline.txtconsole=ttyAMA0,115200(và không có đề cập nào khác ttyAMA0) và tùy chọn dòng lệnh QEMU -serial stdiocó mặt. Điều này sẽ cung cấp cho bạn lời nhắc đăng nhập trong thiết bị đầu cuối được sử dụng bởi QEMU, nơi bạn có thể nhập và sử dụng hệ thống của mình.

Để tránh QEMU bị giết khi bạn gõ Ctrl + C trong bảng điều khiển nối tiếp, hãy xem bài viết Unix.SE này .


Cám ơn vì đã chia sẻ! Tôi cũng đã thực hiện nó với một số cài đặt ở đây
dotlash

0

Bạn sẽ chỉ có thể mô phỏng các thiết bị được hỗ trợ cụ thể (hoặc bạn đã thêm), ví dụ: http://qemu.weilnetz.de/qemu-doc.html#ARM-System-emulator .

AFAICT một số phần cứng của RPi không được hỗ trợ mà không cần tùy chỉnh.


Nhưng tôi thấy qemuphiên bản 2.6 đã hỗ trợ cho raspberry pi 2 rồi. wiki.qemu.org/ChangeLog/2.6 Tôi nên sử dụng lệnh nào để khởi động hình ảnh này bây giờ? Tôi đã biên dịch một bản mới hơn qemu 2.6để thử nghiệm.
dotlash

Từ ghi chú phát hành mà bạn đang trích dẫn: "Giả lập một phần Raspberry Pi 2 mới với loại máy" raspi2 ". Hiện tại, nó có thể khởi động các bản phát hành cũ hơn của Windows và Raspbian, nhưng thiếu một số thiết bị bao gồm USB." Vì vậy, rất có thể bạn chỉ có thể sử dụng hình ảnh Wheezy (không phải là Jessie) và USB không hoạt động (điều này khá tầm thường).
Phil B.

@PhilB. "... thiếu một số thiết bị" là khá mơ hồ, phải không? Có nghĩa là phần cứng tích hợp như âm thanh có thể không hoạt động.
Dave Newton

@PhilB. Tôi đã cập nhật câu hỏi này. Và qemu không khởi động đúng kernel. @Dave Newton, tôi sẽ không gắn bất cứ thiết bị nào khác vào nó bây giờ. Nó có thể được mô phỏng nó, chỉ là imgtập tin chính nó.
dotlash
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.