On Wednesday 29. May 2019 18.27.03 Paul Boddie wrote:
P.S. I have a selfish interest in following this as I could imagine also trying out L4Re on the Raspberry Pi at some point. I guess that the framebuffer isn't currently supported though.
Well, I got round to trying this, but it hasn't been entirely successful.
First of all, I made a toolchain using Buildroot 2019.02.2 and what are effectively the raspberrypi0_defconfig settings. The generated gcc is version 7.4.0, ld is version 2.29.1.
Note that I am using the Zero, not the Zero-W, model. This doesn't appear to have any real toolchain implications, as far as I can tell from looking at the configurations.
Some pertinent settings:
BR2_GCC_TARGET_ABI="aapcs-linux" BR2_GCC_TARGET_CPU="arm1176jzf-s" BR2_GCC_TARGET_FPU="vfp" BR2_GCC_TARGET_FLOAT_ABI="hard" BR2_GCC_TARGET_MODE="arm" BR2_ARM_CPU_HAS_FPU=y BR2_ARM_CPU_HAS_VFPV2=y BR2_ARM_CPU_HAS_ARM=y BR2_ARM_CPU_HAS_THUMB=y BR2_ARM_CPU_ARMV6=y BR2_arm1176jzf_s=y BR2_ARM_EABIHF=y BR2_ARM_FPU_VFPV2=y
Then, I built Fiasco with the Raspberry Pi Zero W selected:
CONFIG_PF_BCM283X=y CONFIG_BSP_NAME="bcm283x" CONFIG_CAN_ARM_CPU_1176=y CONFIG_ARM_V6=y CONFIG_ARM_V6PLUS=y CONFIG_PF_BCM283X_RPIZW=y CONFIG_ABI_VF=y CONFIG_ARM_1176=y CONFIG_FPU=y CONFIG_LAZY_FPU=y CONFIG_ARM_1176_CACHE_ALIAS_FIX=y CONFIG_ARM_CPU_ERRATA=y
In this configuration, I also selected things that appeared useful, such as FPU support and the fixes/errata, which might not have been appropriate.
Finally, I built L4Re with the Raspberry Pi Model B selected as platform:
CONFIG_CPU_ARM_ARMV6ZK=y CONFIG_CPU="armv6zk" CONFIG_PLATFORM_TYPE="rpi_b" CONFIG_CPU_ARMV6KPLUS=y CONFIG_CPU_ARMV6PLUS=y CONFIG_PLATFORM_TYPE_rpi_b=y
Having built the "hello" example, deploying the bootstrap_hello.raw file to the microSD card as hello.raw, alongside the extra files that the Raspberry Pi's proprietary bootloader uses, with a config.txt file that indicates the kernel...
kernel=hello.raw
...I see the payload starting over the UART connection, but it appears that the board keeps restarting, meaning that I just see the following over and over again:
L4 Bootstrapper Build: #8 Mon Jun 10 19:44:17 CEST 2019, 7.4.0 Scanning up to 512 MB RAM, starting at offset 32MB Memory size is 512MB (00000000 - 1fffffff) RAM: 0000000000000000 - 000000001fffffff: 524288kB Total RAM: 512MB Scanning fiasco Scanning sigma0 Scanning moe Moving up to 5 modules behind 1100000
Instrumenting the boot_modules.cc file in the bootstrap package, I see that the Boot_modules::move_modules is not completed. Generally, modules appear to be identified, but some other operation is causing a problem that appears to cause the board to reset.
I have also tried building Fiasco for first generation Raspberry Pi devices along with the FPU support and other special options. And I have tried building for the Pi Zero-W without these extra options. The result seems to be the same, so I suspect that the kernel plays no role here, particularly since the problem appears to lie in the bootstrap code.
I wonder if others who have looked at Raspberry Pi hardware might be able to share their experiences. It is rather frustrating to have to piece together the details of building and deploying for hardware ostensibly supported by L4Re.
Paul