更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
mempt_shellcmd.c 文件参考

浏览源代码.

函数

VOID OsDumpMemByte (size_t length, UINTPTR addr)
 
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdMemCheck (INT32 argc, const CHAR *argv[])
 
LITE_OS_SEC_TEXT_MINOR STATIC VOID OsShellCmdSectionInfo (INT32 argc, const CHAR *argv[])
 
LITE_OS_SEC_TEXT_MINOR STATIC UINT32 OsShellCmdFreeInfo (INT32 argc, const CHAR *argv[])
 
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdFree (INT32 argc, const CHAR *argv[])
 
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdUname (INT32 argc, const CHAR *argv[])
 
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdMemUsed (INT32 argc, const CHAR *argv[])
 
 SHELLCMD_ENTRY (memused_shellcmd, CMD_TYPE_EX, "memused", 0,(CmdCallBackFunc) OsShellCmdMemUsed)
 
 SHELLCMD_ENTRY (memcheck_shellcmd, CMD_TYPE_EX, "memcheck", 0,(CmdCallBackFunc) OsShellCmdMemCheck)
 
 SHELLCMD_ENTRY (free_shellcmd, CMD_TYPE_EX, "free", XARGS,(CmdCallBackFunc) OsShellCmdFree)
 
 SHELLCMD_ENTRY (uname_shellcmd, CMD_TYPE_EX, "uname", XARGS,(CmdCallBackFunc) OsShellCmdUname)
 

函数说明

◆ OsDumpMemByte()

VOID OsDumpMemByte ( size_t  length,
UINTPTR  addr 
)

在文件 mempt_shellcmd.c53 行定义.

54{
55 size_t dataLen;
56 UINTPTR *alignAddr = NULL;
57 UINT32 count = 0;
58
59 dataLen = ALIGN(length, sizeof(UINTPTR));
60 alignAddr = (UINTPTR *)TRUNCATE(addr, sizeof(UINTPTR));
61 if ((dataLen == 0) || (alignAddr == NULL)) {
62 return;
63 }
64 while (dataLen) {
65 if (IS_ALIGNED(count, sizeof(CHAR *))) {
66 PRINTK("\n 0x%lx :", alignAddr);
67#ifdef LOSCFG_SAVE_EXCINFO
68 WriteExcInfoToBuf("\n 0x%lx :", alignAddr);
69#endif
70 }
71#ifdef __LP64__
72 PRINTK("%0+16lx ", *alignAddr);
73#else
74 PRINTK("%0+8lx ", *alignAddr);
75#endif
76#ifdef LOSCFG_SAVE_EXCINFO
77#ifdef __LP64__
78 WriteExcInfoToBuf("0x%0+16x ", *alignAddr);
79#else
80 WriteExcInfoToBuf("0x%0+8x ", *alignAddr);
81#endif
82#endif
83 alignAddr++;
84 dataLen -= sizeof(CHAR *);
85 count++;
86 }
87 PRINTK("\n");
88#ifdef LOSCFG_SAVE_EXCINFO
90#endif
91
92 return;
93}
VOID WriteExcInfoToBuf(const CHAR *format,...)
写异常信息到系统异常信息中心
Definition: los_excinfo.c:114
unsigned long UINTPTR
Definition: los_typedef.h:68
unsigned int UINT32
Definition: los_typedef.h:57
char CHAR
Definition: los_typedef.h:63
函数调用图:
这是这个函数的调用关系图:

◆ OsShellCmdFree()

LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdFree ( INT32  argc,
const CHAR argv[] 
)

在文件 mempt_shellcmd.c174 行定义.

175{
176 if (argc > 1) {
177 PRINTK("\nUsage: free or free [-k/-m]\n");
178 return OS_ERROR;
179 }
180 if (OsShellCmdFreeInfo(argc, argv) != 0) {
181 return OS_ERROR;
182 }
183 OsShellCmdSectionInfo(argc, argv);
184 return 0;
185}
LITE_OS_SEC_TEXT_MINOR STATIC VOID OsShellCmdSectionInfo(INT32 argc, const CHAR *argv[])
LITE_OS_SEC_TEXT_MINOR STATIC UINT32 OsShellCmdFreeInfo(INT32 argc, const CHAR *argv[])
函数调用图:
这是这个函数的调用关系图:

◆ OsShellCmdFreeInfo()

LITE_OS_SEC_TEXT_MINOR STATIC UINT32 OsShellCmdFreeInfo ( INT32  argc,
const CHAR argv[] 
)

在文件 mempt_shellcmd.c132 行定义.

