Я скачал изображение Распбиана на этой странице . Я пытаюсь скомпилировать ядро, которое можно использовать для загрузки образа в qemu.
Я скачал исходный код ядра Linux с kernel.org и запустил:
make versatile_defconfig
make menuconfig
Затем я добавил следующие функции в ядро:
- Поддержка PCI (CONFIG_PCI)
- Поддержка устройств SCSI (CONFIG_SCSI)
- Поддержка дисков SCSI (CONFIG_BLK_DEV_SD)
- Поддержка SCSI SYM53C8XX версии 2 (CONFIG_SCSI_SYM53C8XX_2)
- Расширенная 3 (ext3) файловая система (CONFIG_EXT3_FS)
- Расширенная 4 (ext4) файловая система (CONFIG_EXT4_FS)
Я также замонтировал образ диска и:
- закомментировал
/etc/ld.so.preload
- приспособлен
/etc/fstab
для использования/dev/sda1
и/dev/sda2
Затем я размонтировал образ и попытался запустить машину с:
qemu-system-arm \
-M versatilepb \
-m 256 \
-kernel linux-4.3/arch/arm/boot/zImage \
-hda 2015-09-24-raspbian-jessie.img \
-serial stdio \
-append "root=/dev/sda2 rootfstype=ext4 rw console=ttyAMA0"
Ядро смогло смонтировать файловую систему, но сразу столкнулось с некоторыми проблемами:
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
CPU: 0 PID: 1 Comm: init Not tainted 4.3.0 #1
Hardware name: ARM-Versatile PB
[<c001b5c0>] (unwind_backtrace) from [<c0017e18>] (show_stack+0x10/0x14)
[<c0017e18>] (show_stack) from [<c0069860>] (panic+0x84/0x1ec)
[<c0069860>] (panic) from [<c0025b98>] (do_exit+0x81c/0x850)
[<c0025b98>] (do_exit) from [<c0025c5c>] (do_group_exit+0x3c/0xb8)
[<c0025c5c>] (do_group_exit) from [<c002dfcc>] (get_signal+0x14c/0x59c)
[<c002dfcc>] (get_signal) from [<c001bf28>] (do_signal+0x84/0x3a0)
[<c001bf28>] (do_signal) from [<c0017a94>] (do_work_pending+0xb8/0xc8)
[<c0017a94>] (do_work_pending) from [<c0014f30>] (slow_work_pending+0xc/0x20)
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Сначала я задавался вопросом, не связано ли это с SELinux. Я попытался загрузить ядро с:
selinux=0 enforcing=0
... но это не имело никакого значения.
Что я делаю неправильно? И что означает эта ошибка?
Обновления
Я также попробовал следующее, но не повезло:
- Я попытался скомпилировать с
CONFIG_VFP
включенным и без - Я добавил
CONFIG_DEVTMPFS
иCONFIG_DEVTMPFS_MOUNT
- Применяя этот патч и позволяет
CPU_V6
,CONFIG_MMC_BCM2835
, &CONFIG_MMC_BCM2835_DMA
- Использование
gcc-linaro-arm-linux-gnueabihf-raspbian
цепочки инструментов Компиляция простой программы на C с помощью цепочки инструментов и последующая передача ее пути к ядру с помощью
init=
работ - наводит меня на мысль, что существует несоответствие между двоичными форматамиfile <sample program>
:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.26, BuildID[sha1]=e5ec8884499c51b248df60aedddfc9acf72cdbd4, not stripped
file <file from the image>
:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3e92423821f3325f8cb0ec5d918a7a1c76bbd72c, stripped`
Я скомпилировал эту простую программу на C с помощью набора инструментов:
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
... и скопировал его /root
в образ, изменив init=
параметр загрузки на /root/simple
. Это дает мне следующее при загрузке:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Кажется, задыхается от execv()
звонка.
источник
cat .config | grep CONFIG_VFP
уступаетCONFIG_VFP=y
- похоже, он включен.CONFIG_VFP
и это не имеет значения.versatilepb
это процессор ARM926, который старше, чем ARM1176 RPi, поэтому двоичные файлы Raspbian могут использовать другие функции, которые не эмулируются. С unixmen.com/emulation-raspbian-using-qemu ,-cpu arm1176
помогает?Ответы:
Я также попытался загрузить изображения ARM с QEMU, но безуспешно. Мне жаль говорить, что вам придется использовать настоящее оборудование для работы с ОС ARM или терпеливо ждать, пока разработчики сделают более надежный эмулятор для ARM.
Его декабрь 2018 года, и все еще есть проблемы с
qemu-system-arm
.Я смог загрузить Raspbian Jessie на эмуляторе QEMU, используя только что установленный Ubuntu 18 Bionic, однако он не был стабильным для моей работы, поэтому мне пришлось оставить его для реального оборудования. Это будет часто замерзать.
qemu-system-arm
не работал на моей ОС, поэтому я использовал Virtualbox для установки Ubuntu Bionic, а внутри Bionic я установил Raspbian с QEMU.Я следовал этому руководству: https://azeria-labs.com/emulate-raspberry-pi-with-qemu/
Удачи
источник
Я знаю , что это несколько лет вопрос, но так как есть еще нет хороших ответов для тестирования Raspberry Pi изображений с QEMU, позвольте мне внести частичный ответ.
Я хотел использовать образ Ubuntu 16.04 raspi3 с QEMU. Скачал, распаковал, смонтировал загрузочный раздел, получил файл vmlinuz и файл initrd, и ... qemu-system-arm -M blabla -cpu ... -kernel ... не работает. Черный экран.
Затем , используя ядро-4.4.34 для QEMU-Jessie из здесь с изображением / дружественный корневой файловой системы привели к тому же «INIT убит» проблема у вас есть.
Но так как я использую известное хорошее ядро, и поскольку ваша простая статически связанная программа на C работает, вероятно, проблема возникает только тогда, когда используется динамический компоновщик. (И компоновщик не особенно чувствителен к ядрам, потому что ld-2.24 из последнего raspbian на основе debian9 (stretch) отлично работает на ядре 4.4 debian8 (jessie).)
Даже после копирования файлов, которые работают с / с изображением "jessie" в образе ubuntu xenial, я получил только странную ошибку "call preinit: KE".
Да, и любой, кто ищет компиляцию ядра для Raspberry Pi, должен посетить этот сайт, который напрямую ссылается на « официальные » документы / инструкции.
источник
Ядро linux больше не запускает init, вместо этого он запускает systemd, который похож на init, но немного более продвинутые функции и дополнительные возможности многозадачности, хотя против философии unix полезна systemd.
источник