On 2025-03-11, Vagrant Cascadian wrote:
> On 2025-03-03, Vagrant Cascadian wrote:
>> Looping Arnaud into the conversation, as I suspect the patches submitted
>> were touching this code quite a bit:
>>
>> 51d120d549e5b21a19ce659c7bef578c86ed9636 Allow to automatically sync DTBs 
>> when /boot is on a separate partition (Closes: #1025956)
>> 96a866bc886f118de9286a00587b2e1fcf263105 read-config: make /boot partition 
>> check a function
>>
>> Of course I am the one who uploaded them, but antoehr pair of eyes
>> obviously will not hurt! :)
>>
>> live well,
>>   vagrant
>>
>> On 2025-03-03, Johannes Schauer Marin Rodrigues wrote:
>>> Quoting Johannes Schauer Marin Rodrigues (2025-01-02 23:53:53)
>>>> The lines that should contain an fdt or fdtdir entry are missing. Lets 
>>>> look at
>>>> the sh -x output to figure out why they were not generated:
>>>> 
>>>>  1 P: Writing config for vmlinuz-6.12.6-mnt-reform-arm64...
>>>>  2 + _NUMBER=0
>>>>  3 + _ENTRY=1
>>>>  4 + [ -e /boot/initrd.img-6.12.6-mnt-reform-arm64 ]
>>>>  5 + _INITRD=initrd /initrd.img-6.12.6-mnt-reform-arm64
>>>>  6 + [ -e  ]
>>>>  7 + [ -e /boot6.12.6-mnt-reform-arm64/ ]
>>>>  8 + [ -d /boot6.12.6-mnt-reform-arm64/ ]
>>>>  9 + [ -f /boot/dtb-6.12.6-mnt-reform-arm64 ]
>>>> 10 + [ /usr/lib/linux-image- =  ]
>>>> 11 + _FDT=
>>>> 
>>>> Line 6 checks an empty value because U_BOOT_FDT is unset. Line 7 and 8 
>>>> cannot
>>>> work because there is a missing slash between ${_BOOT_PATH} and
>>>> ${U_BOOT_FDT_DIR}. Line 9 finds /boot/dtb-6.12.6-mnt-reform-arm64 but the 
>>>> check
>>>> in line 10 fails because {U_BOOT_FDT_DIR} is unset. Why is it unset? 
>>>> Because
>>>> even though read-config found a separate /boot partition in
>>>> has_separate_boot(), U_BOOT_SYNC_DTBS was set to false, so _FDT_DIR was 
>>>> never
>>>> set to "/dtb-" and even if it were set to that, the check in line 10 would
>>>> still fail because "/usr/lib/linux-image-" is not equal to "/dtb-". So to
>>>> summarize:
>>>> 
>>>>  1. why is a fdt or fdtdir line not added by default?
>>>>  2. why are there missing slashes in line 7 and 8?
>>>>  3. why do i have to enable U_BOOT_SYNC_DTBS? I already use flash-kernel 
>>>> for that
>>>>  4. why is there a check for "/usr/lib/linux-image-" if _FDT_DIR gets set 
>>>> to "/dtb-"?
>>>> 
>>>> One workaround is to set:
>>>> 
>>>> U_BOOT_FDT_DIR="/dtbs/"
>>>> 
>>>> which will then add fdtdir entries that look correct. The slashes are 
>>>> critical
>>>> because they are missing in the u-boot-update script.
>>>
>>> so here is a potential patch:
>>>
>>> --- /usr/share/u-boot-menu/read-config
>>> +++ /usr/share/u-boot-menu/read-config
>>> @@ -48,6 +48,8 @@
>>>     if [ "${U_BOOT_SYNC_DTBS}" = "true" ]
>>>     then
>>>             _FDT_DIR="/dtb-"
>>> +   else
>>> +           _FDT_DIR="/dtbs/"
>>>     fi
>>>  else
>>>     # / and /boot are on the same filesystem
>>>
>>> With that in place, extlinux.conf will now contain a line like this:
>>>
>>>     fdtdir /dtbs/6.12.15-mnt-reform-arm64/
>>>
>>> Note, how this is still a change in behaviour. With u-boot-menu from 
>>> Bookworm,
>>> not fdtdir would be set but one would have:
>>>
>>>     fdt /dtb-6.12.15-mnt-reform-arm64
>>>
>>> But maybe that change is intentional?
>>>
>>> I can make an attempt at different fix for this problem but I'd need to
>>> understand what is supposed to happen first. My four questions above still 
>>> are
>>> unanswered and especially with the missing slashes and the unset _FDT_DIR, 
>>> the
>>> code *can* not work as it is or am I missing something?
>
> I one problem is that u-boot-menu and flash-kernel and using the same
> path, e.g. /boot/dtb-X.Y.Z-ARCH, but for flash-kernel it expects it to
> be a symlink to the specific .dtb file to use, and the new u-boot-menu
> syncing functionality expects it to be a directory...
>
> I think if u-boot-menu used /boot/dtbs/X.Y.Z-ARCH which flash-kernel
> includes as a directory, it might just work. Still probably a few more
> issues to sort out... (e.g. it behaves differently if
> U_BOOT_SYNC_DTBS=true rather than just responding to what files are
> present). I noticed a few runs where it still broke the older kernels
> even if I managed to somewhat manually fix a newer one.
>
> I have not had a chance to dig into untangling this yet, but it warrants
> a serious severity, as it can break booting on previously valid
> combinations of packages (e.g. u-boot-menu and flash-kernel), which
> could be an ugly surprise for a bookworm upgrade...

This patch works for me with flash-kernel and u-boot-menu installed,
with U_BOOT_SYNC_DTBS=true|false, but slightly changes the behavior of
U_BOOT_SYNC_DTBS to put files in a different location.

diff --git a/read-config b/read-config
index d25edcc..8798d44 100644
--- a/read-config
+++ b/read-config
@@ -47,7 +47,7 @@ then
        _BOOT_PATH="/boot"
        if [ "${U_BOOT_SYNC_DTBS}" = "true" ]
        then
-               _FDT_DIR="/dtb-"
+               _FDT_DIR="/dtbs/"
        fi
 else
        # / and /boot are on the same filesystem
diff --git a/u-boot-update b/u-boot-update
index 6b20e7f..4a35420 100755
--- a/u-boot-update
+++ b/u-boot-update
@@ -142,7 +142,7 @@ do
        elif [ -d "${_BOOT_PATH}${U_BOOT_FDT_DIR}${_VERSION}/" ]
        then
                _FDT="fdtdir ${U_BOOT_FDT_DIR}${_VERSION}/"
-       elif [ -f "${_BOOT_PATH}/${U_BOOT_FDT:-dtb-${_VERSION}}" ] && [ 
/usr/lib/linux-image- = "${U_BOOT_FDT_DIR}" ]
+       elif [ -f "${_BOOT_PATH}/${U_BOOT_FDT:-dtb-${_VERSION}}" ] # && [ 
/usr/lib/linux-image- = "${U_BOOT_FDT_DIR}" ]
        then
                _FDT="fdt /${U_BOOT_FDT:-dtb-${_VERSION}}"
        else

I am not sure if the /usr/lib/linux-image- check is guarding anything
important for other use-cases...


I have not yet checked behavior when /boot and / are on the same
partition where it should just directly use fdtdir
/usr/lib/linux-image-VERSION/ ...


live well,
  vagrant

Attachment: signature.asc
Description: PGP signature

Reply via email to