Stáhl jsem si obrázek Raspbian na této stránce. Snažím se zkompilovat jádro, které lze použít ke spuštění obrazu v rámci qemu.
Stáhl jsem zdrojový kód linuxového jádra z kernel.org a spustil:
make versatile_defconfig
make menuconfig
Poté jsem do jádra přidal následující funkce:
- Podpora PCI (CONFIG_PCI)
- Podpora zařízení SCSI (CONFIG_SCSI)
- Podpora disků SCSI (CONFIG_BLK_DEV_SD)
- Podpora SCSI SYM53C8XX verze 2 (CONFIG_SCSI_SYM53C8XX_2)
- Souborový systém Extended 3 (ext3) (CONFIG_EXT3_FS)
- Souborový systém Extended 4 (ext4) (CONFIG_EXT4_FS)
Také jsem smyčkou připojil obraz disku a:
- přidal komentář
/etc/ld.so.preload
- upraveno
/etc/fstab
použít/dev/sda1
a/dev/sda2
Poté jsem odpojil obraz a pokusil se spustit počítač pomocí:
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"
Jádru se podařilo připojit souborový systém, ale okamžitě narazil na nějaké potíže:
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
Nejprve mě napadlo, jestli to nesouvisí se SELinuxem. Zkusil jsem zavést jádro pomocí:
selinux=0 enforcing=0
…ale neznamenalo to absolutně žádný rozdíl.
Co dělám špatně? A co tato chyba znamená?
Aktualizace
Také jsem bez úspěchu zkusil následující:
- Zkoušel jsem kompilaci s a bez
CONFIG_VFP
povoleno - Přidal jsem
CONFIG_DEVTMPFS
aCONFIG_DEVTMPFS_MOUNT
- Použití této opravy a povolení
CPU_V6
,CONFIG_MMC_BCM2835
aCONFIG_MMC_BCM2835_DMA
- Pomocí
gcc-linaro-arm-linux-gnueabihf-raspbian
toolchain -
Kompilace jednoduchého C programu s toolchainem a předání jeho cesty jádru přes
init=
funguje – což mě vede k přesvědčení, že mezi binárními formáty existuje rozpor-
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`
-
rozdíl hlavičky ELF
-
Zkompiloval jsem tento jednoduchý program v C s toolchain:
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
…a zkopírovali jej do /root
v obrázku změnou init=
spouštěcí parametr na /root/simple
. To mi při bootování dává následující:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Zdá se, že se dusí execv()
zavolejte.
Přijatá odpověď:
Zkoušel jsem také zavést obrazy ARM pomocí QEMU bez spolehlivého úspěchu. Je mi líto, že musím říci, že pro práci s operačním systémem ARM budete muset použít skutečný hardware nebo trpělivě čekat, až vývojáři vytvoří spolehlivější emulátor pro ARM.
Související:Hledat soubory, jejichž cesty obsahují několik slov bez konkrétního pořadí mezi nimi?
Je to prosinec 2018 a stále existují problémy s qemu-system-arm
.
Podařilo se mi zavést Raspbian Jessie na emulátoru QEMU pomocí čerstvě nainstalovaného Ubuntu 18 Bionic, ale nebyl pro mou práci stabilní, takže jsem ho musel nechat pro skutečný hardware. Často by to zamrzlo.
qemu-system-arm
nefungoval na mém OS, tak jsem použil Virtualbox k instalaci Ubuntu Bionic a uvnitř Bionic jsem nainstaloval Raspbian s QEMU.
Postupoval jsem podle tohoto návodu:https://azeria-labs.com/emulate-raspberry-pi-with-qemu/
Hodně štěstí