[PATCH] libmisc/shell: Add an 'rtems' command to report a running build

chrisj at rtems.org chrisj at rtems.org
Tue Aug 2 11:05:01 UTC 2022


From: Chris Johns <chrisj at rtems.org>

- Report version, cpu, bsp, tools and options.
---
 cpukit/include/rtems/shellconfig.h |   6 ++
 cpukit/libmisc/shell/main_rtems.c  | 156 +++++++++++++++++++++++++++++
 spec/build/cpukit/objshell.yml     |   1 +
 3 files changed, 163 insertions(+)
 create mode 100644 cpukit/libmisc/shell/main_rtems.c

diff --git a/cpukit/include/rtems/shellconfig.h b/cpukit/include/rtems/shellconfig.h
index b09d5ae1d3..a013840ee7 100644
--- a/cpukit/include/rtems/shellconfig.h
+++ b/cpukit/include/rtems/shellconfig.h
@@ -110,6 +110,7 @@ extern rtems_shell_cmd_t rtems_shell_STACKUSE_Command;
 extern rtems_shell_cmd_t rtems_shell_PERIODUSE_Command;
 extern rtems_shell_cmd_t rtems_shell_PROFREPORT_Command;
 extern rtems_shell_cmd_t rtems_shell_WKSPACE_INFO_Command;
+extern rtems_shell_cmd_t rtems_shell_RTEMS_Command;
 extern rtems_shell_cmd_t rtems_shell_MALLOC_INFO_Command;
 extern rtems_shell_cmd_t rtems_shell_RTRACE_Command;
 #if RTEMS_NETWORKING
@@ -489,6 +490,11 @@ extern rtems_shell_alias_t * const rtems_shell_Initial_aliases[];
         defined(CONFIGURE_SHELL_COMMAND_WKSPACE_INFO)
       &rtems_shell_WKSPACE_INFO_Command,
     #endif
+    #if (defined(CONFIGURE_SHELL_COMMANDS_ALL) && \
+         !defined(CONFIGURE_SHELL_NO_COMMAND_RTEMS)) || \
+        defined(CONFIGURE_SHELL_COMMAND_RTEMS)
+      &rtems_shell_RTEMS_Command,
+    #endif
 
     /*
      *  Malloc family commands
diff --git a/cpukit/libmisc/shell/main_rtems.c b/cpukit/libmisc/shell/main_rtems.c
new file mode 100644
index 0000000000..e24287ccc4
--- /dev/null
+++ b/cpukit/libmisc/shell/main_rtems.c
@@ -0,0 +1,156 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup
+ *
+ * @brief This source file contains the kernel command.
+ */
+
+/*
+ * Copyright (c) 2022 Chris Johns.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include <rtems.h>
+#include <rtems/shell.h>
+#include <rtems/version.h>
+
+static void kernel_summary(void) {
+  printf(
+    "RTEMS: %d.%d.%d",
+    rtems_version_major(), rtems_version_minor(), rtems_version_revision());
+  if (rtems_version_control_key_is_valid(rtems_version_control_key())) {
+    printf(" (%s)", rtems_version_control_key());
+  }
+#if RTEMS_SMP
+    printf(" SMP:%d cores", );
+#endif
+    printf("\n");
+}
+
+static void cpu_summary(void) {
+  printf("CPU: " CPU_NAME " (" CPU_MODEL_NAME ")\n");
+}
+
+static void bsp_summary(void) {
+  printf("BSP: %s\n", rtems_board_support_package());
+}
+
+static void tools_summary(void) {
+  printf( "Tools: " __VERSION__ "\n");
+}
+
+static void opts_summary(void) {
+  printf("Options:"
+#if RTEMS_DEBUG
+         " DEBUG"
+#endif
+#if RTEMS_MULTIPROCESSING
+         " MULTIPROCESSING"
+#endif
+#if RTEMS_NETWORKING
+         " NETWORKING"
+#endif
+#if RTEMS_PARAVIRT
+         " PARAVIRT"
+#endif
+#if RTEMS_POSIX_API
+         " POSIX"
+#endif
+#if RTEMS_PROFILING
+         " PROFILING"
+#endif
+#if RTEMS_SMP
+         " SMP"
+#endif
+         "\n");
+}
+
+static void help(void) {
+  printf( "Usage:: rtems <command>\n");
+  printf( " where <command> is:\n");
+  printf( "  help   : this help\n");
+  printf( "  ver    : kernel version\n");
+  printf( "  cpu    : kernel version\n");
+  printf( "  bsp    : BSP name\n");
+  printf( "  tools  : tools version\n");
+  printf( "  opts   : options\n");
+  printf( "  all    : all commands\n");
+}
+
+static int rtems_shell_main_rtems(
+  int argc, char *argv[]) {
+
+  if (argc == 1) {
+    kernel_summary();
+  } else if (argc == 2) {
+    if (strcmp(argv[1], "help") == 0) {
+      help();
+    } else if (strcmp(argv[1], "ver") == 0) {
+      kernel_summary();
+    } else if (strcmp(argv[1], "cpu") == 0) {
+      cpu_summary();
+    } else if (strcmp(argv[1], "bsp") == 0) {
+      bsp_summary();
+    } else if (strcmp(argv[1], "tools") == 0) {
+      tools_summary();
+    } else if (strcmp(argv[1], "opts") == 0) {
+      opts_summary();
+    } else if (strcmp(argv[1], "all") == 0) {
+      kernel_summary();
+      cpu_summary();
+      bsp_summary();
+      tools_summary();
+      opts_summary();
+    } else {
+      printf("error: invalid command\n");
+      return 1;
+    }
+  } else {
+    printf("error: invalid command\n");
+    return 1;
+  }
+  return 0;
+}
+
+#define HELP_LINE \
+  "rtems <command> (eg. help)"
+
+rtems_shell_cmd_t rtems_shell_RTEMS_Command = {
+  "rtems",                             /* name */
+  HELP_LINE,                           /* usage */
+  "rtems",                             /* topic */
+  rtems_shell_main_rtems,              /* command */
+  NULL,                                /* alias */
+  NULL,                                /* next */
+  0500,                                /* mode */
+  0,                                   /* uid */
+  0                                    /* gid */
+};
diff --git a/spec/build/cpukit/objshell.yml b/spec/build/cpukit/objshell.yml
index 93c4bebe52..5fd259bee3 100644
--- a/spec/build/cpukit/objshell.yml
+++ b/spec/build/cpukit/objshell.yml
@@ -82,6 +82,7 @@ source:
 - cpukit/libmisc/shell/main_rm.c
 - cpukit/libmisc/shell/main_rmdir.c
 - cpukit/libmisc/shell/main_rtc.c
+- cpukit/libmisc/shell/main_rtems.c
 - cpukit/libmisc/shell/main_rtrace.c
 - cpukit/libmisc/shell/main_setenv.c
 - cpukit/libmisc/shell/main_sleep.c
-- 
2.24.1



More information about the devel mailing list