Skip to content
View in the app

A better way to browse. Learn more.

Armbian Community Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Disable ttyS2 console on Radxa ROCK 4C+

Featured Replies

Hello

I want to disable console on /dev/ttyS2 on a Radxa ROCK 4C+ running

rock@rockpi-4cplus:/boot$ cat /etc/os-release | grep -v URL
PRETTY_NAME="Armbian 25.5.0-trunk.40 noble"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
UBUNTU_CODENAME=noble
LOGO="armbian-logo"
ARMBIAN_PRETTY_NAME="Armbian 25.5.0-trunk.40 noble"


There are posts and other information out there.
For instance:
https://docs.armbian.com/User-Guide_Fine-Tuning/#how-to-toggle-boot-output
which leads to 
http://redsymbol.net/linux-kernel-boot-parameters/
 

rock@rockpi-4cplus:/boot$ grep console armbianEnv.txt
console=both


The information found so far, implies there are options like: none, serial, both, and another
But what is the another option?
So that I can disable console on /dev/ttyS2  and use that for other purposes.
Without compromising the Docs reccomandation: To disable console entirely (not recommended) set console to none
 

Solved by IBV

  • Author

Thanks @SteeMan
Made me stumble upon something similar.

Found armbianmonitor

rock@rockpi-4cplus:~$ sudo armbianmonitor -u

Checked the log.

[    2.614818] ff180000.serial: ttyS0 at MMIO 0xff180000 (irq = 35, base_baud = 1500000) is a 16550A
[    2.616480] ff1a0000.serial: ttyS2 at MMIO 0xff1a0000 (irq = 36, base_baud = 1500000) is a 16550A


Changed armbianEnv.txt from:

console=both

To:

console=ttyS0

Then a reboot.  That didn't work.

So changing the boot.cmd from:

setenv console "both"

To:

setenv console "ttyS0"

Then 

mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr

and reboot.

ttyS2 console are still enabled.

Connections are verified by reading the connected pins after forcing communication

root@rockpi-4cplus:/home/rock# stty -F /dev/ttyS2 115200 cs8 -parenb -cstopb
root@rockpi-4cplus:/home/rock# while true; do echo -n "A" > /dev/ttyS2; sleep 0.25; done


Connected pins 8 & 10:
image.png.a39beaf27747dac33277379d545350cf.png image.png.5f8de15357c7d734c2bc0a7b4c9bbbb8.png


And log still says:

[ 2.615671] ff180000.serial: ttyS0 at MMIO 0xff180000 (irq = 35, base_baud = 1500000) is a 16550A
[ 2.616076] serial serial0: tty port ttyS0 registered
[ 2.617411] ff1a0000.serial: ttyS2 at MMIO 0xff1a0000 (irq = 36, base_baud = 1500000) is a 16550A
[ 2.617621] printk: legacy console [ttyS2] enabled


What would be the next step here?

  • Author

Continuing ...

root@rockpi-4cplus:~# cp /boot/dtb/rockchip/rk3399-rock-4c-plus.dtb rk3399-rock-4c-plus.dtb.backup
root@rockpi-4cplus:~# dtc -I dtb -O dts -o rk3399-rock-4c-plus.dts rk3399-rock-4c-plus.dtb.backup
rk3399-rock-4c-plus.dts: Warning (unit_address_vs_reg): /usb@fe800000: node has a unit name, but no reg or ranges property
rk3399-rock-4c-plus.dts: Warning (unit_address_vs_reg): /usb@fe900000: node has a unit name, but no reg or ranges property
rk3399-rock-4c-plus.dts: Warning (avoid_unnecessary_addr_size): /dsi@ff960000: unnecessary #address-cells/#size-cells without "ranges", "dma-ranges" or child "reg" property
rk3399-rock-4c-plus.dts: Warning (avoid_unnecessary_addr_size): /dsi@ff968000: unnecessary #address-cells/#size-cells without "ranges", "dma-ranges" or child "reg" property
rk3399-rock-4c-plus.dts: Warning (unique_unit_address): /pcie@f8000000: duplicate unit-address (also used in node /pcie-ep@f8000000)
root@rockpi-4cplus:~#
root@rockpi-4cplus:~# vi rk3399-rock-4c-plus.dts


rk3399-rock-4c-plus.dts is attached.
Here is the relevant sections I've found:

/ {
	model = "Radxa ROCK 4C+";

	aliases {
		serial2 = "/serial@ff1a0000";
	};

	serial@ff1a0000 {
		compatible = "rockchip,rk3399-uart\0snps,dw-apb-uart";
		reg = <0x00 0xff1a0000 0x00 0x100>;
		clocks = <0x08 0x53 0x08 0x162>;
		clock-names = "baudclk\0apb_pclk";
		interrupts = <0x00 0x64 0x04 0x00>;
		reg-shift = <0x02>;
		reg-io-width = <0x04>;
		pinctrl-names = "default";
		pinctrl-0 = <0x49>;
		status = "okay";
		phandle = <0xe7>;
	};

	__symbols__ {
		uart2 = "/serial@ff1a0000";
	};
};


What should I do to disable /dev/ttyS2 console?

rk3399-rock-4c-plus.dts

This would disable it entirely, which is probably not what you want...

 

It looks like the the the kernel is not picking up the console parameter:

Kernel command line: root=UUID=d0636019-ca11-404a-9874-04e6cbfedf37 rootwait rootfstype=ext4 splash plymouth.ignore-serial-consoles console=ttyS2,1500000 console=tty1 consoleblank=0 loglevel=1 ubootpart=8dc56fe2-01 usb-storage.quirks=0x2537:0x1066:u,0x2537:0x1068:u   cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
[    0.000000] Unknown kernel command line parameters "splash ubootpart=8dc56fe2-01 cgroup_enable=memory cgroup_memory=1", will be passed to user space.

