[yocto] Can't boot to initramfs

Zoran Stojsavljevic zoran.stojsavljevic at gmail.com
Thu Jul 11 21:36:00 PDT 2019


Moritz,

Thank you very much for this reply. It makes it very clear... What is
the current State of Affairs for the topic.

Let us see if there will be the improvement to this topic. I'll
document this on one of my private GitHubs. And archive this email.

Zoran
_______

On Thu, Jul 11, 2019 at 12:39 PM Moritz Porst <moritz.porst at gmx.de> wrote:
>
> Hello Zoran, Jupiter and list
>
> The configuration you sent seems to be correct.
>
> As I already said initramfs seems overly complicated in yocto. the most
> important thing to note is that 2 kernel images are created, one is
> called bzImage (in my case) an the other bzImage-initramfs. However only
> the bzImage is written into the rootfs so you have to exchange them
> manually. (in /boot/bzImage). I did not find a way of including the
> bundled kernel right away.
>
> What you can do is to build core-image-minimal-initramfs and delete the
> symbolic link "bzImage", then recreate it and let it point to
> bzImage-initramfs. However this is rather a hack than a solution.
>
> An other mistake I made was to use IMAGE_INSTALL_append which is
> ignored. Use PACKAGE_INSTALL_append.
>
> Also I found that "break" does not work as a kernel parameter. Use
> "shell" oder "debug-shell" instead. If you want to try to boot into
> initramfs you can remove all parameters to the booting line so you
> either end up in a kernel panic (initramfs doesn't work) or in the
> rescue shell (initramfs works).
>
> In the end I actually managed to get a working shell, but I often ended
> up in initramfs telling me "dropping to shell..." but then freezing.
>
> I don't have access to my files right now but I can tell you more on my
> setup tomorrow. In case the solution is not included above.
>
> Best regards
> Moritz
>
> On 11/07/2019 09:24, Zoran Stojsavljevic wrote:
> > Hello Moritz,
> >
> > I need here some help from you. I'll try to reconstruct the parts of
> > the local.conf you are using, so I (and Jupiter) can understand what
> > should we do to also bundle kernel image with initramfs, to end up in
> > Dracut/rescue shell.
> >
> > Here is what I anticipate after reading several YOCTO @ threads:
> >
> > IMAGE_FSTYPES_append = " cpio.gz"
> > INITRAMFS_IMAGE = "core-image-minimal-initramfs"
> > INITRAMFS_IMAGE_BUNDLE = "1"
> > # debug: adds debug boot parameters like 'shell' and 'debug', see
> > # meta/recipes-core/initrdscripts/initramfs-framework/debug for details
> > # Could be removed in more minimal product image
> > PACKAGE_INSTALL += "initramfs-module-debug"
> >
> > Could you, please, review these lines and fix, if something is not correct?
> >
> > I what I understood, this does the magic, but you could not stop in
> > initramfs shell? Still, this problem is not solved?
> >
> >> I was following this site: https://wiki.debian.org/InitramfsDebug
> >> Rescue shell (also known as initramfs shell)
> >> Read man initramfs-tools to learn about the break=something kernel
> >> parameter (where valid arguments for something are: top, modules,
> >> premount, mount, mountroot, bottom, init), which starts a debug shell.
> >> You can try, for example, break=premount. You can edit /boot/grub/grub.cfg
> >> to add this to the end of the kernel line, or you can do it interactively
> >> from the grub boot menu: "e" to edit, and "b" to boot once you've edited
> >> the kernel line.
> > Now, as my understanding is, you solved this problem actually adding
> > to grub.cfg in command kernel line break=premount, and was able to
> > stop in rescue shell?! Am I correct here?
> >
> > Thank you,
> > Zoran
> > _______
> >
> >
> > On Mon, Jul 1, 2019 at 4:33 PM Moritz Porst <moritz.porst at gmx.de> wrote:
> >> Hello,
> >> I think I found the issue. ( see below )
> >>
> >> On 01.07.19 15:57, Zoran Stojsavljevic wrote:
> >>
> >> Hello Moritz,
> >>
> >> Too hot here, in Belgrade... Where I am resting for the Time being
> >> (actually, this message given to my invisible spying security "angels"
> >> on this list)...  :-) Projected +38C degrees today. Too hot for this
> >> too old Siberian untouchable bobcat!
> >>
> >> Luckily it's a rather cold day in germany, thanks that you still take the time to answer !
> >>
> >> I started from the core-image-minimal to have a small image and
> >> extended it with the features I need, which is e.g. a graphical system.
> >> The console=[...] part in the kernel command line is probably a
> >> remnant but my image boots into the GUI. Is this a problem ?
> >>
> >> Nope, it is not. If you need to do it correctly, you should use
> >> bitbake -k core-image-sato build command (my best educated guess).
> >> Then, I do not feel comfortable seeing in your kernel command line
> >> serial interface, do you agree?
> >>
> >> Yes that is true.
> >>
> >> YOCTO maintainers, any additional
> >> advices?
> >>
> >> My bootloader is currently grub, the EFI is AM.
> >>
> >> Nope. Eeeeeeeeek. Wrong. Currently, your boot-loader is UEFI AMI. Your
> >> OS (Linux probably, U name it) boot-loader is GRUB2. Let us keep it
> >> contained, sane and sober.
> >>
> >> Sorry but I can't find this info in the EFI.
> >>
> >> Could you, please try the following command being root: dmesg | grep
> >> MCU. or grep mcu, or grep CPUID or grep cpuid?? Please, post results
> >> to this list (to me).
> >>
> >> No luck unfortunately (used grep -i)
> >>
> >> Could you, also, send to YOCTO list/me attached file:
> >> /boot/microcode.cpio so I can somehow (?) inspect it? ;-)
> >>
> >> I send it to you directly, so I don't spam the list with a large attachment.
> >>
> >> 2GB, single channel.
> >>
> >> All Cool. E3825 by HW/silicon design could/does NOT support multiple
> >> memory channels. ONLY single... But even YOCTO primes (INTEL ones from
> >> this list) are not gonna tell this to you. Not 'cause they are nasty.
> >> They are NOT aware/they are ignorant (with the purpose)! ;-))
> >>
> >> No, the boot does not stop. Even if I do issue "break=premount" I
> >> end up in my graphical interface with the rootfs mounted. This is the
> >> last message in the log: EXT4-fs (sdb2): re-mounted. Opts: (null)
> >> The rootfs partition is always 2, so either /dev/sda2 or /dev/sdb2
> >> (when booting from stick)
> >>
> >> Yes, from https://pastebin.com/ya7iCtq7, so it is remounted rw, not
> >> read only. So, it seems that you have passed dracut phase. and mounted
> >> SD or flash rootfs. So, initramfs is NOT your true problem, is it???
> >>
> >> The thing is that the boot works but I want an initramfs that can be used for updating (in case the rootfs is broken). However I need to be able to intercept the boot process there because otherwise I can't deploy an update mechanism, that's what I was trying.
> >>
> >> Zoran
> >> _______
> >>
> >>
> >> No, the boot does not stop. Even if I do issue "break=premount" I end up
> >> in my graphical interface with the rootfs mounted. This is  the last message
> >> in the log: EXT4-fs (sdb2): re-mounted. Opts: (null) The rootfs partition is
> >> always 2, so either /dev/sda2 or /dev/sdb2 (when booting from stick)
> >>
> >>
> >> So for the issue...
> >> I expected yocto to put the bundled bzImage onto my rootfs. This was not the case. My image directory contains 2x bzImage, one bundled and one unbundled. Apparently yocto puts the >un<bundled image onto my /boot partition and uses it for boot. So of course I couldn't access initramfs in this case. Now I get to the initramfs statement "dropping to shell" if I intentionally boot with wrong rootfs.
> >> Still I don't get the interactive shell.
> >> On the github ostroproject site I found this:
> >>
> >> # debug: adds debug boot parameters like 'shell' and 'debug', see
> >> #        meta/recipes-core/initrdscripts/initramfs-framework/debug for details
> >> # Could be removed in more minimal product image.
> >> PACKAGE_INSTALL += "initramfs-module-debug"
> >>
> >> including the module-debug still does not enable me to get an interactive shell.
> >> I was following this site: https://wiki.debian.org/InitramfsDebug
> >> I am aware that yocto is no debian but I expected that kernel parameters (like 'break') would be independent of the distribution.
> >>
> >> Lastly I do not really need the interactive shell, it is enough if I can deploy a custom init script in the initramfs. Still I think that getting an initramfs shell should be as simple as stating the name of the initramfs image and setting the "INITRAMFS_DO_BUNDLE" variable.
> >>
> >> Best regards
> >> Moritz
> >>
> >>
> >> On Mon, Jul 1, 2019 at 11:20 AM Moritz Porst <moritz.porst at gmx.de> wrote:
> >>
> >> Hello Zoran,
> >> thanks for your answer
> >>
> >> On 28.06.19 14:26, Zoran Stojsavljevic wrote:
> >>
> >> INITRAMFS_IMAGE = "core-image-minimal-initramfs"
> >> INITRAMFS_IMAGE_BUNDLE = "1"
> >>
> >> ...
> >>
> >> You can find the /var/log/dmesg here: https://pastebin.com/ya7iCtq7I
> >>
> >> Some hints...
> >>
> >> [1] Kernel command line: BOOT_IMAGE=/bzImage root=PARTUUID=71d1d94a-83e8-4895-98eb-35309f58119f
> >> break=premount quiet rootwait rootwait rootfstype=ext4 console=ttyS0,115200 console=tty0
> >>
> >> input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input7
> >> fbcon: inteldrmfb (fb0) is primary device
> >> Console: switching to colour frame buffer device 128x48
> >> i915 0000:00:02.0: fb0: inteldrmfb frame buffer device
> >> snd_hda_intel 0000:00:1b.0: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
> >>
> >> Hmmmmm... You are using console and serial, but full i915 GFX kernel driver is still included in the build???
> >>
> >> I started from the core-image-minimal to have a small image and extended it with the features I need, which is e.g. a graphical system. The console=[...] part in the kernel command line is probably a remnant but my image boots into the GUI. Is this a problem ?
> >>
> >>
> >> [2] efi: EFI v2.31 by American Megatrends
> >>
> >> Using AMI BIOS as boot loader FW... OK?! Am I correct?
> >>
> >> My bootloader is currently grub, the EFI is AM.
> >>
> >>
> >> [3] smpboot: CPU0: Intel(R) Atom(TM) CPU  E3825  @ 1.33GHz (family: 0x6, model: 0x37, stepping: 0x9)
> >>
> >> This is CPUID ID 0x30679, which uses MCU... Which MicroCodeUnit? M0130679xxx (info from AMI BIOS)?
> >>
> >> Sorry but I can't find this info in the EFI
> >>
> >>
> >> [4] Using INTEL ATOM BYT E3825 dual core (sans Hyper-threading), implies that you are using
> >> 4GB (e820 messages) as single channel (one memory module DDR3 as 4GB)! Am I correct (important)?
> >>
> >> 2GB, single channel.
> >>
> >>
> >> [5] Dracut phase?!
> >>
> >> To my understanding the initramfs should be embedded in /boot/bzImage.
> >> However since I use an intel platform I also have a /boot/microcode.cpio
> >> which gets loaded via "initrd /microcode.cpio". Removing this line in
> >> grub does not enable me to get an initramfs prompt either (again, using
> >> break as option).
> >>
> >> You are obviously stopping in boot phase called dracut. Please, try to mount by hand
> >> /dev/sda(whatever)... You should use fdisk -l command, or do ls -al /dev | grep sda to
> >> dig out which partition you need to mount to /tmp dir to see rootfstype=ext4 (HDD/SSD)
> >>
> >> No, the boot does not stop. Even if I do issue "break=premount" I end up in my graphical interface with the rootfs mounted. This is the last message in the log:
> >> EXT4-fs (sdb2): re-mounted. Opts: (null)
> >> The rootfs partition is always 2, so either /dev/sda2 or /dev/sdb2 (when booting from stick)
> >>
> >> _______
> >>
> >> Just thinking loud... .. .
> >>
> >> Hope this helps (has very little to do with YOCTO build system, BTW) . ;-)
> >>
> >> Zoran
> >> _______
> >>
> >>
> >> On Fri, Jun 28, 2019 at 11:22 AM Moritz Porst <moritz.porst at gmx.de> wrote:
> >>
> >> Hello,
> >> I currently try to deploy a single rootfs update mechanism for my
> >> embedded device. I can't boot to initramfs using either "break" or
> >> "break=premount" (without quotes...). I tried this in systemd-boot and
> >> grub-efi (always efi boot) but the boot process just continues normally.
> >> If I insert at the same point e.g. "quiet" this argument is recognised.
> >> I boot the .wic image with a separate boot partition from a USB stick.
> >> in local.conf I have set:
> >> INITRAMFS_IMAGE = "core-image-minimal-initramfs"
> >> INITRAMFS_IMAGE_BUNDLE = "1"
> >>
> >> In order to reduce complexity I now use the standard
> >> core-image-minimal-initramfs without .bbappend. I can confirm (from
> >> seeing the task) that bitbake bundled the kernel with the initramfs.
> >>
> >> You can find the /var/log/dmesg here: https://pastebin.com/ya7iCtq7
> >>
> >> To my understanding the initramfs should be embedded in /boot/bzImage.
> >> However since I use an intel platform I also have a /boot/microcode.cpio
> >> which gets loaded via "initrd /microcode.cpio". Removing this line in
> >> grub does not enable me to get an initramfs prompt either (again, using
> >> break as option).
> >>
> >> Did I forget some configuration or do I have to put the break statement
> >> at a very specific position within the "linux ..." boot command ? Do you
> >> know which bitbake variables to check ? (both set in local.conf do not
> >> get overwritten, already checked this). I got the thud branch checked
> >> out in all my meta-layers except for meta-qt which is currently on
> >> master branch.
> >>
> >> Help is much appreciated !
> >>
> >> Best regards
> >> Moritz
> >>
> >> --
> >> _______________________________________________
> >> yocto mailing list
> >> yocto at yoctoproject.org
> >> https://lists.yoctoproject.org/listinfo/yocto


More information about the yocto mailing list