[U-Boot] [PATCH 1/2] distro_bootcmd: Add command to run FreeBSD

Heinrich Schuchardt xypron.glpk at gmx.de
Tue Dec 12 22:53:15 UTC 2017


On 12/12/2017 09:00 PM, Emmanuel Vadot wrote:
> On Tue, 12 Dec 2017 20:29:42 +0100
> Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> 
>> On 12/12/2017 10:03 AM, Emmanuel Vadot wrote:
>>>
>>>  Hi Heinrich,
>>>
>>> On Mon, 4 Dec 2017 20:18:22 +0100
>>> Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>>
>>>> On 12/04/2017 08:06 PM, Emmanuel Vadot wrote:
>>>>> Add commands that scans for the FreeBSD loader and run it if found.
>>>>> FreeBSD has two loader: ubldr which is an ELF binary and ubldr.bin which
>>>>> is a PIE binary.
>>>>>
>>>>> Signed-off-by: Emmanuel Vadot <manu at bidouilliste.com>
>>>>> ---
>>>>>  include/config_distro_bootcmd.h | 32 ++++++++++++++++++++++++++++++++
>>>>>  1 file changed, 32 insertions(+)
>>>>>
>>>>> diff --git a/include/config_distro_bootcmd.h b/include/config_distro_bootcmd.h
>>>>> index 5c469a23fa..424d63a355 100644
>>>>> --- a/include/config_distro_bootcmd.h
>>>>> +++ b/include/config_distro_bootcmd.h
>>>>> @@ -158,6 +158,36 @@
>>>>>  #define SCAN_DEV_FOR_EFI
>>>>>  #endif
>>>>>  
>>>>> +#ifdef CONFIG_DISTRO_FREEBSD
>>>>> +#define BOOTENV_SHARED_FREEBSD                                            \
>>>>> +	"boot_freebsd_binary="                                            \
>>>>> +		"load ${devtype} ${devnum}:${distro_bootpart} "           \
>>>>> +			"${kernel_addr_r} ubldr.bin; "                    \
>>>>> +		"go ${kernel_addr_r}\0"                                   \
>>>>> +	\
>>>>> +	"boot_freebsd_elf="                                               \
>>>>> +		"load ${devtype} ${devnum}:${distro_bootpart} "           \
>>>>> +			"${kernel_addr_r} ubldr; "                        \
>>>>> +		"bootelf ${kernel_addr_r}\0"                              \
>>>>> +	\
>>>>> +	"scan_dev_for_freebsd="                                           \
>>>>> +		"if test -e ${devtype} ${devnum}:${distro_bootpart} "     \
>>>>> +					"ubldr.bin; then "                \
>>>>
>>>> Your commit message does not provide any reason why you need this.
>>>>
>>>> Couldn't you simply create a boot.scr that invokes ubldr.bin or ubldr as
>>>> other distros do?
>>>>
>>>> E.g. Debian has a package flash-boot which generates a new boot.scr
>>>> every time a new kernel is installed.
>>>>
>>>> Best
>>>
>>>  The answer is really easy, for FreeBSD 11 (our actual stable release)
>>> we still use ubldr.bin/ubldr but for FreeBSD 12 (our current HEAD) we
>>> want to switch to EFI (almost there). Our ports tree/packages are
>>> common to both releases and using boot.scr would mean to re-implement
>>> the distroboot logic in it.
>>>
>>
>> Why should U-Boot implement any distro specific logic which could be
>> implemented with in the distro itself?
>>
>> My feeling is that U-Boot should be distro agnostic. It shall implement
>> standards and load any conforming distro.
>>
>> Best regards
>>
>> Heinrich
> 
>  I was under the impression that u-boot will automatically load a linux
> kernel but it seems that I'm wrong. If that's the case yes this patch
> can be dropped and I'll deal with the issue locally for FreeBSD.

https://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/ and
U-Boot's /doc/README.distro describe how Linux or any other distro can
be booted.

Unfortunately not all systems supported by U-Boot can be built with
CONFIG_DISTRO_DEFAULTS.

doc/README.efi describes the EFI boot support.

Rob Clark recently contributed
https://lists.denx.de/pipermail/u-boot/2017-September/305211.html

Unfortunately the boot manager is not yet described in a README.
So we only have the online help:

bootmgr [fdt addr]
  - load and boot EFI payload based on BootOrder/BootXXXX variables.

This refers to EFI variable that can be set by an EFI application.
Currently the variables cannot be persisted so bootmgr is not really usable.

Regards

Heinrich

> 
>>>  I'll resend a V2 explaining this better in the commit message.
>>>
>>>>> +				"echo Found FreeBSD U-Boot Loader (bin);" \
>>>>> +				"run boot_freebsd_binary; "               \
>>>>> +				"echo FREEBSD FAILED: continuing...; "    \
>>>>> +		"elif test -e ${devtype} ${devnum}:${distro_bootpart} "   \
>>>>> +					"ubldr; then "                    \
>>>>> +				"echo Found FreeBSD U-Boot Loader (elf);" \
>>>>> +				"run boot_freebsd_elf; "                  \
>>>>> +				"echo FREEBSD FAILED: continuing...; "    \
>>>>> +		"fi;\0"
>>>>> +#define SCAN_DEV_FOR_FREEBSD "run scan_dev_for_freebsd;"
>>>>> +#else
>>>>> +#define BOOTENV_SHARED_FREEBSD
>>>>> +#define SCAN_DEV_FOR_FREEBSD
>>>>> +#endif
>>>>> +
>>>>>  #ifdef CONFIG_SATA
>>>>>  #define BOOTENV_SHARED_SATA	BOOTENV_SHARED_BLKDEV(sata)
>>>>>  #define BOOTENV_DEV_SATA	BOOTENV_DEV_BLKDEV
>>>>> @@ -331,6 +361,7 @@
>>>>>  	BOOTENV_SHARED_IDE \
>>>>>  	BOOTENV_SHARED_UBIFS \
>>>>>  	BOOTENV_SHARED_EFI \
>>>>> +	BOOTENV_SHARED_FREEBSD \
>>>>>  	"boot_prefixes=/ /boot/\0" \
>>>>>  	"boot_scripts=boot.scr.uimg boot.scr\0" \
>>>>>  	"boot_script_dhcp=boot.scr.uimg\0" \
>>>>> @@ -374,6 +405,7 @@
>>>>>  			"run scan_dev_for_scripts; "                      \
>>>>>  		"done;"                                                   \
>>>>>  		SCAN_DEV_FOR_EFI                                          \
>>>>> +		SCAN_DEV_FOR_FREEBSD                                      \
>>>>>  		"\0"                                                      \
>>>>>  	\
>>>>>  	"scan_dev_for_boot_part="                                         \
>>>>>
>>>
>>>
>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot at lists.denx.de
>> https://lists.denx.de/listinfo/u-boot
> 
> 



More information about the U-Boot mailing list