Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Jul 2022 13:03:42 -0700
From:      Mark Millard <marklmi@yahoo.com>
To:        Warner Losh <imp@bsdimp.com>
Cc:        "Rodney W. Grimes" <freebsd-rwg@gndrsh.dnsmgr.net>, "Dr. Rolf Jansen" <freebsd-rj@cyclaero.com>, freebsd-arm <freebsd-arm@freebsd.org>
Subject:   Re: Partition layout of ARM SD card images
Message-ID:  <491AC0F5-2A0F-402D-A503-6A9E34F20E1D@yahoo.com>
In-Reply-To: <2B2004D4-268C-446B-86B8-15AD12C152C9@yahoo.com>
References:  <97AEE0AA-7EB1-44B6-9175-841425077974@yahoo.com> <202207111431.26BEVXCf037801@gndrsh.dnsmgr.net> <CANCZdfp-UUSuLwY=mVZX6HgRTnk4V1v5d8NP6tsguMpaZ4U3Hw@mail.gmail.com> <2B2004D4-268C-446B-86B8-15AD12C152C9@yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2022-Jul-11, at 09:50, Mark Millard <marklmi@yahoo.com> wrote:

> On 2022-Jul-11, at 07:38, Warner Losh <imp@bsdimp.com> wrote:
>=20
>> On Mon, Jul 11, 2022 at 8:31 AM Rodney W. Grimes =
<freebsd-rwg@gndrsh.dnsmgr.net> wrote:
>>>>=20
>>>> On 2022-Jul-10, at 14:34, Dr. Rolf Jansen <freebsd-rj@cyclaero.com> =
wrote:
>>>>=20
>>>>>> Am 10.07.2022 um 17:48 schrieb Mark Millard <marklmi@yahoo.com>:
>>>>>>=20
>>>>>> On 2022-Jul-10, at 12:26, Dr. Rolf Jansen =
<freebsd-rj@cyclaero.com> wrote:
>>>>>>=20
>>>>>>> For example let's have a llok on the partition layout of, =
FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img (the others are similar):
>>>>>>>=20
>>>>>>> # mdconfig -a -u 0 -t vnode -f =
diskimg/FreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img
>>>>>>> # gpart show md0 md0s2
>>>>>>>=20
>>>>>>> =3D>     63  6291393  md0  MBR  (3.0G)
>>>>>>>       63     2016       - free -  (1.0M)
>>>>>>>     2079   102312    1  fat32lba  [active]  (50M)
>>>>>>>   104391  6187041    2  freebsd  (3.0G)
>>>>>>>  6291432       24       - free -  (12K)
>>>>>>>=20
>>>>>>> =3D>      0  6187041  md0s2  BSD  (3.0G)
>>>>>>>        0       57         - free -  (29K)
>>>>>>>       57  6186880      1  freebsd-ufs  (2.9G)
>>>>>>>  6186937      104         - free -  (52K)
>>>>>>>=20
>>>>>>> The start of the fat32 boot slice s1 (containing the u-boot) =
stuff is neither aligned to 1M nor to 4k, it starts on an odd base. The =
start of the BSD payload slice s2 and its size are odd as well. The =
padding of 57 blocks within s2 lets the UFS partition start on a =
globally even base, namely 104391+57 =3D 104448, which as a matter of =
fact is 4k aligned (104448*512/4096 =3D 13056) and 1M aligned as well =
(104448*512/1024/1024 =3D 51), however all this keeps looking strange.
>>>>>>>=20
>>>>>>> Are there reasons for this partition layout besides making it =
look more interesting? If yes, some insights would be good.
>>>>>>=20
>>>>>> The layout details are more specific to the aarch64 RPi* context
>>>>>> than to general aarch64 SD card images. For example, the Rock64
>>>>>> image is different:
>>>>>>=20
>>>>>> # mdconfig -a -u 0 -t vnode -f  =
FreeBSD-14.0-CURRENT-arm64-aarch64-ROCK64-20220708-a0b956f5ac5-256605.img
>>>>>> # gpart show md0
>>>>>> =3D>     40  6291376  md0  GPT  (3.0G)
>>>>>>     40    32728       - free -  (16M)
>>>>>>  32768   102400    1  efi  (50M)
>>>>>> 135168  6156160    2  freebsd-ufs  (2.9G)
>>>>>> 6291328       88       - free -  (44K)
>>>>>=20
>>>>> This is a GPT table, while the others are still MBR. Images which =
come with u-boot must have a different layout.
>>>>=20
>>>> I know it is a GPT table. That is part of the point about
>>>> the variety of contexts that there are across the Small
>>>> Board Computers.
>>>>=20
>>>> No SBC that has a U-Boot/whatever needing more space
>>>> than is provided below is going to use the same
>>>> 2079 figure:
>>>>=20
>>>> =3D>     63  ???  md0  ???  (?)
>>>>       63     2016       - free -  (1.0M)
>>>=20
>>> I read this thread.. and it keeps nagging me in
>>> the back of the head, I know this 2016 number.
>>> It is common when the sectors per track of a
>>> drive is reported as "32", its an attempt to
>>> 1M align such a drive, is somehow the image
>>> creation code picking up 32 to do the align
>>> calculation wrongly on a 63 sector/track
>>> image?
>>>=20
>>>>     2079   ??????    1  fat32lba  [active]  (?)
>>>=20
>>> The OP is correct, this is a horrid state of alignment
>>> and the cause should be tracked down and fixed!  I
>>> can see no valid reason to have an approx
>>> 1MB free hole that causes this missalignment,
>>> that free hole should be (2048-63)=3D1985
>>=20
>> Yes, we should be aligning at a 1M or 2M boundary on the
>> root device, not within the partition. The offsets are supposed
>> to do that, and if there's a problem we should fix it.
>>=20
>>> AHhhhh thought hits me... did the code get changed
>>> to make the images larger, and somehow the image
>>> creation code went from a 32 sector/track fake C/H/S
>>> to a 63 sector fake C/H/S, and the code has all
>>> along been assuming 32 sector/track drives?
>>>=20
>> 63 sector for 'fake' C/H/S has been a thing since at least
>> FreeBSD 6 and maybe a little longer. There's no cutover
>> based on image size of the device. The older ATA code,
>> pre-cam but post SOS rewrite, would try very hard to return
>> the values from the underlying device that it reported. And that
>> would lead to mismatches because it was different than the lies
>> that md told by default. But that only mattered for really old
>> BIOSes that couldn't handle LBA/packet mode in booting (which
>> is the primary reason the old fdisk program could set the ending CHS
>> of partitions since the FreeBSD code used that to guess the CHS
>> of the drive itself in the absence of other information).
>>=20
>> I don't think the kernel has changed in this area in a very long =
time.
>> At worse, we're seeing a mkimage bug.
>>=20
>> Warner
>>=20
>>>=20
>>> MBR vs. GPT is not the fundamental issue for that.
>>>=20
>>> =3D=3D=3D
>>> Mark Millard
>>> marklmi at yahoo.com
>>>=20
>>>=20
>>>=20
>>>=20
>>>=20
>>> --=20
>>> Rod Grimes                                                 =
rgrimes@freebsd.org
>>>=20
>>=20
>=20
> For reference:
>=20
> # grep -r MD_ARGS /usr/main-src/release/ | more
> /usr/main-src/release/arm/GENERICSD.conf:MD_ARGS=3D"-x 63 -y 255"
> /usr/main-src/release/arm/RPI-B.conf:MD_ARGS=3D"-x 63 -y 255"
> /usr/main-src/release/arm64/PINE64-LTS.conf:MD_ARGS=3D"-x 63 -y 255"
> /usr/main-src/release/arm64/PINE64.conf:MD_ARGS=3D"-x 63 -y 255"
> /usr/main-src/release/arm64/PINEBOOK.conf:MD_ARGS=3D"-x 63 -y 255"
> /usr/main-src/release/arm64/ROCK64.conf:MD_ARGS=3D"-x 63 -y 255"
> /usr/main-src/release/arm64/ROCKPRO64.conf:MD_ARGS=3D"-x 63 -y 255"
> /usr/main-src/release/arm64/RPI.conf:MD_ARGS=3D"-x 63 -y 255"
> /usr/main-src/release/riscv/GENERICSD.conf:MD_ARGS=3D"-x 63 -y 255"
> /usr/main-src/release/release.sh:               mdconfig -f =
${IMGBASE##${CHROOTDIR}} ${MD_ARGS})
>=20
> where:
>=20
>     -x sectors/track
>             See the description of the -y option below.
>=20
>     -y heads/cylinder
>             For malloc or vnode backed devices, the -x and -y options =
can be
>             used to specify a synthetic geometry.  This is useful for
>             constructing bootable images for later download to other =
devices.

I'm failing to reproduce the problem when I
try my own commands on:

# uname -apKU # manual line split
FreeBSD 13S-ufs 13.1-STABLE FreeBSD 13.1-STABLE #40
stable/13-n251684-815db559eccc-dirty: Sat Jul  9 14:02:23 PDT 2022
=
root@CA72_16Gp_ZFS:/usr/obj/BUILDs/13S-CA72-nodbg-clang/usr/13S-src/arm64.=
aarch64/sys/GENERIC-NODBG-CA72
arm64 aarch64 1301505 1301505

I tried what it looks to me the /usr/src/release/
code would do initially for arm64/RPI.conf (but with
my file naming and an explicit -u0 style of use):

# truncate -s3072m mmjnk.test
# mdconfig -u0 -fmmjnk.test -x63 -y255
# gpart create -sMBR md0
md0 created
# gpart show md0
=3D>     63  6291393  md0  MBR  (3.0G)
       63  6291393       - free -  (3.0G)
# gpart add -t'!12' -a512k -s50m -b1m md0
md0s1 added
# gpart show md0
=3D>     63  6291393  md0  MBR  (3.0G)
       63     1985       - free -  (993K)
     2048   102400    1  fat32lba  (50M)
   104448  6187008       - free -  (3.0G)

I tried the same sequence in a chroot into a 13.0-RELEASE-p11
tree on an aarch64 main [so: 14] machine. I got the same result.

But such is not what the 13.1-RELEASE build produced, for
example:

# mdconfig -u0 -fFreeBSD-13.1-RELEASE-arm64-aarch64-RPI.img -x63 -y255
# gpart show md0
=3D>     63  6291393  md0  MBR  (3.0G)
       63     2016       - free -  (1.0M)
     2079   102312    1  fat32lba  [active]  (50M)
   104391  6187041    2  freebsd  (3.0G)
  6291432       24       - free -  (12K)

(There are no 13.1-STABLE snapshots available to download
and look at.)

Looking at the recent 14.0-CURRENT snapshot:

# mdconfig -u0 =
-fFreeBSD-14.0-CURRENT-arm64-aarch64-RPI-20220708-a0b956f5ac5-256605.img =
-x63 -y255
# gpart show md0
=3D>     63  6291393  md0  MBR  (3.0G)
       63     2016       - free -  (1.0M)
     2079   102312    1  fat32lba  [active]  (50M)
   104391  6187041    2  freebsd  (3.0G)
  6291432       24       - free -  (12K)

So, also not matching.

Is there something odd about the environment for official
snapshot/release builds that leads to getting a different
result? Possible lack of use of some of the modern
/usr/src/release/ material to build the images? Some issue
associated with amd64 -> aarch64 (or armv7 / armv6 / . . .)
cross builds?



I've always thought that it was too bad that the build logs
for release and snapshot builds were not publicly available.
Multiple times I've wished I could see what a build failure
or other oddity looked like in the snapshot build logs in
order to see if I could track down part of what was leading
to the failure(s)/oddities. (I may presume that there is more
log output than is actually set up?)

=3D=3D=3D
Mark Millard
marklmi at yahoo.com




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?491AC0F5-2A0F-402D-A503-6A9E34F20E1D>