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

Jonathan Liu net147 at gmail.com
Thu Nov 3 14:55:05 PDT 2016


Hi Paul,

On 4 November 2016 at 07:57, Paul Barker <paul at paulbarker.me.uk> wrote:
> 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?

As I mentioned in the commit:
"This allows things like MAC address, board revision and serial number
to be correctly configured and options in config.txt to be used."

So:
- MAC address of ethernet shown by ifconfig
- Output of cat /proc/cpuinfo

Looks like the config.txt option disables the board model auto
detection so the device_tree= config.txt isn't automatically set
properly. Probably the U-Boot binary needs to modified by mkknlimg
--dtok instead of explicitly setting the device tree address in
config.txt. Will look into this later if I have time.

Regards,
Jonathan



More information about the yocto mailing list