133{
136 UINT32 freeMem = totalMem - memUsed;
137 UINT32 memUsedHeap = memUsed;
138
139#ifdef LOSCFG_KERNEL_VM
140 UINT32 usedCount, totalCount;
141 OsVmPhysUsedInfoGet(&usedCount, &totalCount);
142 totalMem = SYS_MEM_SIZE_DEFAULT;
143 memUsed = SYS_MEM_SIZE_DEFAULT - (totalCount << PAGE_SHIFT);
144 memUsed += (usedCount << PAGE_SHIFT) - freeMem;
145 freeMem = totalMem - memUsed;
146#else
147 totalMem = SYS_MEM_SIZE_DEFAULT;
148 memUsed = g_vmBootMemBase - KERNEL_ASPACE_BASE;
149 memUsed -= freeMem;
150 freeMem -= totalMem - memUsed;
151#endif
152
153 if ((argc == 0) ||
154 ((argc == 1) && (strcmp(argv[0], "-k") == 0)) ||
155 ((argc == 1) && (strcmp(argv[0], "-m") == 0))) {
156 PRINTK("\r\n total used free heap\n");
157 }
158
159 if ((argc == 1) && (strcmp(argv[0], "-k") == 0)) {
160 PRINTK("Mem: %-9u %-10u %-10u %-10u\n", MEM_SIZE_TO_KB(totalMem), MEM_SIZE_TO_KB(memUsed),
161 MEM_SIZE_TO_KB(freeMem), MEM_SIZE_TO_KB(memUsedHeap));
162 } else if ((argc == 1) && (strcmp(argv[0], "-m") == 0)) {
163 PRINTK("Mem: %-9u %-10u %-10u %-10u\n", MEM_SIZE_TO_MB(totalMem), MEM_SIZE_TO_MB(memUsed),
164 MEM_SIZE_TO_MB(freeMem), MEM_SIZE_TO_MB(memUsedHeap));
165 } else if (argc == 0) {
166 PRINTK("Mem: %-9u %-10u %-10u %-10u\n", totalMem, memUsed, freeMem, memUsedHeap);
167 } else {
168 PRINTK("\nUsage: free or free [-k/-m]\n");
169 return OS_ERROR;
170 }
171 return 0;
172}
UINT8 * m_aucSysMem1
系统动态内存池地址的起始地址 @note_thinking 能否不要用 0,1来命名核心变量 ???
Definition: los_memory.c:108
UINT32 LOS_MemPoolSizeGet(const VOID *pool)
获取指定动态内存池的总大小
Definition: los_memory.c:1603
UINT32 LOS_MemTotalUsedGet(VOID *pool)
获取指定动态内存池的总使用量大小
Definition: los_memory.c:1628
UINTPTR g_vmBootMemBase
虚拟内存区间检查, 需理解 los_vm_zone.h 中画出的鸿蒙虚拟内存全景图
Definition: los_vm_boot.c:45
VOID OsVmPhysUsedInfoGet(UINT32 *usedCount, UINT32 *totalCount)
获取物理内存的使用信息,两个参数接走数据
Definition: los_vm_dump.c:558
函数调用图:
这是这个函数的调用关系图:

◆ OsShellCmdMemCheck()

LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdMemCheck ( INT32  argc,
const CHAR argv[] 
)

在文件 mempt_shellcmd.c95 行定义.

96{
97 if (argc > 0) {
98 PRINTK("\nUsage: memcheck\n");
99 return OS_ERROR;
100 }
101
102 if (LOS_MemIntegrityCheck(m_aucSysMem1) == LOS_OK) {
103 PRINTK("system memcheck over, all passed!\n");
104#ifdef LOSCFG_SAVE_EXCINFO
105 WriteExcInfoToBuf("system memcheck over, all passed!\n");
106#endif
107 }
108
109 return 0;
110}
UINT32 LOS_MemIntegrityCheck(const VOID *pool)
对指定内存池做完整性检查
Definition: los_memory.c:1903
函数调用图:
这是这个函数的调用关系图:

◆ OsShellCmdMemUsed()

LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdMemUsed ( INT32  argc,
const CHAR argv[] 
)

在文件 mempt_shellcmd.c223 行定义.

224{
225 if (argc > 0) {
226 PRINTK("\nUsage: memused\n");
227 return OS_ERROR;
228 }
229
231
232 return 0;
233}
VOID OsMemUsedNodeShow(VOID *pool)
打印已使用的节点
Definition: los_memory.c:601
函数调用图:

◆ OsShellCmdSectionInfo()

LITE_OS_SEC_TEXT_MINOR STATIC VOID OsShellCmdSectionInfo ( INT32  argc,
const CHAR argv[] 
)

