[yocto] [meta-swupdate] failed update leads to kernel panic

Stefano Babic sbabic at denx.de
Mon Jun 17 00:19:32 PDT 2019


Hi Moritz,

On 17/06/19 08:23, Moritz Porst wrote:
> Hello Stefano,
> Thanks very much for your answer
> 
> On 14.06.19 14:14, Stefano Babic wrote:
>> Hi Moritz,
>>
>> On 14/06/19 12:19, Moritz Porst wrote:
>>> (Sorry, the answer should go to everyone)
>>> Thanks for your response, unfortunately it didn't work out for me.
>>> Because I am not 100% sure whether I did the correct thing I describe it:
>>> In my layer I went to recipes-kernel/kernel/files, here I added a file
>>> defconfig which I filled with the content of your config-initramfs
>>> my linux-yocto_%.bbappend, residing one level lower (kernel), got this
>>> file added so it reads (in its entirety):
>>>  
>>> FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
>>> SRC_URI += "file://0001-sdcard-power-management-off.patch"
>>> SRC_URI += "file://defconfig"
>>>  
>>> However I *also* have a file called defconfig in meta-swupdate which is
>>> basically the swupdate config that comes from menuconfig. I let this
>>> untouched but since this is not the kernel defconfig I guess you didn't
>>> mean this file ?
>>>  
>>> Additionally I can't mount the rootfs with the failed boot so I cannot
>>> access the dmesg log file. Any advice here ?
>>>  
>>> Best regards
>>> Moritz
>>>  
>>>  
>>>  
>>> *Gesendet:* Freitag, 14. Juni 2019 um 11:00 Uhr
>>> *Von:* "Zoran Stojsavljevic" <zoran.stojsavljevic at gmail.com>
>>> *An:* "Moritz Porst" <Moritz.Porst at gmx.de>
>>> *Cc:* "Yocto Project" <yocto at yoctoproject.org>
>>> *Betreff:* Re: [yocto] [meta-swupdate] failed update leads to kernel panic
>>>> However if I abort the update while running (i.e. simulating a power cut)
>>>> and then reboot I end up in a kernel panic: "Unable to mount rootfs on
>>>> unknown block". My understanding is that I should at least end up in a
>>>> busybox or that the update is retried, but this does not happen.
>>> You missed to attach failed dmesg while the system booted and aborted.
>>> Nevertheless, I expect problem with your defconfig, which does NOT
>>> have options set for initramfs. These ones:
>>> https://github.com/ZoranStojsavljevic/bbb-yocto/blob/master/custom/config-initramfs
>>>
>>> Please, could you add these one to your current .config, this might
>>> very well solve your problem.
>>>
>>> Best Regards,
>>> Zoran
>>> _______
>>>
>>> On Fri, Jun 14, 2019 at 10:15 AM Moritz Porst <Moritz.Porst at gmx.de> wrote:
>>>> Hello,
>>>>
>>>> I am currently having trouble to get swupdate working properly.
>>>> My problem:
>>>> I can execute swupdate -i normally and if the update fits I have no
>>> problem. However if I abort the update while running (i.e. simulating a
>>> power cut) and then reboot I end up in a kernel panic: "Unable to mount
>>> rootfs on unknown block". My understanding is that I should at least end
>>> up in a busybox or that the update is retried, but this does not happen.
>>>> I receive 1 error when updating which does not stop the update: "Could
>>> not find MTD".
>>>> My configuration:
>>>> I have a single rootfs and a separate boot partition. I build the
>>> initramfs using:
>> You have a *single* rootfs, you stop an upgrade (resulting of course in
>> a corrupted rootfs or worse), and you wonder that kernel cannot mount
>> it....your update concept is broken.
> Well conceptually I want to go through the bootloader, I just fail to
> understand how I tell swupdate to do this.
>> You *must* check the bootloader marker in U-Boot (default is the
>> "recovery_status" variable) and you *mus*t start again the updater (the
>> ramdisk) until the marker (it is a transaction flag) is set. It is
>> erased by SWUpdate only after a successful update. You are now starting
>> your board with a half-completed update.
> 
> So I configured swupdate in menuconfig to work with grub which I set in
> my machine as "EFI_PROVIDER". Doesn't this single rootfs update strategy
> work with grub ?

Yes, but you have to set / configure yourself how Grub start, that is a
suitable grub.cfg where variables in grubenv are evalutated (do not
forget load_env in grub.cfg).

The interface between SWUpdate and Grub is grubenv - SWUpdate just sets
variables, but it is duty of bootloader to evaluated them.

> (I prefer to stick to EFI because partitioning of
> images works out of the box with .wic images)
> When you say "you must start again the updater", that's where I'm lost.
> From the documentation I understand that I initiate an update using
> "swupdate -i abc.swu" but this just runs the update without setting any
> flag for the bootloader.

SWUpdate sets

> One more thing: swupdate complains that there is no grubenv file.

Then it does not work, you have to fix it...

> I
> defined a path in the config file and create this file using
> "grub-editenv /path/as/in/config create".

Grubenv is just a simple 1KB file, you can dump it.

> swupdate does not give an
> error after I have done this.

If the interface to bootloader (for grub, this means grubenv) is
specified and correct, SWUpdate will set the variable "recovery_status"
as transaction flag. You have to evaluate it in grub.cfg and start the
ramdisk again if the variable is set.

Best regards,
Stefano Babic

> 
>> Best regards,
>> Stefano Babic
> 
> Best regards
> Moritz
> 
>>
>>>> ---
>>>> IMAGE_INSTALL = "base-files \
>>>> base-passwd \
>>>> swupdate \
>>>> busybox \
>>>> libconfig \
>>>> util-linux-sfdisk \
>>>> mtd-utils \
>>>> mtd-utils-ubifs \
>>>> ${@bb.utils.contains('SWUPDATE_INIT', 'tiny',
>>> 'virtual/initscripts-swupdate', 'initscripts sysvinit', d)} \
>>>> "
>>>> ---
>>>> This is taken from swupdate-image. I include the same packages (via
>>> _append) in my base image, is this necessary ?
>>>> I bundle the initramfs with my image using INITRAMFS_IMAGE_BUNDLE = "1"
>>>>
>>>> Can you see a mistake I made ?
>>>>
>>>> Best regards
>>>> Moritz
>>>> --
>>>> _______________________________________________
>>>> yocto mailing list
>>>> yocto at yoctoproject.org
>>>> https://lists.yoctoproject.org/listinfo/yocto
> 


More information about the yocto mailing list