[RFC v7 13/21] um: nommu: basic console support
Hajime Tazaki
thehajime at gmail.com
Tue Oct 6 05:44:22 EDT 2020
This commit also disables stdio-console of UM if !CONFIG_MMU to avoid
conflicts between multiple consoles.
Signed-off-by: Hajime Tazaki <thehajime at gmail.com>
---
arch/um/drivers/Makefile | 8 ++++-
arch/um/nommu/include/uapi/asm/host_ops.h | 3 ++
arch/um/nommu/um/console.c | 42 +++++++++++++++++++++++
3 files changed, 52 insertions(+), 1 deletion(-)
create mode 100644 arch/um/nommu/um/console.c
diff --git a/arch/um/drivers/Makefile b/arch/um/drivers/Makefile
index ae96c83e312d..694da4aa550d 100644
--- a/arch/um/drivers/Makefile
+++ b/arch/um/drivers/Makefile
@@ -37,7 +37,13 @@ $(obj)/vde.o: $(obj)/vde_kern.o $(obj)/vde_user.o
# When the above is fixed, don't forget to add this too!
#targets += $(obj)/pcap.o
-obj-y := stdio_console.o fd.o chan_kern.o chan_user.o line.o
+ifdef CONFIG_MMU
+obj-y := stdio_console.o
+else
+obj-y :=
+endif
+obj-y += fd.o chan_kern.o chan_user.o line.o
+
obj-$(CONFIG_SSL) += ssl.o
obj-$(CONFIG_STDERR_CONSOLE) += stderr_console.o
diff --git a/arch/um/nommu/include/uapi/asm/host_ops.h b/arch/um/nommu/include/uapi/asm/host_ops.h
index 6ee9489fc47e..133877c857a1 100644
--- a/arch/um/nommu/include/uapi/asm/host_ops.h
+++ b/arch/um/nommu/include/uapi/asm/host_ops.h
@@ -15,6 +15,7 @@ struct lkl_jmp_buf {
*
* These operations must be provided by a host library or by the application
* itself.
+ * @print - optional operation that receives console messages
*
* @sem_alloc - allocate a host semaphore an initialize it to count
* @sem_free - free a host semaphore
@@ -63,6 +64,8 @@ struct lkl_jmp_buf {
*
*/
struct lkl_host_operations {
+ void (*print)(const char *str, int len);
+
struct lkl_sem *(*sem_alloc)(int count);
void (*sem_free)(struct lkl_sem *sem);
void (*sem_up)(struct lkl_sem *sem);
diff --git a/arch/um/nommu/um/console.c b/arch/um/nommu/um/console.c
new file mode 100644
index 000000000000..e3194f7bb0dd
--- /dev/null
+++ b/arch/um/nommu/um/console.c
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/console.h>
+#include <asm/host_ops.h>
+
+static void console_write(struct console *con, const char *str, unsigned len)
+{
+ if (lkl_ops->print)
+ lkl_ops->print(str, len);
+}
+
+#ifdef CONFIG_LKL_EARLY_CONSOLE
+static struct console lkl_boot_console = {
+ .name = "lkl_boot_console",
+ .write = console_write,
+ .flags = CON_PRINTBUFFER | CON_BOOT,
+ .index = -1,
+};
+
+int __init lkl_boot_console_init(void)
+{
+ register_console(&lkl_boot_console);
+ return 0;
+}
+early_initcall(lkl_boot_console_init);
+#endif
+
+static struct console lkl_console = {
+ .name = "lkl_console",
+ .write = console_write,
+ .flags = CON_PRINTBUFFER,
+ .index = -1,
+};
+
+int __init lkl_console_init(void)
+{
+ register_console(&lkl_console);
+ return 0;
+}
+core_initcall(lkl_console_init);
+
--
2.21.0 (Apple Git-122.2)
More information about the linux-um
mailing list