Неможливо імітувати Raspberry Pi за допомогою Qemu: Ядра Паніки


15

Я намагаюся дотримуватися різних посібників в Інтернеті, щоб наслідувати Raspberry Pi на моїй машині Fedora 22. Я знайшов це питання: Емуляція raspbian з QEMU і використовував його для пошуку kernel-qemu, щоб захопити ядро. Я завантажив 2015-09-24-raspbian-jessie.imgу добрих людей на Raspberry Pi.

Коли я намагаюся запустити, у qemu-system-armмене виникає паніка ядра. Щось мені не вистачає?

Ось qemu-system-armкомандний рядок, який я набрав:

qemu-system-arm -cpu arm1176 -m 256 -M versatilepb -no-reboot -nographic -kernel kernel-qemu -appc=2 console=ttyAMA0 rw" -hda 2015-09-24-raspbian-jessie.img -net nic -net user,hostfwd=tcp::9999-:22

Слідом за повідомленнями ядра:

sd 0:0:0:0: [sda] Attached SCSI disk
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@fluxnic.net>
eth0: SMC91C11xFD (rev 1) at d089a000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
mousedev: PS/2 mouse device common for all mice
TCP cubic registered
NET: Registered protocol family 17
input: AT Raw Set 2 keyboard as /devices/fpga:06/serio0/input/input0
input: ImExPS/2 Generic Explorer Mouse as /devices/fpga:07/serio1/input/input1
EXT2-fs (sda2): error: couldn't mount because of unsupported optional features (244)
EXT4-fs (sda2): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (sda2): recovery complete
EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 8:2.
devtmpfs: mounted
Freeing init memory: 120K
Kernel panic - not syncing: Attempted to kill init!
[<c0032bec>] (unwind_backtrace+0x0/0xf0) from [<c03064dc>] (panic+0x58/0x170)
[<c03064dc>] (panic+0x58/0x170) from [<c0044054>] (do_exit+0x5d0/0x68c)
[<c0044054>] (do_exit+0x5d0/0x68c) from [<c004435c>] (do_group_exit+0x40/0xb0)
[<c004435c>] (do_group_exit+0x40/0xb0) from [<c004ed48>] (get_signal_to_deliver+0x1a8/0x378)
[<c004ed48>] (get_signal_to_deliver+0x1a8/0x378) from [<c002f124>] (do_signal+0x90/0x518)
[<c002f124>] (do_signal+0x90/0x518) from [<c002fa64>] (do_notify_resume+0x48/0x54)
[<c002fa64>] (do_notify_resume+0x48/0x54) from [<c002cc38>] (work_pending+0x24/0x28)

2
Ви спробували емуляцію хрипкого зображення? Якщо ядро ​​працює з ним, воно повинно бути Джессі.
dhruvvyas90

О, да! Так, коли ядро ​​не відповідає img, все порушується! Зображення хрипів працює ... Дякую.
Майк S

Відповіді:


4

Як сказав @dastaan, версія ядра повинна відповідати файлу img. Я намагався використовувати файл зображення версії 4.1 з ядром 3.18.

Тепер, коли я використовую належне зображення, воно працює.

Спасибі!

Редагувати: Налагодити роботу досить просто: Візьміть зображення з https://github.com/dhruvvyas90/qemu-rpi-kernel/ , а потім завантажте відповідне зображення, яке потрібно розпіяни, на https://www.raspberrypi.org/ завантаження / raspbian / . Наразі Джессі та Уїзі працюють в обох місцях, але в майбутньому немає гарантії, що відповідне ядро ​​буде доступне на цьому веб-сайті Github. У будь-якому випадку, я не був настільки вражений швидкістю, тому дивлюся на те, щоб поставити справжній Pi на порт провідного мережа свого ноутбука та живити його за допомогою додаткового акумулятора на 5200 мАг для мобільного телефону, а також використовую VNC на ноутбуці як дисплей.

Я не примусив Джессі працювати; це була проблема - у мене було ядро ​​Wheezy та Джессі, але ядро ​​Джессі не було.


1
Чи можете ви додати детальну відповідь, як ви вирішили це за допомогою останнього ядра? Це допоможе іншим користувачам, які намагаються наслідувати Джессі. Спасибі.
dhruvvyas90

3
Я пробував зображення ядра Джессі та Джессі, і вони стають невдалими з однаковою помилкою. Ядро 4.1 ( github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/… ) та чергове повідомлення Джессі у травні 2015 року від Raspbian.
Майкл МакГарра

