All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Dahl <ada@thorsis.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] U-Boot and The Boot Loader Specification
Date: Fri, 19 Oct 2018 10:17:27 +0200	[thread overview]
Message-ID: <18120382.ptJS9iqsuP@ada> (raw)
In-Reply-To: <20181019065315.738CB240044@gemini.denx.de>

Hello,

Am Freitag, 19. Oktober 2018, 08:53:15 CEST schrieb Wolfgang Denk:
> In message <2092760.TlMJupW03t@ada> you wrote:
> > I played with the extlinux.conf format snippets from the U-Boot docs.
> > Upstream extlinux docs are not really helpful, especially not for options
> > regarding dtb> 
> > files. And I tried a config based on the Boot Loader Spec:
> > 	Scanning mmc 2:1...
> > 	Found /boot/extlinux/extlinux.conf
> > 	Retrieving file: /boot/extlinux/extlinux.conf
> > 	366 bytes read in 268 ms (1000 Bytes/s)
> > 	Ignoring unknown command: title
> > 	Ignoring unknown command: version
> > 	Ignoring unknown command: options
> > 	Ignoring unknown command: linux
> > 	Ignoring unknown command: devicetree
> > 
> > Am I right, U-Boot does not support that spec at all? Files are in
> > different positions, and the keywords are all different? If so, then the
> > U-Boot documentation is misleading (and people will be frustrated to
> > follow the hints given in there).
> 
> It would definitely help if you tell us which actual command
> (sequence) you used to get this output, and what the exact content
> of this extlinux.conf was.

Okay first the content of /boot/extlinux/extlinux.conf from the root 
filesystem, which does not work (of course without additional linebreaks from 
my mail client):

title          PTXdist
version                4.9.133
options                mtdparts=gpmi-nand:8M(fcb),7M(reserved)ro,512k(env1),
512k(env2),-(fs) ubi.mtd=fs console=ttymxc0,115200 rootwait rw root=/dev/
mmcblk0p1
linux          /boot/zImage
devicetree     /boot/imx6dl-ttcore.dtb

As you might guess, I use ptxdist for building the BSP for an i.MX6 based 
platform. Currently everything is on a SD-Card and the system can boot from 
that card, if I load kernel image and dtb manually in U-Boot (or use another 
extlinux.conf).

> Without such information, we cannot even guess what you did.

I was basically following the instructions from doc/README.distro so I read 
http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/ as mentioned in 
section "Boot Configuration Files" and set CONFIG_DISTRO_DEFAULTS=y and added 
the following to the board configuration header file in include/configs/

/*  PHYS_ADDR is 0x10000000 for i.MX6S,
 *  Kernel doc recommends to put dtb at 128 MiB, zImage above 32 MiB,
 *  but below 128 MiB. So we put them there and scriptaddr after dtb.
 *  We don't strictly need ramdisk_addr_r, but just set it to some
 *  reasonable value according to doc/README.distro …
 *  This should not collide with U-Boot which places itself at the
 *  lowest 8k and something around 8 MB at the top of the memory, the
 *  board currently has 512 MiB.    */
#define MEM_LAYOUT_ENV_SETTINGS \
        "kernel_addr_r=0x12000000\0" \
        "fdt_addr_r=0x18000000\0" \
        "scriptaddr=0x18100000\0" \
        "pxefile_addr_r=0x18200000\0" \
        "ramdisk_addr_r=0x18300000\0"

#define BOOT_TARGET_DEVICES(func) \
        func(MMC, mmc, 0) \
        func(MMC, mmc, 1) \
        func(MMC, mmc, 2) \
        func(UBIFS, ubifs, 0) \
        func(USB, usb, 0)

#ifndef CONFIG_SPL_BUILD
#include <config_distro_defaults.h>
#include <config_distro_bootcmd.h>
#endif

So in U-Boot env the following is set (this is populated by U-Boot itself by 
default, I removed non interesting lines and added some linebreaks):

boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} $
{prefix}${script}; source ${scriptaddr}

boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any $
{scriptaddr} ${prefix}extlinux/extlinux.conf

boot_net_usb_start=usb start
boot_prefixes=/ /boot/
boot_script_dhcp=boot.scr.uimg
boot_scripts=boot.scr.uimg boot.scr
boot_targets=mmc0 mmc1 mmc2 ubifs0 usb0 
bootcmd=run distro_bootcmd
bootcmd_mmc0=setenv devnum 0; run mmc_boot
bootcmd_mmc1=setenv devnum 1; run mmc_boot
bootcmd_mmc2=setenv devnum 2; run mmc_boot
bootcmd_ubifs0=setenv devnum 0; run ubifs_boot
bootcmd_usb0=setenv devnum 0; run usb_boot
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run 
scan_dev_for_boot_part; fi
pxefile_addr_r=0x18200000
scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; 
for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run 
scan_dev_for_scripts; done;

scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env 
exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do 
if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run 
scan_dev_for_boot; fi; done

scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} $
{prefix}extlinux/extlinux.conf; then echo Found ${prefix}extlinux/
extlinux.conf; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi

scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} $
{devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script 
${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; 
done


What happens is what I wrote in the first mail. extlinux.conf is found and 
'sysboot' fails because it ignores all the keywords.

What actually works is using an extlinux.conf similar to the examples in doc/
README.distro, but there are two things to mention:

1) keywords are used which are not mentioned in the upstream extlinux 
documentation
2) keywords from the bootloader spec don't work at all

So, although the idea to have a config file in the Linux filesystem an let the 
distribution set things in it, might be the same as in the Boot Loader 
Specification, my impression is, U-Boot does not follow the specification. 
Neither does it support multiple files (just /boot/extlinux/extlinux.conf 
works) nor the keywords specified?

An extlinux.conf that works is this:

label   PTXdist
  kernel    /boot/zImage
  fdtdir    /boot
  append    mtdparts=gpmi-nand:8M(fcb),7M(reserved)ro,512k(env1),512k(env2),-
(UBI) ubi.mtd=UBI console=ttymxc0,115200 rootwait rw root=/dev/mmcblk0p1

I have to add, I currently still use U-Boot 2016.09, but I did a thorough 
research in master and the responsible code in cmd/pxe.c did not change from a 
functional point of view since 2016.09.

Greets
Alex

  reply	other threads:[~2018-10-19  8:17 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-17 12:04 [U-Boot] U-Boot and The Boot Loader Specification Alexander Dahl
2018-10-19  6:53 ` Wolfgang Denk
2018-10-19  8:17   ` Alexander Dahl [this message]
2018-10-19  9:10     ` Wolfgang Denk
2018-10-19  9:40       ` Alexander Dahl
2018-10-19 10:12         ` Wolfgang Denk
2018-10-25 12:53           ` Dennis Gilmore

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=18120382.ptJS9iqsuP@ada \
    --to=ada@thorsis.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.