Post by Mark Millard via armPost by Mark Millard via arm. . .
I do not know if the FreeBSD kernel has been depending
on some U-Boot initialization for root-on-USB and the
two no longer match or what.
But I've used a release/13.0.0.0 microsd card based
boot to get older U-Boot materials (Quarterly as it
turns out). Installing such got me back to having a
root-on-USB boot of the OPi+2e (other than the
mircosd card having the older U-Boot (2020.10 as it
turns out). Of course there is also the matching
boot.scr involved --but it also is on the USB SSD.
(Similarly reverted RPi2 U-Boot, other than needing
to switch boot.scr to match.)
After booting with the reverted U-Boot related
# mount -onoatime -tmsdosfs /dev/mmcsd1s1 /mnt
# mount -onoatime /dev/mmcsd1s2a /media
# ls -Tla /mnt/
total 20
drwxr-xr-x 1 root wheel 16384 Dec 31 16:00:00 1979 .
drwxr-xr-x 25 root wheel 512 Dec 31 16:00:40 2009 ..
# ls -Tla /media/
total 60
drwxr-xr-x 2 root wheel 512 May 24 15:43:19 2021 .
drwxr-xr-x 25 root wheel 512 Dec 31 16:00:40 2009 ..
-rwxr-xr-x 1 root wheel 52456 Apr 24 19:48:36 2021 bootcode.bin
The media is also set up for booting an RPi2 via
root-in-USB ( other than bootcode.bin ).
If FreeBSD and the more modern U-Boot were well matched
for USB support, I'd expect that this sort of thing would
work (no boot.scr needed).
# ~/fbsd-based-on-what-freebsd-main.sh
FreeBSD OPiP2E_RPi2v11 14.0-CURRENT FreeBSD 14.0-CURRENT mm-src-n245445-def0058cc690 GENERIC-NODBG arm armv7 1400005 1400005
def0058cc690 (HEAD -> mm-src) mm-src snapshot for mm's patched build in git context.
merge-base: 7381bbee29df959e88ec59866cf2878263e7f3b2
merge-base: CommitDate: 2021-03-12 20:29:42 +0000
7381bbee29df (freebsd/main, freebsd/HEAD, pure-src, main) cam: Run all XPT_ASYNC ccbs in a dedicated thread
n245444 (--first-parent --count for merge-base)
Looks like 2021.04 (even before 2021.04_1) also has the
problem for root-on-USB handling.
I managed to find a 2021-Apr-09 u-boot-orangepi-plus-2e
directory copy that was 2021.04 (and its boot.scr) but
before the UEFI change. When I tried it for the
root-on-USB context I still got the hangup after "Kernel
. . .
Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [/boot/kernel/kernel]...
Using DTB provided by EFI at 0x47eea000.
Kernel entry at 0xb2e00200...
Kernel args: (null)
So it does not appear to be the UEFI change so much as
2021.04 in general for which the FreeBSD kernel and
the U-Boot are apparently(?) mismatched for root-on-USB.
Reverting again to 2020.10 U-Boot got back the root-on-USB
. . .
Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [/boot/kernel/kernel]...
Using DTB provided by EFI at 0x47ef5000.
Kernel entry at 0xb2e00200...
Kernel args: (null)
---<<BOOT>>---
KDB: debugger backends: ddb
KDB: current backend: ddb
Copyright (c) 1992-2021 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 14.0-CURRENT mm-src-n245445-def0058cc690 GENERIC-NODBG arm
. . .
Well, I got a surprise in exploring: removing boot.scr
and ubldr.bin did not prevent booting. (Noticed by the
accident of ending up with one of them missing that I
only later noticed.) So I recorded a boot and:
. . .
U-Boot SPL 2020.10 (Apr 19 2021 - 18:04:31 +0000)
DRAM: 2048 MiB
Trying to boot from MMC1
U-Boot 2020.10 (Apr 19 2021 - 18:04:31 +0000) Allwinner Technology
CPU: Allwinner H3 (SUN8I 1680)
Model: Xunlong Orange Pi Plus 2E
DRAM: 2 GiB
. . .
Device 0: Vendor: OWC Rev: 0 Prod: Envoy Pro mini
Type: Hard Disk
Capacity: 228936.5 MB = 223.5 GB (468862128 x 512)
... is now current device
Scanning usb 0:4...
30675 bytes read in 3 ms (9.8 MiB/s)
Found EFI removable media binary efi/boot/bootarm.efi
. . .
Booting /efi\boot\bootarm.efi
Consoles: EFI console
|/-\|/-\|/-\|/-\|/-\|/-\|/-\ Reading loader env vars from /efi/freebsd/loader.env
Setting currdev to disk2p4:
|/-\|/FreeBSD/arm EFI loader, Revision 1.1
. . .
So I've likely been been booting via UEFI for
some time via 2020.10 (or even before?), just
without noticing at the time.
The other implication is likely that what disabled
root-on-USB for my context was not the boot.scr
removal material but some (possibly proper) subset
of other material changed (extracted from
ports' main 0d6e5081eb00 commit cgit display):
diff --git a/sysutils/u-boot-master/files/FreeBSD_Fragment b/sysutils/u-boot-master/files/FreeBSD_Fragment
index 630d295cc8f1..f3837a932e98 100644
--- a/sysutils/u-boot-master/files/FreeBSD_Fragment
+++ b/sysutils/u-boot-master/files/FreeBSD_Fragment
@@ -1,3 +1,2 @@
-CONFIG_API=y
CONFIG_ARMV7_NONSEC=n
-CONFIG_CMD_CACHE=y
+CONFIG_EFI_GRUB_ARM32_WORKAROUND=y
diff --git a/sysutils/u-boot-master/files/patch-api_api.c b/sysutils/u-boot-master/files/patch-api_api.c
deleted file mode 100644
index 5de1e5e653d9..000000000000
--- a/sysutils/u-boot-master/files/patch-api_api.c
+++ /dev/null
@@ -1,14 +0,0 @@
---- api/api.c.orig 2018-07-09 14:24:14 UTC
-+++ api/api.c
-@@ -289,6 +289,11 @@ static int API_dev_close(va_list ap)
- if (!err)
- di->state = DEV_STA_CLOSED;
-
-+ if (dcache_status())
-+ flush_dcache_all();
-+ if (icache_status())
-+ invalidate_icache_all();
-+
- return err;
- }
-
diff --git a/sysutils/u-boot-master/files/FreeBSD_Fragment b/sysutils/u-boot-master/files/FreeBSD_Fragment
index 630d295cc8f1..f3837a932e98 100644
--- a/sysutils/u-boot-master/files/FreeBSD_Fragment
+++ b/sysutils/u-boot-master/files/FreeBSD_Fragment
@@ -1,3 +1,2 @@
-CONFIG_API=y
CONFIG_ARMV7_NONSEC=n
-CONFIG_CMD_CACHE=y
+CONFIG_EFI_GRUB_ARM32_WORKAROUND=y
diff --git a/sysutils/u-boot-master/files/boot.cmd b/sysutils/u-boot-master/files/boot.cmd
deleted file mode 100644
index b3ce82975eb3..000000000000
--- a/sysutils/u-boot-master/files/boot.cmd
+++ /dev/null
@@ -1,2 +0,0 @@
-fatload ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} ubldr.bin && go ${kernel_addr_r}
-echo "Cannot load ubldr.bin"
diff --git a/sysutils/u-boot-master/files/patch-api_api.c b/sysutils/u-boot-master/files/patch-api_api.c
deleted file mode 100644
index 5de1e5e653d9..000000000000
--- a/sysutils/u-boot-master/files/patch-api_api.c
+++ /dev/null
@@ -1,14 +0,0 @@
---- api/api.c.orig 2018-07-09 14:24:14 UTC
-+++ api/api.c
-@@ -289,6 +289,11 @@ static int API_dev_close(va_list ap)
- if (!err)
- di->state = DEV_STA_CLOSED;
-
-+ if (dcache_status())
-+ flush_dcache_all();
-+ if (icache_status())
-+ invalidate_icache_all();
-+
- return err;
- }
-
diff --git a/sysutils/u-boot-master/files/patch-api_api__storage.c b/sysutils/u-boot-master/files/patch-api_api__storage.c
deleted file mode 100644
index 2e5846fb9a5c..000000000000
--- a/sysutils/u-boot-master/files/patch-api_api__storage.c
+++ /dev/null
@@ -1,25 +0,0 @@
---- api/api_storage.c.orig 2019-07-08 19:23:28 UTC
-+++ api/api_storage.c
-@@ -69,13 +69,6 @@ void dev_stor_init(void)
- specs[ENUM_SATA].type = DEV_TYP_STOR | DT_STOR_SATA;
- specs[ENUM_SATA].name = "sata";
- #endif
--#if defined(CONFIG_SCSI)
-- specs[ENUM_SCSI].max_dev = CONFIG_SYS_SCSI_MAX_DEVICE;
-- specs[ENUM_SCSI].enum_started = 0;
-- specs[ENUM_SCSI].enum_ended = 0;
-- specs[ENUM_SCSI].type = DEV_TYP_STOR | DT_STOR_SCSI;
-- specs[ENUM_SCSI].name = "scsi";
--#endif
- #if defined(CONFIG_CMD_USB) && defined(CONFIG_USB_STORAGE)
- specs[ENUM_USB].max_dev = USB_MAX_STOR_DEV;
- specs[ENUM_USB].enum_started = 0;
-@@ -281,7 +274,7 @@ int dev_enum_storage(struct device_info *di)
- {
- int i;
-
-- /* check: ide, usb, scsi, mmc */
-+ /* check: ide, usb, mmc */
- for (i = ENUM_IDE; i < ENUM_MAX; i ++) {
- if (dev_enum_stor(i, di))
- return 1;
diff --git a/sysutils/u-boot-master/files/patch-cmd_boot.c b/sysutils/u-boot-master/files/patch-cmd_boot.c
deleted file mode 100644
index b0c520aeb2ed..000000000000
--- a/sysutils/u-boot-master/files/patch-cmd_boot.c
+++ /dev/null
@@ -1,13 +0,0 @@
---- cmd/boot.c.orig 2018-07-09 14:24:14 UTC
-+++ cmd/boot.c
-@@ -18,6 +18,10 @@ __attribute__((weak))
- unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc,
- char * const argv[])
- {
-+ if (dcache_status())
-+ flush_dcache_all();
-+ if (icache_status())
-+ invalidate_icache_all();
- return entry (argc, argv);
- }
-
diff --git a/sysutils/u-boot-master/files/patch-cmd_elf.c b/sysutils/u-boot-master/files/patch-cmd_elf.c
deleted file mode 100644
index a6cac78a0989..000000000000
--- a/sysutils/u-boot-master/files/patch-cmd_elf.c
+++ /dev/null
@@ -1,14 +0,0 @@
---- cmd/elf.c.orig 2018-07-09 14:24:14 UTC
-+++ cmd/elf.c
-@@ -153,6 +153,11 @@ static unsigned long do_bootelf_exec(ulong (*entry)(in
- {
- unsigned long ret;
-
-+ if (dcache_status())
-+ flush_dcache_all();
-+ if (icache_status())
-+ invalidate_icache_all();
-+
- /*
- * pass address parameter as argv[0] (aka command name),
- * and all remaining args
===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)