Maybe post here the boot.cmd and armbianEnv.txt

  • Author

Well spotted, thanks 

 

armbianEnv.txt

verbosity=1
bootlogo=true
console=ttyS0
overlay_prefix=rockchip
rootdev=UUID=d0636019-ca11-404a-9874-04e6cbfedf37
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u


 

 

boot.cmd (complete file attached):

rock@rockpi-4cplus:~$ grep -i console /boot/boot.cmd
setenv console "ttyS0"
if test "${console}" = "display" || test "${console}" = "both"; then setenv consoleargs "console=tty1"; fi
if test "${console}" = "serial" || test "${console}" = "both"; then setenv consoleargs "console=ttyS2,1500000 ${consoleargs}"; fi
if test "${earlycon}" = "on"; then setenv consoleargs "earlycon ${consoleargs}"; fi
        setenv consoleargs "splash plymouth.ignore-serial-consoles ${consoleargs}"
        setenv consoleargs "splash=verbose ${consoleargs}"
setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs} consoleblank=0 loglevel=${verbosity} ubootpart=${partuuid} usb-storage.quirks=${usbstoragequirks} ${extraargs} ${extraboardargs}"

 

 

boot.cmd

  • Author

Thanks :)

Marked as solution.  To answer my question wider;
The console option, that are not specified in Armbian Documentation are: display

All four options listed below:

console=both
console=serial
console=display
console=none

To disable console entirely (not recommended) set console to none.

  • Author

Forgive me.
I apparently don't test thoroughly enough.
Now:

rock@rockpi-4cplus:~$ cat /boot/armbianEnv.txt
verbosity=1
bootlogo=true
console=display
overlay_prefix=rockchip
rootdev=UUID=d0636019-ca11-404a-9874-04e6cbfedf37
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u


rock@rockpi-4cplus:~$ sudo mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr
Image Name:
Created:      Sat Mar  8 18:21:32 2025
Image Type:   ARM Linux Script (uncompressed)
Data Size:    3843 Bytes = 3.75 KiB = 0.00 MiB
Load Address: 00000000
Entry Point:  00000000
Contents:
   Image 0: 3835 Bytes = 3.75 KiB = 0.00 MiB


rock@rockpi-4cplus:~$ sudo reboot

Broadcast message from root@rockpi-4cplus on pts/1 (Sat 2025-03-08 18:22:02 UTC):

The system will reboot now!

rock@rockpi-4cplus:~$
Remote side unexpectedly closed network connection


Even so, I can see my communication with Waveshare SIM7020E NB-IoT HAT are interrupted by console login request.
How do I fulfill the disable ttyS2 console?

 

rock@rockpi-4cplus:~$ sudo picocom /dev/ttyS2
picocom v3.1

Terminal ready

*** local echo: yes ***

*** baud: 115200

*** baud: 115200 ***
AT
AT
OK
rockpi-4cplus login:
  • Author

Thanks :)
 

rock@rockpi-4cplus:~$ picocom /dev/ttyS2 --baud 115200 --echo
picocom v3.1

Terminal ready
AT
AT
OK
ockpi-4cplus login:

ERROR

Terminating...
Thanks for using picocom

rock@rockpi-4cplus:~$ sudo systemctl status getty@ttyS2
○ getty@ttyS2.service - Getty on ttyS2
     Loaded: loaded (/usr/lib/systemd/system/getty@.service; disabled; preset: enabled)
     Active: inactive (dead)
       Docs: man:agetty(8)
             man:systemd-getty-generator(8)
             https://0pointer.de/blog/projects/serial-console.html


For reasons I cannot explain, I see getty@ttyS2 inactive at systemctl.
Still it interrupts the UART.

Also tried this:

rock@rockpi-4cplus:~$ sudo systemctl status getty@ttyS2
[sudo] password for rock:
○ getty@ttyS2.service - Getty on ttyS2
     Loaded: loaded (/usr/lib/systemd/system/getty@.service; disabled; preset: enabled)
     Active: inactive (dead)
       Docs: man:agetty(8)
             man:systemd-getty-generator(8)
             https://0pointer.de/blog/projects/serial-console.html

rock@rockpi-4cplus:~$ sudo systemctl stop getty@ttyS2

rock@rockpi-4cplus:~$ sudo systemctl disable getty@ttyS2

rock@rockpi-4cplus:~$ sudo systemctl status getty@ttyS2
○ getty@ttyS2.service - Getty on ttyS2
     Loaded: loaded (/usr/lib/systemd/system/getty@.service; disabled; preset: enabled)
     Active: inactive (dead)
       Docs: man:agetty(8)
             man:systemd-getty-generator(8)
             https://0pointer.de/blog/projects/serial-console.html
  • Solution

Hi,

 

check the status of serial-getty@ttyS2.service  and disable it.

systemctl status serial-getty@ttyS2.service
systemctl disable serial-getty@ttyS2.service

Also can you please post your kernel command line again to check the console= param:

cat /proc/cmdline

According to the doc (https://0pointer.de/blog/projects/serial-console.html) systemd will spawn a serial getty for the console specified in the kernel command line.

  • Author

Summary:

  1. /boot/armbianEnv.txt
    console=display
  2. systemctl disable getty@ttyS2
    Maybe not necessary ... ?
     
  3. systemctl disable serial-getty@ttyS2.service

Thanks everyone :)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.