Bir Linux PC'de Öykünme


48

Raspberry Pi işletim sistemi içeren bir SD kartı Linux bilgisayarıma nasıl bağlayabilirim ve işletim sistemini bir emülatörde nasıl başlatabilirim?

VMWare neden çalışmıyor?

Bu yöntemin sınırlamaları nelerdir?

İlgili: Windows PC'de Öykünme


Bu öykünme sorusu yerine sanallaştırma sorusu değil mi?
Zoot

1
Sanallaştırma düzenlemesine benzetimden hoşlanmıyorum ... bunun hakkında sohbet edebilir miyiz?
Alex Chamberlain,

2
Temel sorun, Pi'nin VMWare'in nasıl çalıştığını bildiği x86 ile uyumlu olmayan bir ARM CPU'su olmasıdır. Bir emülatöre ihtiyacınız var.
Thorbjørn Ravn Andersen

Raspbian'ın birçok özelliği ile kişiselleştirilmiş bir debian sürümünün (PIXEL masaüstü ortamı ve çoğu uygulama dahil) Raspberry Pi web sitesinden
unutmayınız

Yanıtlar:


52

Evet bu tamamen mümkün. Ancak, gerçekte düşündüğünüzden biraz farklı.


önsöz

SD kart , işletim sisteminin bir görüntüsünü içerir. Ve cihaz açıldığında bu görüntüyü şişirerek çalışır.

Bilmenizi beklediğim gibi, çalışan bir sistem oluşturmak için bu görüntüyü SD karta flaş ediyorsunuz. Ancak, görüntünün yanıp sönmesinden önce yapabileceğiniz şey , işlemci emülatörü olan QEMU'yu kullanarak onun etrafında bir oyun oynamak ve ARM komut setini taklit etmemize olanak tanıyor.

Bu şekilde, görüntüde yaptığınız herhangi bir değişiklik (yükleme, derleme vb.) SD karta flaş yaptıktan sonra hala orada olacaktır.

Şimdi size görüntüyü yüklemek için QEMU nasıl kullanılacağı hakkında konuşacağım. Arch Linux imajı ile göstereceğim ancak süreç ne olursa olsun aynı olmalı.


QEMU’yu kullanma

Prerequesites

Sisteminiz için QEMU edinmeniz gerekecektir . QEMU'nun yalnızca bir gereksinimi olmalı, giriş cihazlarının çalışması için SDL geliştirme paketinin kurulu olması gerekir; paket yöneticinizden temin edilebilir.

Paketi normal paket yöneticinizi kullanarak indirmenizi tavsiye ederim:

Kemer :

sudo pacman -S sdl qemu

Ubuntu :

