2015-03-05 4 views
11

Некоторое время назад я подражал Raspberry Pi следующий this article, но этот подход имеет несколько проблем:Эмуляция Raspberry Pi 2

  1. Это очень медленно.
  2. Дисплейное решение ограничено 800x600.
  3. Вы не можете эмулировать более 256 МБ бара.

Кроме того, нет эмуляции для нового Broadcom BCM2836 или любого другого процессора на основе arm7 в Qemu. Однако есть несколько причин, почему было бы интересно подражать Малиновой Пи. Поэтому меня интересуют любые подсказки, которые подталкивают меня в правильном направлении, чтобы получить рабочую эмуляцию Raspberry Pi 2 с использованием Qemu или любого другого программного обеспечения эмуляции под Linux.

+0

Это сообщение 2 года, а ссылка, на которую вы ссылаетесь, составляет 1 год. Кроме того, автор вопроса просит запустить raspbian с помощью qemu, в то время как этот вопрос требует эмуляции определенного оборудования. – Phidelux

+0

Возраст не является текущим основным критерием обмана, он больше отражает: http://meta.stackexchange.com/questions/147643/should-i-vote-to-close-a-duplicate-question-even-though-its -much-newer-and-ha Но в этом случае вы правы, так как у них одинаковые обороты. –

ответ

5

Если вам удобно строить qemu, вы можете найти поддержку для эмуляции системы pi2 здесь: https://github.com/0xabu/qemu. Это не так быстро, и эмуляции устройства неполны, но вы можете изменить размер RAM и фреймбуфера.

Есть краткие инструкции по загрузке Raspbian в конце https://github.com/0xabu/qemu/wiki

+1

Начиная с QEMU 2.6, тип машины 'raspi2' является частью стандартного QEMU. – dubek

11

Если вы хотите запустить робот с малиной Pi 2 или что-то подобное, вы должны взглянуть на бег Qemu in user/static mode. Я пробовал это с помощью Linux на виртуальной машине, это довольно быстро по сравнению с эмуляцией системы Qemu. К сожалению, это только эмулирует CPU, поэтому вы не сможете тестировать игры или Wayland/Weston.

Я смог построить ядро ​​для своего Pi 2 примерно через час, используя этот метод.

+0

Спасибо, за ваш ответ. Я дам ему попробовать и принять ответ, если он сработает. – Phidelux

+0

Могу ли я спросить, где вы работаете с ядром Linux QEMU для запуска Pi? Вся почта, которую я нашел, находится по адресу http://xecdesign.com/downloads/linux-qemu/kernel-qemu, но эта страница, кажется, была удалена в течение длительного времени. – rbaleksandar

+0

@rbaleksandar Я нашел копию на https://github.com/dhruvvyas90/qemu-rpi-kernel –

0

Ubuntu 16,04, QEMU 2.9.0 -М raspi2, Raspbian 2016-05-27, ваниль ядро ​​

enter image description here

  1. Compile QEMU 2.9.0 из источника:

    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. Скачать файл и извлечь ядро ​​и DTS от него:

    1. Загрузить изображение и распакуйте его:

      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. Смонтировать второй образ раздела. Самый простой способ:

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

      Это работает только с последними losetup на Ubuntu 16.04, другие методы по адресу: https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576

      Это печатает устройство контура, например,:

      /dev/loop0 
      

      так мы делаем:

      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. Пробег:

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

Вы можете войти в систему на терминале, который показывает на терминале хоста.

Текущие ограничения:

  • -M raspi2 были добавлены в QEMU 2.6.0 и Ubuntu 16,04 есть только QEMU 2.5.0, поэтому мы должны скомпилировать QEMU из исходных текстов. Но это не сложно.
  • GUI показывает, но не отвечает на мышь/клавиатуру, проверенную как на SDL, так и на VNC. Но CLI работает отлично. Таким образом, вы можете также использовать изображение Lite, которое теперь имеет графический интерфейс.
  • нет сети

Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, модифицированного ядра

Этот метод использует -M versatilepb, который присутствует на QEMU 2.5 .0 из Ubuntu 16.04.

Недостатком является то, что вам необходимо загрузить модифицированное ядро ​​(см. https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel) и изменить изображение, чтобы оно было менее представительным для реальной системы.

  1. Скачать: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie

    Мы выбираем 4.4.12 так как это версия ядра в Raspbian изображения.

    Процесс генерации этого ядра капли описывается в в репозитории по адресу: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools

    Зачем нужен этот дополнительный образ ядра: https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel

  2. Изменить Raspbian изображение, как указано на сайте: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c

    Резюме:

    1. Смонтируйте изображение так же, как мы d Идентификатор для -M raspi2, но использовать второй раздел вместо первого:

      sudo mount /dev/loop0p2 /mnt/rpi 
      
    2. Редактировать изображение:

      # 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. Пробег:

    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 
    

[неудачно] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, vanilla kernel

В этом новом Ubuntu QEMU 2.8.0 по умолчанию, поэтому нам не нужно компилировать QEMU из источника для -M raspi2. Тем не менее, 2.8.0 зависает при загрузке после сообщения:

Console: switching to colour frame buffer device 100x30 

Это показывает, насколько неустойчиво -M raspi2 до сих пор.

[Failed] Ubuntu 16,04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, ваниль ядро ​​

На этих новых изображениях, используя тот же метод 2016-05-27, то ядро паники при загрузке с:

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)