Discussion:
[gentoo-user] Serial console stops working as soon as openrc starts
(too old to reply)
Grant Edwards
2023-09-09 19:20:02 UTC
Permalink
I've set up a serial console by adding the following to my kernel
command line:

console=ttyS0,115200 console=tty1

It works fine for the first few seconds as the kernel starts up. All
of the expected messages are sent out ttyS0.

But, soon after init starts, the serial console stops working.

The end of the serial console log always looks like this

[ 3.502684] Freeing unused kernel image (initmem) memory: 1516K
[ 3.509155] Write protecting the kernel read-only data: 24576k
[ 3.515861] Freeing unused kernel image (text/rodata gap) memory: 2036K
[ 3.523160] Freeing unused kernel image (rodata/data gap) memory: 1156K
[ 3.568699] x86/mm: Checked W+X mappings: passed, no W+X pages found.
[ 3.575655] x86/mm: Checking user space page tables
[ 3.615655] x86/mm: Checked W+X mappings: passed, no W+X pages found.
[ 3.622604] Run /sbin/init as init process
[ 3.660655] kbd_mode (115) used greatest stack depth: 13096 bytes left
[ 3.667760] loadkeys (116) used greatest stack depth: 13048 bytes left

On the tty1 console, the next thing after the "loadkeys" line above is
the OpenRC banner, so apparently openrc is messing with my console
settings. It's been a few years since I setup a serial console, but
after adding the "console=" argument to the kernel args it used to
"just work".

How do I get openrc to leave the serial console alone?

--
Grant
Grant Edwards
2023-09-09 19:50:01 UTC
Permalink
Post by Grant Edwards
I've set up a serial console by adding the following to my kernel
console=ttyS0,115200 console=tty1
It works fine for the first few seconds as the kernel starts up. All
of the expected messages are sent out ttyS0.
But, soon after init starts, the serial console stops working.
That's because one of the first things openrc runs in
/etc/init.d/dmesg, and it changes the kernel logging level to the
value defined in /etc/conf.d/dmesg (which defaults to 1).

Changing the level in /etc/conf.d/dmesg from 1 to 8 allowed the serial
console to continue working as I wanted it to.

[I spent an entire day trying to get serial logging to work on Ubuntu
with systemd, and got exactly nowhere. After replacing Ubuntu/systemd
with Gentoo/openrc it didn't take long to track down the answer in the
openrc docs.]
Dale
2023-09-09 20:50:01 UTC
Permalink
Post by Grant Edwards
Post by Grant Edwards
I've set up a serial console by adding the following to my kernel
console=ttyS0,115200 console=tty1
It works fine for the first few seconds as the kernel starts up. All
of the expected messages are sent out ttyS0.
But, soon after init starts, the serial console stops working.
That's because one of the first things openrc runs in
/etc/init.d/dmesg, and it changes the kernel logging level to the
value defined in /etc/conf.d/dmesg (which defaults to 1).
Changing the level in /etc/conf.d/dmesg from 1 to 8 allowed the serial
console to continue working as I wanted it to.
[I spent an entire day trying to get serial logging to work on Ubuntu
with systemd, and got exactly nowhere. After replacing Ubuntu/systemd
with Gentoo/openrc it didn't take long to track down the answer in the
openrc docs.]
Does it say what else changing the log level does?  If so, can you link
to the docs you found?  I'm curious. 

Thanks.

Dale

:-)  :-) 
Grant Edwards
2023-09-09 21:10:02 UTC
Permalink
Post by Dale
Post by Grant Edwards
Changing the level in /etc/conf.d/dmesg from 1 to 8 allowed the serial
console to continue working as I wanted it to.
Does it say what else changing the log level does?
It's a single, global value in the kernel so it has the same affect on
all linux kernel consoles.
Post by Dale
If so, can you link to the docs you found? I'm curious.
https://github.com/OpenRC/openrc/blob/master/conf.d/dmesg

https://man7.org/linux/man-pages/man1/dmesg.1.html

https://www.kernel.org/doc/html/next/core-api/printk-basics.html

https://linuxconfig.org/introduction-to-the-linux-kernel-log-levels

https://www.oreilly.com/library/view/linux-kernel-in/0596100795/re06.html
Dale
2023-09-09 22:00:01 UTC
Permalink
Post by Grant Edwards
Post by Dale
Post by Grant Edwards
Changing the level in /etc/conf.d/dmesg from 1 to 8 allowed the serial
console to continue working as I wanted it to.
Does it say what else changing the log level does?
It's a single, global value in the kernel so it has the same affect on
all linux kernel consoles.
Post by Dale
If so, can you link to the docs you found? I'm curious.
https://github.com/OpenRC/openrc/blob/master/conf.d/dmesg
https://man7.org/linux/man-pages/man1/dmesg.1.html
https://www.kernel.org/doc/html/next/core-api/printk-basics.html
https://linuxconfig.org/introduction-to-the-linux-kernel-log-levels
https://www.oreilly.com/library/view/linux-kernel-in/0596100795/re06.html
The next to last one gave me what I was curious about most.  Others are
interesting to tho. 

Learn something every day.  Remembering it is another thing tho.  :/

Thanks.

Dale

:-)  :-) 

Loading...