在文件 mempt_shellcmd.c113 行定义.

114{
115 size_t textLen = &__text_end - &__text_start;
116 size_t dataLen = &__ram_data_end - &__ram_data_start;
117 size_t rodataLen = &__rodata_end - &__rodata_start;
118 size_t bssLen = &__bss_end - &__bss_start;
119
120 PRINTK("\r\n text data rodata bss\n");
121 if ((argc == 1) && (strcmp(argv[0], "-k") == 0)) {
122 PRINTK("Mem: %-9lu %-10lu %-10lu %-10lu\n", MEM_SIZE_TO_KB(textLen), MEM_SIZE_TO_KB(dataLen),
123 MEM_SIZE_TO_KB(rodataLen), MEM_SIZE_TO_KB(bssLen));
124 } else if ((argc == 1) && (strcmp(argv[0], "-m") == 0)) {
125 PRINTK("Mem: %-9lu %-10lu %-10lu %-10lu\n", MEM_SIZE_TO_MB(textLen), MEM_SIZE_TO_MB(dataLen),
126 MEM_SIZE_TO_MB(rodataLen), MEM_SIZE_TO_MB(bssLen));
127 } else {
128 PRINTK("Mem: %-9lu %-10lu %-10lu %-10lu\n", textLen, dataLen, rodataLen, bssLen);
129 }
130}
CHAR __text_end
代码区结束地址
CHAR __ram_data_end
RAM结束地址
CHAR __rodata_end
ROM结束地址
CHAR __bss_start
bss开始地址 attribute((section(".__bss_start")));
CHAR __ram_data_start
RAM开始地址 可读可写
CHAR __bss_end
bss结束地址 attribute((section(".__bss_end")));
CHAR __text_start
代码区开始地址
CHAR __rodata_start
ROM开始地址 只读
这是这个函数的调用关系图:

◆ OsShellCmdUname()

LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdUname ( INT32  argc,
const CHAR argv[] 
)

在文件 mempt_shellcmd.c187 行定义.

188{
189 if (argc == 0) {
190 PRINTK("%s\n", KERNEL_NAME);
191 return 0;
192 }
193
194 if (argc == 1) {
195 if (strcmp(argv[0], "-a") == 0) {
196 PRINTK("%s %d.%d.%d.%d %s %s\n", KERNEL_NAME, KERNEL_MAJOR, KERNEL_MINOR, KERNEL_PATCH, KERNEL_ITRE,\
197 __DATE__, __TIME__);
198 return 0;
199 } else if (strcmp(argv[0], "-s") == 0) {
200 PRINTK("%s\n", KERNEL_NAME);
201 return 0;
202 } else if (strcmp(argv[0], "-t") == 0) {
203 PRINTK("build date : %s %s\n", __DATE__, __TIME__);
204 return 0;
205 } else if (strcmp(argv[0], "-v") == 0) {
206 PRINTK("%d.%d.%d.%d\n", KERNEL_MAJOR, KERNEL_MINOR, KERNEL_PATCH, KERNEL_ITRE);
207 return 0;
208 } else if (strcmp(argv[0], "--help") == 0) {
209 PRINTK("-a, print all information\n"
210 "-s, print the kernel name\n"
211 "-t, print the build date\n"
212 "-v, print the kernel version\n");
213 return 0;
214 }
215 }
216
217 PRINTK("uname: invalid option %s\n"
218 "Try 'uname --help' for more information.\n",
219 argv[0]);
220 return OS_ERROR;
221}
这是这个函数的调用关系图:

◆ SHELLCMD_ENTRY() [1/4]

SHELLCMD_ENTRY ( free_shellcmd  ,
CMD_TYPE_EX  ,
"free"  ,
XARGS  ,
(CmdCallBackFunc OsShellCmdFree 
)

◆ SHELLCMD_ENTRY() [2/4]

SHELLCMD_ENTRY ( memcheck_shellcmd  ,
CMD_TYPE_EX  ,
"memcheck"  ,
,
(CmdCallBackFunc OsShellCmdMemCheck 
)

◆ SHELLCMD_ENTRY() [3/4]

SHELLCMD_ENTRY ( memused_shellcmd  ,
CMD_TYPE_EX  ,
"memused"  ,
,
(CmdCallBackFunc OsShellCmdMemUsed 
)

◆ SHELLCMD_ENTRY() [4/4]

SHELLCMD_ENTRY ( uname_shellcmd  ,
CMD_TYPE_EX  ,
"uname"  ,
XARGS  ,
(CmdCallBackFunc OsShellCmdUname 
)