[Buildroot] Boot fails with initramfs and 'console='
Timo Ketola
Timo.Ketola at exertus.fi
Mon Sep 23 17:17:05 UTC 2019
Arnout,
Thanks for looking at this.
On 21.9.2019 13.58, Arnout Vandecappelle wrote:
>
>
> On 21/09/2019 08:36, Timo Ketola wrote:
>> Hi there,
>>
>> I'm confused.
>>
>> When U-Boot starts Linux with silent flag in effect, it adjusts bootargs
>> with 'console='.
>>
>> BR installs fs/cpio/init as /init into the initramfs cpio archive. It
>> tries to direct stdio into /dev/console. Why? Linux does exactly the
>> same by itself in init/main.c kernel_init_freeable(). Anyways, trying to
>> open /dev/console with 'console=' in command line fails. Linux reports
>> 'Warning: unable to open an initial console.' but continues. BusyBox's
>> /sbin/init has fallbacks and would also survive. But in /init script it
>> is fatal. The first 'exec 0</dev/console' fails, init dies and Linux panics.
>>
>> Is there something I have completely misunderstood? How this should be
>> correctly (tm) fixed?
>>
>> I think the redirections could be removed. Would that patch be accepted?
>> Can anyone see any bad consequences?
>
> Apparently, this was introduced because back in the day, the initramfs would
> start without a mounted devtmps and the opening of /dev/console by the kernel
> would fail. AFAIU this should have been fixed on the kernel side in 2.6.34.
I'm working with 4.9.128 kernel and this still seems to be the case -
that devtmpfs is not mounted when booting with initramfs. Booting with
rdinit=/bin/sh:
> / # mount -t proc proc /proc
> / # mount
> rootfs on / type rootfs (rw)
> proc on /proc type proc (rw,relatime)
> ...
>
> Please do check however that we do get fds 0, 1 and 2 open both in silent and
> non-silent mode, and that in non-silent mode they do point to console.
I think this is the case. If stdios are not open, BB init tries to open
'/dev/null' or '/' as a final fallback. But I'll test that.
I submitted a patch:
http://lists.busybox.net/pipermail/buildroot/2019-September/260246.html
I'm still a little bit uneasy with this as a whole because, I have a
feeling that, in the silent case, the system is left with a 'toxic'
/dev/console. Trying to open it from any shell script will kill that
script. Even a comment in Linux source says that "this should never
fail" when opening /dev/console. But in this case just that happens.
--
Timo
More information about the buildroot
mailing list