How to armv7 boot both RPi2B v1.1 (bcm2709 --real armv7) and RPi3B (bcm2710 aarch64), but not RPI4B (bcm2711 aarch64)
- Reply: Mark Millard : "Re: How to armv7 boot both RPi2B v1.1 (bcm2709 --real armv7) and RPi3B (bcm2710 aarch64), but not RPI4B (bcm2711 aarch64)"
- In reply to: bob prohaska : "Re: FYI: FreeBSD-14.0-CURRENT-arm-armv7-GENERICSD-20220930-42dc8696df5-258315.img is broken for RPi2 v1.1 (so: armv7)g"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 12 Oct 2022 23:15:01 UTC
On 2022-Oct-11, at 16:33, bob prohaska <fbsd@www.zefox.net> wrote:
> On Tue, Oct 11, 2022 at 11:37:25AM -0700, Mark Millard wrote:
> [snip]
>> Actually the below is confusing. /boot/msdos
>> is supposed to be a mount point (empty directory)
>> at which the msdosfs can be mounted to make those
>> files show up there, despite being from a different
>> file system.
>
> Apologies for the ambiguity!
>
> /dev/da0s1 on /boot/msdos (msdosfs, local, noatime)
> is the normal dos filesystem on the root USB device.
> Normally it is mounted, IME.
>
> /dev/mmcsd0s1 on /mnt (msdosfs, local)
> was where I mounted the microSD DOS partition
> so the contents could be listed. This is a Pi2
> so a DOS microSD card is required to boot from USB.
> Normally /dev/mmcsd0s1 is not mounted when root
> is booted from USB.
>
> Mostly I wondered if files placed in an "unused" DOS
> subdirectory could be hidden from the boot software.
> It was a poor way to pose the question.
>
> At the moment the armv7 PATA disk is updating. If it boots
> the Pi2 successfully I'll try it on Pi3 and Pi4. If
> that works I'll set up a SATA armv7 disk and test the
> troublesome disk enclosures.
>
Here is how I got armv7 going for booting both a
RPi2B v1.1 (so: Cortex-A7) and a RPi3B (so:
Cortex-A53). This will not get a RPi4B going.
Because of the EFI/BOOT/bootarm.efi issues with
main [so: 14], I used a 13.1-STABLE snapshot as
the basis for this.
FYI: the msdosfs snapshot content in:
FreeBSD-13.1-STABLE-arm-armv7-GENERICSD-20221007-d497b97e902-252653.img
looks like:
# mount -onoatime -tmsdosfs /dev/da0s1 /mnt
# ls -Tld /mnt/*
drwxr-xr-x 1 root wheel 4096 Oct 7 05:22:48 2022 /mnt/EFI
-rwxr-xr-x 1 root wheel 103876 Oct 7 03:29:26 2022 /mnt/MLO
-rwxr-xr-x 1 root wheel 26745 Mar 3 13:29:56 2021 /mnt/bcm2709-rpi-2-b.dtb
-rwxr-xr-x 1 root wheel 52456 Mar 3 13:29:56 2021 /mnt/bootcode.bin
-rwxr-xr-x 1 root wheel 89 Oct 7 03:37:56 2022 /mnt/config.txt
drwxr-xr-x 1 root wheel 8192 Oct 7 05:22:48 2022 /mnt/dtb
-rwxr-xr-x 1 root wheel 7314 Mar 3 13:29:56 2021 /mnt/fixup.dat
-rwxr-xr-x 1 root wheel 3187 Mar 3 13:29:56 2021 /mnt/fixup_cd.dat
-rwxr-xr-x 1 root wheel 10298 Mar 3 13:29:56 2021 /mnt/fixup_db.dat
-rwxr-xr-x 1 root wheel 10298 Mar 3 13:29:56 2021 /mnt/fixup_x.dat
drwxr-xr-x 1 root wheel 4096 Oct 7 05:22:54 2022 /mnt/overlays
-rwxr-xr-x 1 root wheel 2952960 Mar 3 13:29:56 2021 /mnt/start.elf
-rwxr-xr-x 1 root wheel 793116 Mar 3 13:29:56 2021 /mnt/start_cd.elf
-rwxr-xr-x 1 root wheel 4794472 Mar 3 13:29:56 2021 /mnt/start_db.elf
-rwxr-xr-x 1 root wheel 3704808 Mar 3 13:29:56 2021 /mnt/start_x.elf
-rwxr-xr-x 1 root wheel 504892 Oct 7 03:37:20 2022 /mnt/u-boot.bin
-rwxr-xr-x 1 root wheel 1163404 Oct 7 03:29:26 2022 /mnt/u-boot.img
-r-xr-xr-x 1 root wheel 462032 Oct 7 05:20:00 2022 /mnt/ubldr.bin
It does not have the timeout file that allows more time
for USB devices in particular contexts. But timeout
is only directly useful on microsd cards, in order to
allow binding to a wider range of USB boot devices.
It also does not have any of:
bcm2710-rpi-2-b.dtb
bcm2710-rpi-3-b-plus.dtb
bcm2710-rpi-3-b.dtb
bcm2710-rpi-cm3.dtb
Such would be needed for armv7 style booting of any of:
RPi2 v1.2
RPi3B+
RPi3B
Compute Module 3
(Again, the armv7 u-boot.bin does not handle the bcm2711*.dtb
related USB hardware, last I checked a RPi4B example anyway.
So I ignore that context here.)
It also has only:
# ls -Tld /mnt/overlays/*
-rwxr-xr-x 1 root wheel 1221 Mar 3 13:29:56 2021 /mnt/overlays/mmc.dtbo
so it does not have:
disable-bt.dtbo
miniuart-bt.dtbo
for controlling which UART handles the serial console
on the likes of a RPi3B.
The u-boot.bin does not have an adjusted usb_pgood_delay .
(For some of the USB media that I have access to the
adjustment is important to booting. So my adjsutment will
be involved here.)
The following is being shown after booting an RPi2 v1.1
(so: a cortex-A7 form of armv7) based on what I adjusted
and used:
. . .
FreeBSD 13.1-STABLE #0 stable/13-n252653-d497b97e902: Fri Oct 7 05:01:41 UTC 2022
root@releng3.nyi.freebsd.org:/usr/obj/usr/src/arm.armv7/sys/GENERIC arm
FreeBSD clang version 14.0.5 (https://github.com/llvm/llvm-project.git llvmorg-14.0.5-0-gc12386ae247c)
VT: init without driver.
No PSCI/SMCCC call function found
CPU: ARM Cortex-A7 r0p5 (ECO: 0x00000000)
. . .
# uname -apKU
FreeBSD generic 13.1-STABLE FreeBSD 13.1-STABLE #0 stable/13-n252653-d497b97e902: Fri Oct 7 05:01:41 UTC 2022 root@releng3.nyi.freebsd.org:/usr/obj/usr/src/arm.armv7/sys/GENERIC arm armv7 1301507 1301507
# gpart show -p
=> 63 62333889 mmcsd0 MBR (30G)
63 2016 - free - (1.0M)
2079 102312 mmcsd0s1 fat32lba [active] (50M)
104391 62229561 - free - (30G)
=> 63 468862065 da0 MBR (224G)
63 1985 - free - (993K)
2048 102400 da0s1 fat32lba [active] (50M)
104448 468757680 da0s2 freebsd (224G)
=> 0 468757680 da0s2 BSD (224G)
0 128 - free - (64K)
128 468757552 da0s2a freebsd-ufs (224G)
# more /etc/fstab
# Custom /etc/fstab for FreeBSD embedded images
/dev/ufs/rootfs / ufs rw 1 1
/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0
tmpfs /tmp tmpfs rw,mode=1777 0 0
NOTE: /dev/msdosfs/MSDOSBOOT is in mmcsd0s1 in my context.
(So the USB msdosfs does not have the MSDOSBOOT label. Avoid
duplicate labels. Which you want mounts as /boot/msdos or
/boot/efi is up to you. Do not take the choices from this
example as important for such.)
# find /boot/msdos/ -print
/boot/msdos/
/boot/msdos/bootcode.bin
/boot/msdos/timeout
Note that I do include timeout in the microsd card's
msdosfs. I've USB media that will not boot otherwise
(necessary, but not sufficient by itself overall).
As for the USB media . . .
# mount -onoatime -tmsdosfs /dev/da0s1 /mnt
# ls -Tld /mnt/*
drwxr-xr-x 1 root wheel 4096 Oct 7 05:22:48 2022 /mnt/EFI
-rwxr-xr-x 1 root wheel 103876 Oct 7 03:29:26 2022 /mnt/MLO
-rwxr-xr-x 1 root wheel 26745 Mar 3 13:29:56 2021 /mnt/bcm2709-rpi-2-b.dtb
-rwxr-xr-x 1 root wheel 26894 Mar 3 13:29:56 2021 /mnt/bcm2710-rpi-2-b.dtb
-rwxr-xr-x 1 root wheel 29011 Mar 3 13:29:56 2021 /mnt/bcm2710-rpi-3-b-plus.dtb
-rwxr-xr-x 1 root wheel 28392 Mar 3 13:29:56 2021 /mnt/bcm2710-rpi-3-b.dtb
-rwxr-xr-x 1 root wheel 26890 Mar 3 13:29:56 2021 /mnt/bcm2710-rpi-cm3.dtb
-rwxr-xr-x 1 root wheel 52456 Mar 3 13:29:56 2021 /mnt/bootcode.bin
-rwxr-xr-x 1 root wheel 207 Oct 10 06:05:20 2022 /mnt/config.txt
-rwxr-xr-x 1 root wheel 89 Oct 7 03:37:56 2022 /mnt/config.txt.orig
drwxr-xr-x 1 root wheel 8192 Oct 7 05:22:48 2022 /mnt/dtb
-rwxr-xr-x 1 root wheel 7314 Mar 3 13:29:56 2021 /mnt/fixup.dat
-rwxr-xr-x 1 root wheel 3187 Mar 3 13:29:56 2021 /mnt/fixup_cd.dat
-rwxr-xr-x 1 root wheel 10298 Mar 3 13:29:56 2021 /mnt/fixup_db.dat
-rwxr-xr-x 1 root wheel 10298 Mar 3 13:29:56 2021 /mnt/fixup_x.dat
drwxr-xr-x 1 root wheel 4096 Oct 7 05:22:54 2022 /mnt/overlays
-rwxr-xr-x 1 root wheel 2952960 Mar 3 13:29:56 2021 /mnt/start.elf
-rwxr-xr-x 1 root wheel 793116 Mar 3 13:29:56 2021 /mnt/start_cd.elf
-rwxr-xr-x 1 root wheel 4794472 Mar 3 13:29:56 2021 /mnt/start_db.elf
-rwxr-xr-x 1 root wheel 3704808 Mar 3 13:29:56 2021 /mnt/start_x.elf
-rwxr-xr-x 1 root wheel 0 Apr 24 10:58:58 2022 /mnt/timeout
-rwxr-xr-x 1 root wheel 504932 Oct 10 05:17:40 2022 /mnt/u-boot.bin
-rwxr-xr-x 1 root wheel 504892 Oct 7 03:37:20 2022 /mnt/u-boot.bin.orig
-rwxr-xr-x 1 root wheel 1163404 Oct 7 03:29:26 2022 /mnt/u-boot.img
-r-xr-xr-x 1 root wheel 462032 Oct 7 05:20:00 2022 /mnt/ubldr.bin
So I had added:
bcm2710-rpi-2-b.dtb
bcm2710-rpi-3-b-plus.dtb
bcm2710-rpi-3-b.dtb
bcm2710-rpi-cm3.dtb
and (not important on USB media but added anyway):
timeout
I used an updated config.txt:
# diff -u /mnt/config.txt.orig /mnt/config.txt
--- /mnt/config.txt.orig 2022-10-07 03:37:56.000000000 +0000
+++ /mnt/config.txt 2022-10-10 06:05:20.000000000 +0000
@@ -1,5 +1,13 @@
-init_uart_clock=3000000
+#init_uart_clock=3000000
enable_uart=1
kernel=u-boot.bin
kernel7=u-boot.bin
dtoverlay=mmc
+#
+# Local additions:
+dtoverlay=disable-bt
+initial_turbo=60
+#uart_2ndstage=1
+#dtdebug=1
+gpu_mem_1024=32
+force_turbo=1
(Having config.txt on the microsd card's msdosfs will prevent
booting from USB media.)
I used a u-boot.bin that has my patch, including the
usb_pgood_delay adjustment.
I also added the 2 *-bt.dtbo files:
# ls -Tld /mnt/overlays/*
-rwxr-xr-x 1 root wheel 1073 Mar 3 13:29:56 2021 /mnt/overlays/disable-bt.dtbo
-rwxr-xr-x 1 root wheel 1819 Mar 3 13:29:56 2021 /mnt/overlays/miniuart-bt.dtbo
-rwxr-xr-x 1 root wheel 1221 Mar 3 13:29:56 2021 /mnt/overlays/mmc.dtbo
I will note that, in this configuration, u-boot.bin
output is the first output to show up on the serial
console. This can take a bit to get that far so it
looks initially like nothing is happening but it is.
Be willing to wait a bit.
Moving the microsd card and USB media to the RPi3B and
attempting to boot worked just fine (but required
some of my changes reported above).
. . .
FreeBSD 13.1-STABLE #0 stable/13-n252653-d497b97e902: Fri Oct 7 05:01:41 UTC 2022
root@releng3.nyi.freebsd.org:/usr/obj/usr/src/arm.armv7/sys/GENERIC arm
FreeBSD clang version 14.0.5 (https://github.com/llvm/llvm-project.git llvmorg-14.0.5-0-gc12386ae247c)
VT: init without driver.
No PSCI/SMCCC call function found
CPU: ARM Cortex-A53 r0p4 (ECO: 0x00000080)
. . .
# uname -apKU
FreeBSD generic 13.1-STABLE FreeBSD 13.1-STABLE #0 stable/13-n252653-d497b97e902: Fri Oct 7 05:01:41 UTC 2022 root@releng3.nyi.freebsd.org:/usr/obj/usr/src/arm.armv7/sys/GENERIC arm armv7 1301507 1301507
===
Mark Millard
marklmi at yahoo.com