logging: log_cmds: init uninitialized backend on `log_go()` For backends that do not autostart themselves, initialize & enable them on `log backend <log_backend_*> go`, so that they function properly. Signed-off-by: Yong Cong Sin <ycsin@meta.com> Signed-off-by: Yong Cong Sin <yongcong.sin@gmail.com> (cherry picked from commit f840a35be3438abdc18619c1f0609e7d7f98b20c)
diff --git a/include/zephyr/logging/log_backend.h b/include/zephyr/logging/log_backend.h index e772ad2..c68d210 100644 --- a/include/zephyr/logging/log_backend.h +++ b/include/zephyr/logging/log_backend.h
@@ -83,6 +83,7 @@ void *ctx; uint8_t id; bool active; + bool initialized; /* Initialization level. */ uint8_t level; @@ -140,6 +141,7 @@ if (backend->api->init) { backend->api->init(backend); } + backend->cb->initialized = true; } /**
diff --git a/subsys/logging/log_cmds.c b/subsys/logging/log_cmds.c index 79e4457..fc44f4b 100644 --- a/subsys/logging/log_cmds.c +++ b/subsys/logging/log_cmds.c
@@ -342,7 +342,19 @@ char **argv) { if (backend || !IS_ENABLED(CONFIG_LOG_FRONTEND)) { - log_backend_activate(backend, backend->cb->ctx); + if (!backend->cb->initialized) { + log_backend_init(backend); + while (log_backend_is_ready(backend) != 0) { + if (IS_ENABLED(CONFIG_MULTITHREADING)) { + k_msleep(10); + } + } + if (log_backend_is_ready(backend) == 0) { + log_backend_enable(backend, backend->cb->ctx, CONFIG_LOG_MAX_LEVEL); + } + } else { + log_backend_activate(backend, backend->cb->ctx); + } return 0; }