[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