Я завантажив зображення Raspbian на цю сторінку . Я намагаюся скласти ядро, яке можна використовувати для завантаження зображення в межах qemu.
Я завантажив джерело ядра Linux з kernel.org і побіг:
make versatile_defconfig
make menuconfig
Потім я додав наступні функції до ядра:
- Підтримка PCI (CONFIG_PCI)
- Підтримка пристроїв SCSI (CONFIG_SCSI)
- Підтримка диска SCSI (CONFIG_BLK_DEV_SD)
- SYM53C8XX Версія 2 Підтримка SCSI (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 strippedfile <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/emulating-raspbian-using-qemu , чи -cpu arm1176допомагає?