Thi đua trên PC Linux


48

Làm cách nào tôi có thể kết nối thẻ SD chứa HĐH Raspberry Pi với PC Linux của tôi và khởi động HĐH trong trình giả lập?

Tại sao VMWare không hoạt động?

Những hạn chế của phương pháp này là gì?

Liên quan: Thi đua trên PC Windows


Đây không phải là một câu hỏi ảo hóa thay vì một câu hỏi thi đua?
Zoot

1
Tôi không thích giả lập để chỉnh sửa ảo hóa ... chúng ta có thể trò chuyện về nó không?
Alex Chamberlain

2
Vấn đề cơ bản là Pi có cpu ARM không tương thích với x86, đó là điều VMWare biết cách chạy. Bạn cần một trình giả lập.
Thorbjørn Ravn Andersen

Lưu ý rằng một phiên bản debian được tùy chỉnh với nhiều tính năng của Raspbian (bao gồm cả môi trường máy tính để bàn PIXEL và hầu hết các ứng dụng) có thể tải xuống từ trang web Raspberry Pi
angussidney

Câu trả lời:


52

Vâng, điều này là hoàn toàn có thể. Tuy nhiên, trong thực tế, nó hơi khác một chút so với cách bạn nghĩ.


Lời nói đầu

Thẻ SD chứa hình ảnh của hệ điều hành. Và hoạt động bằng cách thổi phồng hình ảnh này khi thiết bị được bật nguồn.

Như tôi mong đợi bạn đã biết, bạn flash hình ảnh này vào thẻ SD để tạo ra một hệ thống làm việc. Tuy nhiên, những gì bạn có thể làm trước khi flash hình ảnh là chơi xung quanh nó bằng QEMU , một trình giả lập bộ xử lý và cho phép chúng tôi mô phỏng tập lệnh ARM.

Theo cách này, mọi thay đổi bạn thực hiện đối với hình ảnh (cài đặt, biên dịch, v.v.) sẽ vẫn ở đó sau khi bạn flash nó vào thẻ SD.

Bây giờ tôi sẽ nói với bạn về cách sử dụng QEMU để tải hình ảnh. Tôi sẽ trình diễn với hình ảnh Arch Linux, nhưng quá trình nên giống nhau bất kể.


Sử dụng QEMU

Điều kiện tiên quyết

Bạn sẽ cần có được QEMU cho hệ thống của bạn. QEMU chỉ nên có một yêu cầu, để các thiết bị đầu vào hoạt động, bạn cần cài đặt gói phát triển SDL, có sẵn từ trình quản lý gói của bạn.

Tôi khuyên bạn nên tải xuống gói bằng trình quản lý gói thông thường của bạn:

Vòm :

sudo pacman -S sdl qemu

Ubuntu :

Các phiên bản gần đây hơn (kể từ 14.04) có gói dành cho nó:

sudo apt-get install qemu-system-arm

Đối với phiên bản cũ hơn:

sudo apt-get install libsdl-dev
sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get update
sudo apt-get install qemu-system

Xây dựng QEMU cho mình

Ngoài ra, bạn có thể tự xây dựng QEMU. Điều này thật tuyệt nếu bạn muốn thử một phiên bản mới, nhưng nó có thể bị chậm và được chuẩn bị cho rất nhiều lỗi trong quá trình biên dịch! Lưu ý rằng nếu xây dựng QEMU từ trang web của họ, nó phải được biên dịch để hỗ trợ ARM. Vì vậy, kiểm tra kho distro của bạn đầu tiên. Điều này có thể được thực hiện như vậy;

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

Xác minh rằng bạn có hỗ trợ ARM với:

qemu-system-arm --version
QEMU emulator version 1.0,1, Copyright (c) 2003-2008 Fabrice Bellard

Lấy hình ảnh

Chúng tôi đang làm việc với Arch Linux, vì vậy sẽ sử dụng hình ảnh Arch Arm. Nhưng thay thế điều này bằng bất cứ điều gì bạn muốn làm việc với, hoặc có lẽ bạn đã có một hình ảnh. Trong trường hợp này, bỏ qua bước này.

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 hoạt động, chúng ta cũng cần hình ảnh kernel (sẽ nằm trong tệp .img).

Lưu ý: Tôi không nghĩ bước này là cần thiết cho Debian. Ai đó làm ơn xác nhận.

May mắn thay, có những hình ảnh được biên dịch sẵn, và bạn có thể sử dụng hình ảnh từ đây ( tải trực tiếp ).