Daha yeni sürümlerde (14.04'ten beri) bunun için bir paketi var:

sudo apt-get install qemu-system-arm

Daha eski sürümler için:

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

QEMU’yu kendiniz oluşturmak

Alternatif olarak, QEMU'yu kendiniz de oluşturabilirsiniz. Yeni bir sürüm denemek istiyorsanız bu harika, ancak yavaş olabilir ve derleme sırasında birçok hataya hazır olabilir! Eğer QEMU'yu kendi internet sitesinden oluşturmak, ARM desteği için derlenmesi gerektiğini unutmayın. Öyleyse ilk önce dağıtım havuzlarınızı kontrol edin. Bu böyle yapılabilir;

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

ARM desteğinizin bulunduğunu doğrulayın:

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

İmajın Elde Edilmesi

Arch Linux ile çalışıyoruz, bu yüzden Arch Arm görüntüsünü kullanıyor olacaksınız. Ama bununla çalışmak istediğiniz şeyi değiştirin ya da zaten bir görüntünüz var. Bu durumda, bu adımı atlayın.

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'nun çalışması için ayrıca çekirdek imajına da ihtiyacımız var (.img dosyasının içinde olacaktı).

Not: Bu adımın Debian için gerekli olduğunu sanmıyorum. Birisi lütfen onaylayın.

Neyse ki orada önderlenmiş görüntüleri mevcuttur ve aralarından birini kullanabilirsiniz burada ( doğrudan indirme ).

TODO: Burada bir çekirdek görüntüsünün nasıl derleneceğini göster?

VM'yi Başlatma

Şimdi sahip olmalısınız:

  • Verilen sha1'i kullanarak doğrulayabileceğiniz bir img dosyası (önerilir).
  • Bir çekirdek görüntüsü (zImage).
  • ARM için QEMU.

Sanal Makine şimdi aşağıdaki uzun soluklu komutu kullanarak başlatılabilir:

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

Bu yöntemi kullanarak yalnızca birkaç yüz megabayt depolama alanınız olacağını unutmayın (görüntüde ne varsa). QEMU kullanım kılavuzu izlenerek sanal bir sabit disk oluşturulabilir .


Bu benim peşimden daha fazlası - teşekkürler! Bu harika bir referans cevabı
Alex L

@Alex Hiç sorun değil, detaylandırmamı istiyorsan bana haber ver. Ayrıca, çalışan bir debian görüntü elde edip etmediğinizi söyleyin ve farklıysa talimatlara ekleyebiliriz.
Jivings

Burada oldukça kapsamlı bir yol var
Alex L

@Alex Bu iyi bir, bunu görmedim.
Jivings

2
Diğeri kapalı, bu yüzden yapabileceğim tek şey yeniden açmak için oy kullanmak
Jivings

8

Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, vanilya çekirdeği

görüntü tanımını buraya girin

  1. QEMU 2.9.0 kaynağından derleyin:

    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. Resmi indirin ve çekirdeği ve dts dosyasını çıkarın:

    1. Resmi indirin ve açı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. Bölümün ikinci görüntüsünü takın. En kolay yol:

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

      Bu sadece en son losetupUbuntu 16.04, diğer yöntemlerle çalışır : https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576

      Bu, örneğin bir döngü aygıtı yazdırır:

      /dev/loop0
      

      öyleyse yapıyoruz:

      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. Çalıştırmak:

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

Daha sonra ana bilgisayar terminalinizde görünen terminalden giriş yapabilirsiniz.

Mevcut kısıtlamalar:

  • -M raspi2QEMU 2.6.0'da eklendi ve Ubuntu 16.04'te yalnızca QEMU 2.5.0 var, bu yüzden QEMU'yu kaynaktan derlemeliyiz. Ama bu zor değil.
  • GUI, hem SDL hem de VNC'de test edilen fareyi / klavyeyi gösterir ancak yanıt vermez. Ancak CLI mükemmel çalışıyor. Öyleyse şimdilik GUI olan Lite görüntüsünü kullanabilirsiniz.
  • ağ yok

Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, değiştirilmiş çekirdek

Bu yöntem -M versatilepb, Ubuntu 16.04'ün QEMU 2.5.0'sında bulunanları kullanır.

Dezavantajı, değiştirilmiş bir çekirdeği indirmeniz ( Qemu ile Taklit Etme: neden ekstra çekirdeği? ) Görmeniz ve görüntüyü değiştirmeniz gerektiğidir, dolayısıyla gerçek sistemi daha az temsil eder.

  1. İndir: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie

    O 4.4.12zamandan beri Raspbian resminin çekirdek versiyonudur.

    Bu çekirdek bloğunu oluşturma süreci, depoda şu adreste açıklanmaktadır: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools

    Neden bu ekstra çekirdek görüntü gerekli: Qemu ile öykünmek: neden ekstra çekirdek?

  2. Raspbian görüntüsünü şu şekilde belirtildiği gibi değiştirin: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8c5

    Özet:

    1. Görüntüyü tıpkı bizim için yaptığımız gibi monte edin -M raspi2, ancak ilk yerine ikinci bölümü kullanın:

      sudo mount /dev/loop0p2 /mnt/rpi
      
    2. Resmi düzenle:

      # 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. Çalıştırmak:

    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
    

[başarısız] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, vanilya çekirdeği

Bu yeni Ubuntu'da, QEMU 2.8.0 varsayılandır, dolayısıyla QEMU'yu kaynağından derlememiz gerekmez -M raspi2. Ancak, 2.8.0, aşağıdaki mesajdan sonra önyükleme yapıyor

Console: switching to colour frame buffer device 100x30

Bu -M raspi2hala ne kadar kararsız olduğunu göstermeye gider .

[başarısız] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, vanilya çekirdeği

Bu yeni görüntüde, 2016-05-27 için aynı yöntemi kullanarak, önyükleme sırasında çekirdek panikle:

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 QEMU'da RPI3 çıplak metal

https://github.com/bztsrc/raspi3-tutorial sadece QEMU'da çalışan, ultraquick'te başlayan örneklerin iyi bir örneğidir: Çıplak metal Ahududu Pi görüntüleri için QEMU emülasyonu nasıl yapılır


2
Ahbap, harikasın!
Subin

4

Önerdiğini yapamazsın, çünkü Raspberry Pi çoğu PC'den farklı bir işlemci mimarisine sahip. PC'lerin çoğu x86 tabanlı olsa da, RPi ARM tabanlı bir bilgisayardır.

Bu, örneğin, Microsoft Windows'ta RPI'yı çalıştıramamanızın aynı nedenidir .

VmWare çalışmaz, çünkü yalnızca x86 tabanlı işletim sistemlerini (32 bit ve 64 bit) sanallaştırabilir. QEMU gibi ARM'i sanallaştırabilen başka emülatörler de var, ancak bunlar yerel CPU sanallaştırma desteği olmadan tam yazılım emülasyonu yapıyorlar, bu yüzden oldukça yavaş olmalarını bekleyebilirsiniz.


3
RasPi'yi x86'da nasıl taklit edeceğinizle ilgili daha fazla bilgi ekleyebilir misiniz (örn. QEMU ile)? Açıklama takdir edilmesine rağmen, bu soruya gerçekten odaklanmak istediğim şey buydu.
Alex L

3
Aşağı oy için üzgünüm, ama bu, askerin ihtiyaç duyduğu şeyi nasıl elde edeceğini açıklamıyor.
G-

Öte yandan, sorunun cevabında olmayan diğer soruya değinmektedir. Bence sizin olumsuz oylarınız değişmemiş (bu sorunun da öncü olması gibi değil)

3
Yerli sanal destek olmasa bile, yavaş, göreceli olarak görecelidir, çünkü muhtemelen ahududu pi'den çok daha güçlü bir makinede sanallaştırıyorsunuzdur
Kenneth Wilke

0

İotify.io adresinde bulunan sensör, komut satırı ve dosya düzenleyicisine dahil olan bir Raspberry Pi simülatörünü kolayca deneyebilirsiniz. Farklı projeler, işletim sistemleri ve Raspberry Pi çalışma ortamına aşina olmak için https://docs.iotify.io/ adresindeki belgelerimize göz atın .

görüntü tanımını buraya girin


1
Teknik olarak bu bir cevap olsa da, sitemizi bazı ücretsiz reklamlar için açıkça kullanıyorsunuz. Sunduğunuz ücretsiz olabilir iken hala tamam değil. Topluma katkılarından dolayı teşekkür ederiz, ancak lütfen reklamlarınızı başka bir yere götürün.
Darth Vader

4
@DarthVader: Poster, ürüne bağlı olduklarını bildiğinden ve soruyu cevapladığından, kabul edilebilir olarak adlandırmaya meyilliyim.
Jacobm001
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.