[yocto] Can't boot to initramfs

JH jupiter.hce at gmail.com
Fri Jul 12 01:05:46 PDT 2019


> BOOT_IMAGE=/bzImage root=PARTUUID=71d1d94a-83e8-4895-98eb-35309f58119f
break=premount quiet rootwait rootwait rootfstype=ext4
console=ttyS0,115200 console=tty0

Which file did you add kernel boot command for bootargs, bootcmd, etc?

I use meta-freescale, but I could not find BOOT_IMAGE is defined.

Thank you

On 7/12/19, JH <jupiter.hce at gmail.com> wrote:
> Hi Moritz,
>
> I could not find zImage-initramfs:
>
> $ grep zImage tempfile
>
> ARCH_DEFAULT_KERNELIMAGETYPE="bzImage"
> KERNEL_IMAGETYPE="bzImage"
> KERNEL_IMAGETYPES="bzImage"
> QB_DEFAULT_KERNEL="bzImage"
>
> $ grep zImage-initramfs tempfile
>
> $ grep INITRAMFS_IMAGE_BUNDLE tempfile
>
> # $INITRAMFS_IMAGE_BUNDLE
> INITRAMFS_IMAGE_BUNDLE="1"
>
> $ grep INITRAMFS_FSTYPES tempfile
> INITRAMFS_FSTYPES="cpio.gz"
>
> I added PACKAGE_INSTALL += "initramfs-module-debug" and I added
> "core-image-minimal-initramfs.bbappend" coppied from yours:
>
> $ cat core-image-minimal-initramfs.bbappend
>
> PACKAGE_INSTALL += "\
>                         busybox \
>                         base-files \
>                         base-passwd \
>                         bash \
>                         util-linux-lsblk \
>                         vim \
>                         "
>
> But I still have troubles to add INITRAMFS_IMAGE =
> "core-image-minimal-initramfs" or to run core-image-minimal-initramfs,
> both had errors:
>
> $ MACHINE="solar" DISTRO="solar" bitbake core-image-minimal-initramfs
>
> ERROR: Nothing PROVIDES 'core-image-minimal-initramfs'
> core-image-minimal-initramfs was skipped: incompatible with host
> arm-oe-linux-gnueabi (not in COMPATIBLE_HOST)
>
> $ MACHINE="solar" DISTRO="solar" bitbake solar-image
>
> ERROR: Nothing PROVIDES 'core-image-minimal-initramfs'
> core-image-minimal-initramfs was skipped: incompatible with host
> arm-oe-linux-gnueabi (not in COMPATIBLE_HOST)
> ERROR: Required build target 'solar-image' has no buildable providers.
> Missing or unbuildable dependency chain was: ['solar-image',
> 'virtual/kernel', 'core-image-minimal-initramfs']
>
> Sorry, still learning Yocto, what I could be missing?
>
>> BOOT_IMAGE=/bzImage root=PARTUUID=71d1d94a-83e8-4895-98eb-35309f58119f
> break=premount quiet rootwait rootwait rootfstype=ext4
> console=ttyS0,115200 console=tty0
>
> Which did you add kernel boot command for bootargs, bootcmd, etc as
> above? I could not find BOOT_IMAGE (I use meta-freescale)
>
> Thank you very much.
>
> - jupiter
>
> On 7/12/19, Moritz Porst <moritz.porst at gmx.de> wrote:
>> Forgot to CC Jupiter and the most important thing:
>>
>> PACKAGE_INSTALL += "initramfs-module-debug"   (To my understanding this
>> enables the rescue shell)
>>
>> On 12.07.19 08:22, Moritz Porst wrote:
>>> Hey,
>>>
>>> The only thing I can add to what I already said is my
>>> "core-image-minimal-initramfs.bbappend":
>>> PACKAGE_INSTALL += "\
>>>                         busybox \
>>>                         base-files \
>>>                         base-passwd \
>>>                         bash \
>>>                         util-linux-lsblk \
>>>                         vim \
>>>                         "
>>> Jupiter, are you able to produce your zImage-initramfs now ? If not
>>> further do the following:
>>>
>>> bitbake <your-image> -e > tempfile
>>> [wait until done, then search]
>>> grep <appropriate search word> tempfile
>>>
>>> where <appropriate search word> may be e.g.: zImage, zImage-initramfs,
>>> INITRAMFS_IMAGE, INITRAMFS_IMAGE_BUNDLE
>>> Especially check that all variables you set are not overwritten
>>> somewhere else
>>>
>>> Best regards
>>> Moritz
>>>
>>> On 12.07.19 06:36, Zoran Stojsavljevic wrote:
>>>> 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