diff --git a/meta-zephyr-core/recipes-kernel/zephyr-kernel/files/0001-console-enable-the-USB-ACM0-console-by-default.patch b/meta-zephyr-core/recipes-kernel/zephyr-kernel/files/0001-console-enable-the-USB-ACM0-console-by-default.patch
new file mode 100644
index 0000000000000000000000000000000000000000..21a3d93ea02b51f8fd9fe06fde6481dae185af9b
--- /dev/null
+++ b/meta-zephyr-core/recipes-kernel/zephyr-kernel/files/0001-console-enable-the-USB-ACM0-console-by-default.patch
@@ -0,0 +1,114 @@
+From e7a751f8003e85c93317bc0edfdc5e0cf589d17c Mon Sep 17 00:00:00 2001
+From: Bartosz Golaszewski <bartosz.golaszewski@huawei.com>
+Date: Thu, 27 Jan 2022 10:26:41 +0100
+Subject: [PATCH] console: enable the USB ACM0 console by default
+
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@huawei.com>
+---
+ boards/arm/arduino_nano_33_ble/CMakeLists.txt |  3 +++
+ .../arduino_nano_33_ble.dts                   |  9 +++++++
+ .../arduino_nano_33_ble_defconfig             |  6 +++++
+ .../src/init_usb_cdc_acm.c                    | 25 +++++++++++++++++++
+ subsys/shell/shell_uart.c                     |  2 +-
+ 5 files changed, 44 insertions(+), 1 deletion(-)
+ create mode 100644 boards/arm/arduino_nano_33_ble/src/init_usb_cdc_acm.c
+
+diff --git a/boards/arm/arduino_nano_33_ble/CMakeLists.txt b/boards/arm/arduino_nano_33_ble/CMakeLists.txt
+index 9e885f42ab..37495cb885 100644
+--- a/boards/arm/arduino_nano_33_ble/CMakeLists.txt
++++ b/boards/arm/arduino_nano_33_ble/CMakeLists.txt
+@@ -11,3 +11,6 @@ if(CONFIG_BOARD_ARDUINO_NANO_33_BLE_INIT_SENSORS)
+   zephyr_library_sources("${CMAKE_CURRENT_SOURCE_DIR}/src/init_sensors.c")
+   target_link_libraries(${ZEPHYR_CURRENT_LIBRARY} PRIVATE arduino_nano_33_ble_pins)
+ endif()
++
++zephyr_library()
++zephyr_library_sources("${CMAKE_CURRENT_SOURCE_DIR}/src/init_usb_cdc_acm.c")
+diff --git a/boards/arm/arduino_nano_33_ble/arduino_nano_33_ble.dts b/boards/arm/arduino_nano_33_ble/arduino_nano_33_ble.dts
+index 7e509086d2..aa769b87f0 100644
+--- a/boards/arm/arduino_nano_33_ble/arduino_nano_33_ble.dts
++++ b/boards/arm/arduino_nano_33_ble/arduino_nano_33_ble.dts
+@@ -34,6 +34,10 @@
+ 		led0 = &led0;
+ 		spi = &spi2;
+ 	};
++
++	chosen {
++		zephyr,console = &cdc_acm_uart0;
++	};
+ };
+ 
+ &flash0 {
+@@ -113,6 +117,11 @@
+ zephyr_udc0: &usbd {
+ 	compatible = "nordic,nrf-usbd";
+ 	status = "okay";
++
++	cdc_acm_uart0: cdc_acm_uart0 {
++		compatible = "zephyr,cdc-acm-uart";
++		label = "CDC_ACM_0";
++	};
+ };
+ // All PWM's should be enaled
+ &pwm0 {
+diff --git a/boards/arm/arduino_nano_33_ble/arduino_nano_33_ble_defconfig b/boards/arm/arduino_nano_33_ble/arduino_nano_33_ble_defconfig
+index ba8eeee931..652d79e6cd 100644
+--- a/boards/arm/arduino_nano_33_ble/arduino_nano_33_ble_defconfig
++++ b/boards/arm/arduino_nano_33_ble/arduino_nano_33_ble_defconfig
+@@ -19,3 +19,9 @@ CONFIG_BOOTLOADER_BOSSA_LEGACY=y
+ 
+ # additional board options
+ CONFIG_GPIO_AS_PINRESET=y
++
++CONFIG_USB_DEVICE_STACK=y
++CONFIG_USB_DEVICE_PRODUCT="Zephyr USB console sample"
++
++CONFIG_UART_LINE_CTRL=y
++CONFIG_USB_UART_CONSOLE=y
+diff --git a/boards/arm/arduino_nano_33_ble/src/init_usb_cdc_acm.c b/boards/arm/arduino_nano_33_ble/src/init_usb_cdc_acm.c
+new file mode 100644
+index 0000000000..820dcc2b7a
+--- /dev/null
++++ b/boards/arm/arduino_nano_33_ble/src/init_usb_cdc_acm.c
+@@ -0,0 +1,25 @@
++#include <zephyr.h>
++#include <usb/usb_device.h>
++#include <drivers/uart.h>
++
++BUILD_ASSERT(DT_NODE_HAS_COMPAT(DT_CHOSEN(zephyr_console), zephyr_cdc_acm_uart),
++	     "Console device is not ACM CDC UART device");
++
++void board_internal_usb_cdc_acm_init(const struct device *unused)
++{
++	ARG_UNUSED(unused);
++	const struct device *dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_console));
++	uint32_t dtr = 0;
++
++	if (usb_enable(NULL)) {
++		return;
++	}
++
++	/* Poll if the DTR flag was set */
++	while (!dtr) {
++		uart_line_ctrl_get(dev, UART_LINE_CTRL_DTR, &dtr);
++		/* Give CPU resources to low priority threads. */
++		k_sleep(K_MSEC(100));
++	}
++}
++SYS_INIT(board_internal_usb_cdc_acm_init, APPLICATION, 32);
+diff --git a/subsys/shell/shell_uart.c b/subsys/shell/shell_uart.c
+index 64b53e29fc..24d647ac58 100644
+--- a/subsys/shell/shell_uart.c
++++ b/subsys/shell/shell_uart.c
+@@ -332,7 +332,7 @@ static int enable_shell_uart(const struct device *arg)
+ 
+ 	return 0;
+ }
+-SYS_INIT(enable_shell_uart, POST_KERNEL,
++SYS_INIT(enable_shell_uart, APPLICATION,
+ 	 CONFIG_SHELL_BACKEND_SERIAL_INIT_PRIORITY);
+ 
+ const struct shell *shell_backend_uart_get_ptr(void)
+-- 
+2.30.1
+
diff --git a/meta-zephyr-core/recipes-kernel/zephyr-kernel/files/0001-console-enable-the-USB-ACM0-console-by-default.patch.license b/meta-zephyr-core/recipes-kernel/zephyr-kernel/files/0001-console-enable-the-USB-ACM0-console-by-default.patch.license
new file mode 100644
index 0000000000000000000000000000000000000000..98a0b3f4a5b8db268215a128c7d06e0a10897e73
--- /dev/null
+++ b/meta-zephyr-core/recipes-kernel/zephyr-kernel/files/0001-console-enable-the-USB-ACM0-console-by-default.patch.license
@@ -0,0 +1,3 @@
+# SPDX-FileCopyrightText: Huawei Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
diff --git a/meta-zephyr-core/recipes-kernel/zephyr-kernel/zephyr-kernel-src.inc b/meta-zephyr-core/recipes-kernel/zephyr-kernel/zephyr-kernel-src.inc
index 60291ed0fe17c16293f5196a30a744e8c41245de..e060a95b1e4f448381323cbe18d8f8c5e749f3fa 100644
--- a/meta-zephyr-core/recipes-kernel/zephyr-kernel/zephyr-kernel-src.inc
+++ b/meta-zephyr-core/recipes-kernel/zephyr-kernel/zephyr-kernel-src.inc
@@ -50,6 +50,7 @@ SRC_URI = "\
     git://github.com/zephyrproject-rtos/tinycrypt.git;protocol=https;nobranch=1;destsuffix=git/modules/crypto/tinycrypt;name=tinycrypt \
     git://github.com/zephyrproject-rtos/TraceRecorderSource.git;protocol=https;nobranch=1;destsuffix=git/modules/debug/TraceRecorder;name=TraceRecorder \
     git://github.com/zephyrproject-rtos/trusted-firmware-m.git;protocol=https;nobranch=1;destsuffix=git/modules/tee/tfm;name=tfm \
+    file://0001-console-enable-the-USB-ACM0-console-by-default.patch \
     "
 S = "${WORKDIR}/git"