TODO: Trình diễn cách biên dịch ảnh kernel ở đây?

Khởi động VM

Bây giờ bạn nên có:

  • Một tệp img mà bạn có thể xác minh bằng cách sử dụng sha1 được cung cấp (được khuyến nghị).
  • Một hình ảnh hạt nhân (zImage).
  • QEMU cho ARM.

Giờ đây, Máy ảo có thể được khởi động bằng lệnh dài dòng sau:

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

Lưu ý rằng bạn sẽ chỉ có vài trăm megabyte dung lượng lưu trữ bằng phương pháp này (bất cứ thứ gì có sẵn trên hình ảnh). Một đĩa cứng ảo có thể được tạo bằng cách làm theo hướng dẫn sử dụng QEMU .


Đây là nhiều hơn những gì tôi đã sau - cảm ơn! Đây là một câu trả lời tham khảo tuyệt vời
Alex L

@Alex Không có vấn đề gì, hãy cho tôi biết nếu bạn cần tôi giải thích. Ngoài ra, hãy cho tôi biết nếu bạn có một hình ảnh debian hoạt động và chúng tôi có thể thêm nó vào hướng dẫn nếu khác.
Jivings

Có một hướng dẫn hợp lý kỹ lưỡng ở đây
Alex L

@Alex Đó là một cái tốt, tôi đã không nhìn thấy điều đó.
Jivings

2
Cái kia đã bị đóng, vì vậy tất cả những gì tôi có thể làm là bỏ phiếu để mở lại
Jivings

8

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

  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


2
Anh bạn thật tuyệt!
Subin

4

Bạn không thể làm những gì bạn đề xuất, vì Raspberry Pi có kiến ​​trúc bộ xử lý khác với hầu hết các PC. Trong khi hầu hết các PC đều dựa trên x86, RPi là một máy tính dựa trên ARM.

Đây là lý do tương tự như lý do tại sao bạn không thể chạy, ví dụ: Microsoft Windows trên RPi.

VmWare sẽ không hoạt động, vì nó chỉ có thể ảo hóa các hệ điều hành dựa trên x86 (32 bit và 64 bit). Có những trình giả lập khác có thể ảo hóa ARM, chẳng hạn như QEMU, nhưng những trình giả lập này đang chạy mô phỏng phần mềm đầy đủ mà không cần hỗ trợ ảo hóa CPU gốc, vì vậy bạn có thể mong đợi chúng khá chậm.


3
Bạn có thể đưa thêm một số thông tin về cách mô phỏng RasPi trên x86 (tức là với QEMU) không? Đó là những gì tôi thực sự muốn tập trung vào câu hỏi này, mặc dù lời giải thích được đánh giá cao.
Alex L

3
Xin lỗi để bỏ phiếu, nhưng điều này không giải thích làm thế nào để đạt được những gì người hỏi cần.
G-.

Mặt khác, nó giải quyết các điểm khác của câu hỏi mà câu trả lời khác không có. Tôi nghĩ rằng các lượt tải xuống của bạn không được chấp nhận (không giống như câu hỏi này đang dẫn đầu)

3
Ngay cả khi không có sự hỗ trợ của người bản xứ, chậm cũng khá tương đối vì có lẽ bạn đang ảo hóa trên một chiếc máy mạnh hơn nhiều so với một quả mâm xôi
Kenneth Wilke

0

Bạn có thể dễ dàng thử một trình giả lập Raspberry Pi đi kèm với cảm biến, dòng lệnh và trình chỉnh sửa tệp tại iotify.io. Kiểm tra tài liệu của chúng tôi tại https://docs.iotify.io/ để bắt đầu với các dự án khác nhau, HĐH và làm quen với môi trường làm việc của Raspberry Pi.

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


1
Mặc dù về mặt kỹ thuật đây là một câu trả lời, bạn khá rõ ràng sử dụng trang web của chúng tôi cho một số quảng cáo miễn phí. Mặc dù những gì bạn cung cấp có thể là miễn phí nhưng nó vẫn không ổn. Chúng tôi đánh giá cao sự đóng góp của bạn cho cộng đồng nhưng vui lòng mang quảng cáo của bạn đi nơi khác.
Darth Vader

4
@DarthVader: Vì người đăng đã biết rằng họ liên kết với sản phẩm và nó trả lời câu hỏi, tôi có xu hướng gọi nó là chấp nhận được.
Jacobm001
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.