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
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
Câu trả lời:
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ĩ.
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ể.
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
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?
Bây giờ bạn nên có:
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 .
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, hạt nhân vani
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`
Tải về hình ảnh và giải nén kernel và dts từ nó:
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
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 losetup
trê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
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ó.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 versatilepb
hiệ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.
Chúng tôi chọn 4.4.12
vì đó 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ụ?
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:
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
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
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 raspi2
vẫ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
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.
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.