1
1
/*
2
+ * Copyright (c) 2018 Nordic Semiconductor ASA
2
3
* Copyright (c) 2016 Intel Corporation
3
4
*
4
5
* SPDX-License-Identifier: Apache-2.0
5
6
*/
6
7
7
8
#include <misc/printk.h>
8
- #include <shell/legacy_shell .h>
9
+ #include <shell/shell .h>
9
10
#include <init.h>
10
11
#include <debug/object_tracing.h>
11
12
#include <misc/reboot.h>
12
13
#include <misc/stack.h>
13
14
#include <string.h>
14
15
15
- #define SHELL_KERNEL "kernel"
16
-
17
- static int shell_cmd_version (int argc , char * argv [])
16
+ static void cmd_kernel_version (const struct shell * shell ,
17
+ size_t argc , char * * argv )
18
18
{
19
19
u32_t version = sys_kernel_version_get ();
20
20
21
21
ARG_UNUSED (argc );
22
22
ARG_UNUSED (argv );
23
23
24
- printk ("Zephyr version %d.%d.%d\n" ,
25
- SYS_KERNEL_VER_MAJOR (version ),
26
- SYS_KERNEL_VER_MINOR (version ),
27
- SYS_KERNEL_VER_PATCHLEVEL (version ));
28
- return 0 ;
24
+ shell_fprintf (shell , SHELL_NORMAL , "Zephyr version %d.%d.%d\r\n" ,
25
+ SYS_KERNEL_VER_MAJOR (version ),
26
+ SYS_KERNEL_VER_MINOR (version ),
27
+ SYS_KERNEL_VER_PATCHLEVEL (version ));
29
28
}
30
29
31
- static int shell_cmd_uptime (int argc , char * argv [])
30
+ static void cmd_kernel_uptime (const struct shell * shell ,
31
+ size_t argc , char * * argv )
32
32
{
33
33
ARG_UNUSED (argc );
34
34
ARG_UNUSED (argv );
35
35
36
- printk ("uptime: %u ms\n" , k_uptime_get_32 ());
37
-
38
- return 0 ;
36
+ shell_fprintf (shell , SHELL_NORMAL , "Uptime: %u ms\r\n" ,
37
+ k_uptime_get_32 ());
39
38
}
40
39
41
- static int shell_cmd_cycles (int argc , char * argv [])
40
+ static void cmd_kernel_cycles (const struct shell * shell ,
41
+ size_t argc , char * * argv )
42
42
{
43
43
ARG_UNUSED (argc );
44
44
ARG_UNUSED (argv );
45
45
46
- printk ("cycles: %u hw cycles\n" , k_cycle_get_32 ());
47
-
48
- return 0 ;
46
+ shell_fprintf (shell , SHELL_NORMAL , "cycles: %u hw cycles\r\n" ,
47
+ k_cycle_get_32 ());
49
48
}
50
49
51
50
#if defined(CONFIG_OBJECT_TRACING ) && defined(CONFIG_THREAD_MONITOR )
52
51
static void shell_tdata_dump (const struct k_thread * thread , void * user_data )
53
52
{
54
- printk ("%s%p: options: 0x%x priority: %d\n" ,
55
- (thread == k_current_get ()) ? "*" : " " ,
56
- thread ,
57
- thread -> base .user_options ,
58
- thread -> base .prio );
53
+ shell_fprintf ((const struct shell * )user_data , SHELL_NORMAL ,
54
+ "%s%p: options: 0x%x priority: %d\r\n" ,
55
+ (thread == k_current_get ()) ? "*" : " " ,
56
+ thread ,
57
+ thread -> base .user_options ,
58
+ thread -> base .prio );
59
59
}
60
60
61
- static int shell_cmd_threads (int argc , char * argv [])
61
+ static void cmd_kernel_threads (const struct shell * shell ,
62
+ size_t argc , char * * argv )
62
63
{
63
64
ARG_UNUSED (argc );
64
65
ARG_UNUSED (argv );
65
66
66
- printk ("Threads:\n" );
67
- k_thread_foreach (shell_tdata_dump , NULL );
68
-
69
- return 0 ;
67
+ shell_fprintf (shell , SHELL_NORMAL , "Threads:\r\n" );
68
+ k_thread_foreach (shell_tdata_dump , (void * )shell );
70
69
}
71
70
#endif
72
71
@@ -75,55 +74,72 @@ static int shell_cmd_threads(int argc, char *argv[])
75
74
&& defined(CONFIG_THREAD_STACK_INFO )
76
75
static void shell_stack_dump (const struct k_thread * thread , void * user_data )
77
76
{
78
- stack_analyze ((char * )user_data , (char * )thread -> stack_info .start ,
79
- thread -> stack_info .size );
77
+ unsigned int pcnt , unused = 0 ;
78
+ unsigned int size = thread -> stack_info .size ;
79
+
80
+ unused = stack_unused_space_get ((char * )thread -> stack_info .start ,
81
+ size );
82
+
83
+ /* Calculate the real size reserved for the stack */
84
+ pcnt = ((size - unused ) * 100 ) / size ;
85
+
86
+ shell_fprintf ((const struct shell * )user_data , SHELL_NORMAL ,
87
+ "0x%08X (real size %u):\tunused %u\tusage %u / %u (%u %%)\r\n" ,
88
+ (u32_t )thread , size , unused , size - unused , size , pcnt );
80
89
}
81
90
82
- static int shell_cmd_stack (int argc , char * argv [])
91
+ static void cmd_kernel_stacks (const struct shell * shell ,
92
+ size_t argc , char * * argv )
83
93
{
84
- k_thread_foreach (shell_stack_dump , "Shell" );
85
- return 0 ;
94
+ ARG_UNUSED (argc );
95
+ ARG_UNUSED (argv );
96
+ k_thread_foreach (shell_stack_dump , (void * )shell );
86
97
}
87
98
#endif
88
99
89
100
#if defined(CONFIG_REBOOT )
90
- static int shell_cmd_reboot (int argc , char * argv [])
101
+ static void cmd_kernel_reboot_warm (const struct shell * shell ,
102
+ size_t argc , char * * argv )
91
103
{
92
- int type ;
93
-
94
- if (argc != 2 ) {
95
- return - EINVAL ;
96
- }
97
-
98
- if (!strcmp (argv [1 ], "warm" )) {
99
- type = SYS_REBOOT_WARM ;
100
- } else if (!strcmp (argv [1 ], "cold" )) {
101
- type = SYS_REBOOT_COLD ;
102
- } else {
103
- return - EINVAL ;
104
- }
105
-
106
- sys_reboot (type );
107
- return 0 ;
104
+ ARG_UNUSED (argc );
105
+ ARG_UNUSED (argv );
106
+ sys_reboot (SYS_REBOOT_WARM );
108
107
}
108
+
109
+ static void cmd_kernel_reboot_cold (const struct shell * shell ,
110
+ size_t argc , char * * argv )
111
+ {
112
+ ARG_UNUSED (argc );
113
+ ARG_UNUSED (argv );
114
+ sys_reboot (SYS_REBOOT_COLD );
115
+ }
116
+
117
+ SHELL_CREATE_STATIC_SUBCMD_SET (sub_kernel_reboot )
118
+ {
119
+ /* Alphabetically sorted. */
120
+ SHELL_CMD (cold , NULL , "Cold reboot." , cmd_kernel_reboot_cold ),
121
+ SHELL_CMD (warm , NULL , "Warm reboot." , cmd_kernel_reboot_warm ),
122
+ SHELL_SUBCMD_SET_END /* Array terminated. */
123
+ };
109
124
#endif
110
125
111
- struct shell_cmd kernel_commands [] = {
112
- { "version" , shell_cmd_version , "show kernel version" },
113
- { "uptime" , shell_cmd_uptime , "show system uptime in milliseconds" },
114
- { " cycles" , shell_cmd_cycles , "show system hardware cycles" } ,
115
- #if defined(CONFIG_OBJECT_TRACING ) && defined ( CONFIG_THREAD_MONITOR )
116
- { "threads" , shell_cmd_threads , "show running threads" } ,
126
+ SHELL_CREATE_STATIC_SUBCMD_SET ( sub_kernel )
127
+ {
128
+ /* Alphabetically sorted. */
129
+ SHELL_CMD ( cycles , NULL , "Kernel cycles." , cmd_kernel_cycles ) ,
130
+ #if defined(CONFIG_REBOOT )
131
+ SHELL_CMD ( reboot , & sub_kernel_reboot , "Reboot." , NULL ) ,
117
132
#endif
118
133
#if defined(CONFIG_INIT_STACKS ) && defined(CONFIG_THREAD_MONITOR ) \
119
134
&& defined(CONFIG_THREAD_STACK_INFO )
120
- { " stacks" , shell_cmd_stack , "show system stacks" } ,
135
+ SHELL_CMD ( stacks , NULL , "List threads stack usage." , cmd_kernel_stacks ) ,
121
136
#endif
122
- #if defined(CONFIG_REBOOT )
123
- { "reboot" , shell_cmd_reboot , "<warm cold>" } ,
137
+ #if defined(CONFIG_OBJECT_TRACING ) && defined( CONFIG_THREAD_MONITOR )
138
+ SHELL_CMD ( threads , NULL , "List kernel threads." , cmd_kernel_threads ) ,
124
139
#endif
125
- { NULL , NULL , NULL }
140
+ SHELL_CMD (uptime , NULL , "Kernel uptime." , cmd_kernel_uptime ),
141
+ SHELL_CMD (version , NULL , "Kernel version." , cmd_kernel_version ),
142
+ SHELL_SUBCMD_SET_END /* Array terminated. */
126
143
};
127
144
128
-
129
- SHELL_REGISTER (SHELL_KERNEL , kernel_commands );
145
+ SHELL_CMD_REGISTER (kernel , & sub_kernel , "Kernel commands" , NULL );
0 commit comments