[yocto] [meta-raspberrypi][PATCH] u-boot: Simplify boot script

Paul Barker paul at paulbarker.me.uk
Thu Nov 3 13:57:49 PDT 2016


On Wed,  2 Nov 2016 00:49:11 +1100
Jonathan Liu <net147 at gmail.com> wrote:

> device_tree_address=0x100 is set in config.txt so the firmware will
> load a patched device tree blob to 0x100 before passing control to
> U-Boot. The U-Boot script will then read the command line arguments
> generated by the firmware from the device tree and boot the kernel
> with the command line arguments and the loaded device tree.
> 
> This allows things like MAC address, board revision and serial number
> to be correctly configured and options in config.txt to be used.
> 
> Signed-off-by: Jonathan Liu <net147 at gmail.com>
> ---
>  recipes-bsp/bootfiles/rpi-config_git.bb                | 5 +++++
>  recipes-bsp/rpi-u-boot-scr/files/boot.cmd              | 3 +++
>  recipes-bsp/rpi-u-boot-scr/files/raspberrypi/boot.cmd  | 6 ------
>  recipes-bsp/rpi-u-boot-scr/files/raspberrypi0/boot.cmd | 6 ------
>  recipes-bsp/rpi-u-boot-scr/files/raspberrypi2/boot.cmd | 6 ------
>  recipes-bsp/rpi-u-boot-scr/files/raspberrypi3/boot.cmd | 6 ------
>  6 files changed, 8 insertions(+), 24 deletions(-)
>  create mode 100644 recipes-bsp/rpi-u-boot-scr/files/boot.cmd
>  delete mode 100644 recipes-bsp/rpi-u-boot-scr/files/raspberrypi/boot.cmd
>  delete mode 100644 recipes-bsp/rpi-u-boot-scr/files/raspberrypi0/boot.cmd
>  delete mode 100644 recipes-bsp/rpi-u-boot-scr/files/raspberrypi2/boot.cmd
>  delete mode 100644 recipes-bsp/rpi-u-boot-scr/files/raspberrypi3/boot.cmd
> 
> diff --git a/recipes-bsp/bootfiles/rpi-config_git.bb b/recipes-bsp/bootfiles/rpi-config_git.bb
> index f610718..2f4d25c 100644
> --- a/recipes-bsp/bootfiles/rpi-config_git.bb
> +++ b/recipes-bsp/bootfiles/rpi-config_git.bb
> @@ -76,6 +76,11 @@ do_deploy() {
>          echo "dispmanx_offline=1" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
>      fi
>  
> +    # U-Boot Device Tree support
> +    if [ "${KERNEL_IMAGETYPE}" = "uImage" ]; then
> +        sed -i '/#device_tree_address/ c\device_tree_address=0x100' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
> +    fi
> +
>      # SPI bus support
>      if [ -n "${ENABLE_SPI_BUS}" ] || [ "${PITFT}" = "1" ]; then
>          echo "# Enable SPI bus" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
> diff --git a/recipes-bsp/rpi-u-boot-scr/files/boot.cmd b/recipes-bsp/rpi-u-boot-scr/files/boot.cmd
> new file mode 100644
> index 0000000..3f7e3b6
> --- /dev/null
> +++ b/recipes-bsp/rpi-u-boot-scr/files/boot.cmd
> @@ -0,0 +1,3 @@
> +fdt addr ${fdt_addr_r} && fdt get value bootargs /chosen bootargs
> +fatload mmc 0:1 ${kernel_addr_r} uImage
> +bootm ${kernel_addr_r} - ${fdt_addr_r}
>
> <snip deleted files>

This doesn't work for me.

On RaspberryPi B+ I get no kernel messages during the boot. I do get a
login prompt though and the boot is successful.

On RaspberryPi 3 I don't get anything after "Starting kernel ...".

https://www.raspberrypi.org/documentation/configuration/device-tree.md
says:

    The base Device Trees are located alongside start.elf in the FAT
    partition (/boot from Linux), named bcm2708-rpi-b.dtb,
    bcm2708-rpi-b-plus.dtb, bcm2708-rpi-cm.dtb, and
    bcm2709-rpi-2-b.dtb.

In /boot I have:

    bcm2708-rpi-b.dtb
    bcm2708-rpi-b-plus.dtb
    bcm2709-rpi-2-b.dtb
    bcm2710-rpi-3-b.dtb

So my guess is that the RaspberryPi 3 isn't loading the right device
tree.

Is this a problem with start.elf (which we need to report upstream) or
a problem with our DTB file names?

I'd also say we probably have a problem with bootargs as it doesn't
print out kernel messages during boot.

What's the benefit of using the device tree cobbled together by
start.elf instead of loading the DTB file ourselves?

Thanks,
Paul Barker



More information about the yocto mailing list