Без образи, але немає такого поняття, як джессі ядро. За допомогою Rasbian Netinstaller ви можете встановити wheezy або jessie, і в обох випадках буде встановлено саме те саме ядро.
Дідерік де Хаас

Хоча це правда, що ядра названі за версією, моя проблема полягала не в тому, як завантажити rasppin netinstaller. Моєю проблемою було співставлення файлів зображень від хороших людей у ​​Raspberry Pi з належною версією ядра. В майбутньому я сподіваюся, що люди, які натрапляють на це питання, переглянуть мої повідомлення про помилки та зрозуміють, у чому їх проблема.
Майк S

@MichaelMcGarrah отримав його на роботу після прочитання вікі цього репо: raspberrypi.stackexchange.com/a/53993/33424 Ви повинні налаштувати Raspbian зображення трохи.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1

Не соромтеся переглянути моє ядро ​​з включеною програмою qemu: https://github.com/diederikdehaas/raspbian-kernel
У повідомленнях комісій ви можете знайти докладні описи того, що і як змінилося.
Більшість її було засновано на цій статті: https://web.archive.org/web/20131210001638/http://xecdesign.com/compiling-a-kernel/


1

Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, ядро ​​ванілі

введіть тут опис зображення

Кроки:

  1. Компілюйте 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, іншими методами за адресою: /ubuntu/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.

Мінус полягає в тому, що вам потрібно завантажити модифіковане ядро ​​(див. Емуляція за допомогою Qemu: чому додаткове ядро? ) Та змінити зображення, щоб воно було менш репрезентативним для реальної системи.

  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

    Для чого потрібне це додаткове зображення ядра: Емуляція за допомогою Qemu: навіщо додаткове ядро?

  2. Змініть зображення Raspbian, як згадувалося на веб-сторінці : https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulation-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c

    Підсумок:

    1. Змонтуйте зображення так само, як ми це робили для -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, ядро ​​ванілі

У цій новій версії Ubuntu QEMU 2.8.0 є типовим, тому нам не потрібно компілювати QEMU з джерела для -M raspi2. Однак 2.8.0 зависає під завантаженням після повідомлення:

Console: switching to colour frame buffer device 100x30

Це свідчить про те, наскільки нестабільним -M raspi2все ще є.

[не вдалося] 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)

bztsrc/raspi3-tutorial RPI3 з чистого металу на QEMU

https://github.com/bztsrc/raspi3-tutorial - це гарний набір прикладів, які просто працюють над QEMU, надто швидкий початок роботи: Як зробити емуляцію QEMU для голого металу Raspberry Pi зображення


Ваш метод з losetupнадмірно складним. Ви можете замість цього просто скористатись fdisk -l your-image.img, а потім використати зсув до розділу, що знаходиться в mountопції -o loop,offset=$((512*YOUR_OFFSET)).
Руслан

-M raspi2 не працює
zhaofeng-shu33

0

Більшість путівників застаріли і містять непрацюючі посилання. Ви повинні використовувати виправлене ядро, яке відповідає розширеній версії, яку ви використовуєте.

Наступний посібник працює з feb 2017. У ньому є сценарій, який забезпечує зміну зображення raspbian для запуску в QEMU, а також автоматично ділиться вашим мережевим зв’язком з raspbian.

https://ownyourbits.com/2017/02/06/raspbian-on-qemu-with-network-access/


-1

Ви можете завантажити моє користувацьке ядро ​​(4.1.7) для Raspbian Jessie на моєму github, polaco1782 . Дотримуйтесь інструкцій щодо файлів doc.


1
Ваше ядро ​​надсилає мене в екстрений режим підказки кожного разу, коли я намагаюся наслідувати. Я зробив так, як написано у прочитаному мені файлі. (Дивіться останню публікацію на -> raspberrypi.org/forums/viewtopic.php?t=112259 ) Чи можете ви відредагувати свою відповідь, щоб поетапно показати, що ви змінили в базовому зображенні джессі, щоб воно працювало. Іншим користувачам це стане в нагоді, оскільки тепер, коли зображення Джессі живе, все більше та більше користувачів будуть наслідувати jessie на qemu. Заздалегідь спасибі.
dhruvvyas90

Чи можете ви розширити свою відповідь, щоб пояснити, що є звичним у вашому ядрі?
Greenonline

Мені вдалося вирішити свою проблему, коментуючи fstabзаписи mmcblk.
dhruvvyas90

@Greenonline Оскільки qemu не підтримує платформу Rpi, для налаштування rpi на Qemu є необхідна налаштування ядра. Ви не можете просто взяти ядро ​​Rpi і змусити його працювати поза коробкою.
dhruvvyas90
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.