4.5. Broadcom BCM283x

4.5.1. Raspberry Pi

  1. Prepare an SD or microSD card with a FAT filesystem of at least 30 MB in size.

  2. Download the Raspberry Pi firmware (120 MB), unzip it, and copy the contents of the boot/ folder to your card.

  3. Use make rpi_defconfig; make to build barebox. This will create the following images:

    • images/barebox-raspberry-pi-1.img for the BCM2835/ARM1176JZF-S (Raspberry Pi 1, Raspberry Pi Zero)

    • images/barebox-raspberry-pi-2.img for the BCM2836/CORTEX-A7 (Raspberry Pi 2)

    • images/barebox-raspberry-pi-3.img for the BCM2837/CORTEX-A53 (Raspberry Pi 3)

    • images/barebox-raspberry-pi-cm3.img for the BCM2837/CORTEX-A53 (Raspberry Pi CM3)

    Copy the respective image for your model to your SD card and name it barebox.img.

    Alternatively, images/barebox-dt-2nd.img can be used as single bootloader for all supported 32-bit boards. In this case the device tree supplied by the video core is directly used by barebox to probe. The device trees in arch/arm/dts/*.dtb will need to be renamed for alignment with the naming scheme expected by the videocore.

  4. Create a text file config.txt on the SD card with the following content:


    If you want to use the mini-uart instead of the PL011, you may need to additionally set:


    This is required on boards, like the Raspberry Pi Zero W, that use the mini-uart as the primary UART. It is needed on boards like the CM3 as well if the mini-uart is to be used.

    (For more information, refer to the documentation for config.txt.)

  5. Connect to board’s UART (115200 8N1); Use PIN6 (GND), PIN8 (UART_TX), PIN10 (UART_RX) pins.

  6. Turn board’s power on.

VideoCore firmware creates a device tree based on the entries in config.txt. This file is available to the Barebox environment in the file /vc.dtb. For example, to boot a kernel shipped with Raspbian:

bootm -o /vc.dtb /boot/kernel7.img

VideoCore device tree also contains the kernel command-line that is constructed from cmdline.txt and other parameters internally determined by the VideoCore firmware. Normally in Barebox this command-line gets overwritten on boot by the Linux bootargs (see Booting Linux).

The original command-line from VideoCore device tree is available to the Barebox environment in the vc.bootargs global variable. For example, to append it to the Linux bootargs:

global linux.bootargs.vc="$global.vc.bootargs"