34#ifdef LOSCFG_SAVE_EXCINFO
47#define MEM_SIZE_1K 0x400
48#define MEM_SIZE_1M 0x100000
50#define MEM_SIZE_TO_KB(size) (((size) + (MEM_SIZE_1K >> 1)) / MEM_SIZE_1K)
51#define MEM_SIZE_TO_MB(size) (((size) + (MEM_SIZE_1M >> 1)) / MEM_SIZE_1M)
59 dataLen = ALIGN(length,
sizeof(
UINTPTR));
61 if ((dataLen == 0) || (alignAddr == NULL)) {
65 if (IS_ALIGNED(count,
sizeof(
CHAR *))) {
66 PRINTK(
"\n 0x%lx :", alignAddr);
67#ifdef LOSCFG_SAVE_EXCINFO
72 PRINTK(
"%0+16lx ", *alignAddr);
74 PRINTK(
"%0+8lx ", *alignAddr);
76#ifdef LOSCFG_SAVE_EXCINFO
84 dataLen -=
sizeof(
CHAR *);
88#ifdef LOSCFG_SAVE_EXCINFO
98 PRINTK(
"\nUsage: memcheck\n");
103 PRINTK(
"system memcheck over, all passed!\n");
104#ifdef LOSCFG_SAVE_EXCINFO
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));
128 PRINTK(
"Mem: %-9lu %-10lu %-10lu %-10lu\n", textLen, dataLen, rodataLen, bssLen);
136 UINT32 freeMem = totalMem - memUsed;
137 UINT32 memUsedHeap = memUsed;
139#ifdef LOSCFG_KERNEL_VM
140 UINT32 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;
147 totalMem = SYS_MEM_SIZE_DEFAULT;
150 freeMem -= totalMem - memUsed;
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");
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);
168 PRINTK(
"\nUsage: free or free [-k/-m]\n");
177 PRINTK(
"\nUsage: free or free [-k/-m]\n");
190 PRINTK(
"%s\n", KERNEL_NAME);
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,\
199 }
else if (strcmp(argv[0],
"-s") == 0) {
200 PRINTK(
"%s\n", KERNEL_NAME);
202 }
else if (strcmp(argv[0],
"-t") == 0) {
203 PRINTK(
"build date : %s %s\n", __DATE__, __TIME__);
205 }
else if (strcmp(argv[0],
"-v") == 0) {
206 PRINTK(
"%d.%d.%d.%d\n", KERNEL_MAJOR, KERNEL_MINOR, KERNEL_PATCH, KERNEL_ITRE);
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");
217 PRINTK(
"uname: invalid option %s\n"
218 "Try 'uname --help' for more information.\n",
222#ifdef LOSCFG_MEM_LEAKCHECK
226 PRINTK(
"\nUsage: memused\n");
236#ifdef LOSCFG_MEM_LEAKCHECK
240#ifdef LOSCFG_SHELL_CMD_DEBUG
@ CMD_TYPE_EX
不支持标准命令参数输入,会把用户填写的命令关键字屏蔽掉,例如:输入ls /ramfs,传入给注册函数的参数只有/ramfs,而ls命令关键字并不会被传入。
UINT8 * m_aucSysMem1
系统动态内存池地址的起始地址 @note_thinking 能否不要用 0,1来命名核心变量 ???
UINT32 LOS_MemPoolSizeGet(const VOID *pool)
获取指定动态内存池的总大小
UINT32 LOS_MemTotalUsedGet(VOID *pool)
获取指定动态内存池的总使用量大小
UINT32 LOS_MemIntegrityCheck(const VOID *pool)
对指定内存池做完整性检查
CHAR __ram_data_end
RAM结束地址
CHAR __bss_start
bss开始地址 attribute((section(".__bss_start")));
CHAR __ram_data_start
RAM开始地址 可读可写
CHAR __bss_end
bss结束地址 attribute((section(".__bss_end")));
CHAR __rodata_start
ROM开始地址 只读
VOID WriteExcInfoToBuf(const CHAR *format,...)
写异常信息到系统异常信息中心
VOID OsMemUsedNodeShow(VOID *pool)
打印已使用的节点
UINTPTR g_vmBootMemBase
虚拟内存区间检查, 需理解 los_vm_zone.h 中画出的鸿蒙虚拟内存全景图
VOID OsVmPhysUsedInfoGet(UINT32 *usedCount, UINT32 *totalCount)
获取物理内存的使用信息,两个参数接走数据
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdFree(INT32 argc, const CHAR *argv[])
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdMemUsed(INT32 argc, const CHAR *argv[])
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdMemCheck(INT32 argc, const CHAR *argv[])
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdUname(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[])
VOID OsDumpMemByte(size_t length, UINTPTR addr)
SHELLCMD_ENTRY(memused_shellcmd, CMD_TYPE_EX, "memused", 0,(CmdCallBackFunc) OsShellCmdMemUsed)
u32_t(* CmdCallBackFunc)(u32_t argc, const char **argv)