I'm trying to run u-boot on a Pi Zero W, but after powering up, the Pi shows only the rainbow screen.

I used these instruction, but with a different config file, configs/rpi_defconfig.

I also tried the different methods, but had the same result, the rainbow screen.

May be someone knows the right configuration of U-Boot for the Pi Zero W? Or maybe the Pi Zero W isn't supported by U-Boot?

The software version is: buildroot 2017.05 which contains U-boot 2017.03.

Update 2017-06-30

I has found out u-boot doesn't support Pi Zero W and u-boot team doesn't have any plans about adding this support. So I decided to fix it and publish u-boot patch to comunity as well.

U-boot supports Pi A+. So if I understand key differences between Pi Zero and Pi A+ (like connection between BCM2835 and SD card, BCM2835 and HDMI and etc.), I will able to do it with less problems.

So right now I have only 2 question:

Is there full schematic of RPi A+ and RPi Zero W?

Or what is the key difference between RPi A+ and RPi Zero W?

Update 2017-10-19

I've made a path to support the RPi Zero W. It passed the review, but it was not accepted into master branch. To use it, download and apply:

git apply U-Boot-v2-1-1-add-support-for-Raspberry-Pi-Zero-W.patch

and after type to configure:

make rpi_0_w_defconfig

Update 2017-11-28

I fixed the build problem, you can download a new patch from link above or this one

  • Did you succeed? I'm in the same situation. – Udo G Oct 13 '17 at 20:04
  • yes, see update part of the post – dessel Oct 19 '17 at 8:36
  • I tried with the latest u-boot version (2018.03), copied u-boot.bin on the sd-card, renaming it kernel.img. It's not booting. The green light is flashing 7 times (kernel.img not recognized). Have you tried with the latest u-boot version? Which version where you using? – Rémi Apr 18 '18 at 15:11
  • @Rémi, when I used it at the last time, my version was 2018.01 – dessel Apr 19 '18 at 13:19

No, there are no full schematics for RPi A+ or RPi Zero W and there won't be according to the statement of Ben Nuttall (foundation employee):

Raspberry Pi has never been open hardware. All our software is open source, and we release as much of the hardware schematics as we can.

But there are device tree sources for the firmware and personally i made a RFC patch series on linux-rpi-kernel.

Important differences regarding to U-Boot:

  • both boards have different revisions in the OTP of the BCM2835 (mapping entry for RPI Zero W is currently missing in U-Boot)
  • RPi Zero has Bluetooth which is connected to UART0
  • RPi Zero has Wifi which is connected to MMC/SDIO interface

I answer to myself question, sorry for that.

My patch was accepted into the u-boot main branch, and now if you want t on to run u-boot on a Pi Zero W, you can just use u-boot main repository.

  • Hi, have you tested this with QEMU? – JustWe Jan 13 '20 at 13:14

I downloaded u-boot from DENX and applied the patch you created, which created the rpi_0_w_defconfig.

$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609

I created a build script in the /uboot directory:

export PATH=$PATH:/usr/gcc-linaro-7.1.1-2017.08-x86_64_arm-linux-gnueabihf/bin
which arm-linux-gnueabihf-g++
make distclean
make clean
make mrproper
make -j12 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- rpi_0_w_defconfig all

I applied the patch successfully, however when I build rpi_defconfig I am successful. When I build rpi_0_w_defconfig I receive the following error from make:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- rpi_0_w_defconfig all
from arch/arm/lib/asm-offsets.c:15:
./arch/arm/include/asm/barriers.h:33:24: error: operator '>=' has no left operand
 #if __LINUX_ARM_ARCH__ >= 7
Kbuild:64: recipe for target 'arch/arm/lib/asm-offsets.s' failed
make[2]: *** [arch/arm/lib/asm-offsets.s] Error 1
Makefile:1332: recipe for target 'prepare0' failed
make[1]: *** [prepare0] Error 2
make[1]: *** Waiting for unfinished jobs....
  HOSTLD  scripts/dtc/dtc
Makefile:461: recipe for target '__build_one_by_one' failed
make: *** [__build_one_by_one] Error 2

Any suggestions?

update 2017-11-12

U-Boot buildroot-2017.08.1 successfully builds with patch applied through git with both board names "rpi" and "rpi0". Once I applied the patch in the source directory buildroot/ I was also able to successfully build with board name "rpi_0_w".

The patch in the DENX ftp download was placed in uboot/config/ rather than the source directory uboot/. Upon moving to uboot/ and applying the patch using Git, I received the following errors with regard to the device tree compiler and the device tree binaries:

  SYM     u-boot.sym
  DTC     arch/arm/dts/bcm2836-rpi-2-b.dtb
  DTC     arch/arm/dts/bcm2835-rpi-a-plus.dtb
  DTC     arch/arm/dts/bcm2835-rpi-b.dtb
  DTC     arch/arm/dts/bcm2837-rpi-3-b.dtb
  DTC     arch/arm/dts/bcm2835-rpi-b-plus.dtb
  DTC     arch/arm/dts/bcm2835-rpi-b-rev2.dtb
  DTC     arch/arm/dts/bcm2835-rpi-a.dtb
  DTC     arch/arm/dts/bcm2835-rpi-zero-w.dtb
arch/arm/dts/bcm2835-rpi-zero-w.dtb: ERROR (phandle_references): Reference to non-existent node or label "alt3"

ERROR: Input tree has errors, aborting (use -f to force output)
scripts/Makefile.lib:319: recipe for target 'arch/arm/dts/bcm2835-rpi-zero-w.dtb' failed
make[3]: *** [arch/arm/dts/bcm2835-rpi-zero-w.dtb] Error 2
dts/Makefile:32: recipe for target 'arch/arm/dts/bcm2835-rpi-zero-w.dtb' failed
make[2]: *** [arch/arm/dts/bcm2835-rpi-zero-w.dtb] Error 2
Makefile:876: recipe for target 'dts/dt.dtb' failed
make[1]: *** [dts/dt.dtb] Error 2
Makefile:461: recipe for target '__build_one_by_one' failed
make: *** [__build_one_by_one] Error 2
  • Could you tell me which buildroot version did you use? – dessel Nov 7 '17 at 13:45
  • 1
    Welcome to Raspberry Pi! If you have another question, please ask it by clicking the Ask Question button. – Ghanima Nov 7 '17 at 14:31
  • @Barrett, see updates of my post, the u-boot master branch has git commits which clashed with my patch. – dessel Nov 28 '17 at 8:22
  • @dessel patch 3-1-1 in u-boot/ directory from git.denx.de successful. "<stdin>:5:10: fatal error: bcm283x-rpi-usb-host.dtsi: No such file or directory" from buildroot/ with patch listed in make nconfig -> Bootloader -> U-Boot -> Custom U-Boot Patch, and board name as rpi_0_w. – Barrett Nov 29 '17 at 22:25
  • @Barrett - you can try to remove line the #include "bcm283x-rpi-usb-host.dtsi from file bcm2835-rpi-zero-w.dts Are you sure you updated the u-boot master branch? – dessel Nov 30 '17 at 10:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.