36#ifdef LOSCFG_CPUP_INCLUDE_IRQ
60#define CPUP_TYPE_COUNT 3
61#define HIDUMPER_DEVICE "/dev/hidumper"
62#define HIDUMPER_DEVICE_MODE 0666
63#define KERNEL_FAULT_ADDR 0x1
64#define KERNEL_FAULT_VALUE 0x2
65#define READ_BUF_SIZE 128
66#define SYS_INFO_HEADER "************ sys info ***********"
67#define CPU_USAGE_HEADER "************ cpu usage ***********"
68#define MEM_USAGE_HEADER "************ mem usage ***********"
69#define PAGE_USAGE_HEADER "************ physical page usage ***********"
70#define TASK_INFO_HEADER "************ task info ***********"
72#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
74#define REPLACE_INTERFACE(dst, src, type, func) { \
75 if (((type *)src)->func != NULL) { \
76 ((type *)dst)->func = ((type *)src)->func; \
78 PRINT_ERR("%s->%s is NULL!\n", #src, #func); \
81#define INVOKE_INTERFACE(adapter, type, func) { \
82 if (((type *)adapter)->func != NULL) { \
83 ((type *)adapter)->func(); \
85 PRINT_ERR("%s->%s is NULL!\n", #adapter, #func); \
113#ifndef CONFIG_DISABLE_POLL
134 PRINTK(
"\n%s\n", SYS_INFO_HEADER);
136 const char *argv[1] = {
"-a"};
140 PRINTK(
"\nUnsupported!\n");
144#ifdef LOSCFG_KERNEL_CPUP
151 PRINTK(
"%-32s PID CPUUSE CPUUSE10S CPUUSE1S\n",
"PName");
157 PRINTK(
"%-32s %u %5u.%1u%8u.%1u%7u.%-1u\n",
159 processCpupAll[pid].
usage / LOS_CPUP_PRECISION_MULT,
160 processCpupAll[pid].
usage % LOS_CPUP_PRECISION_MULT,
161 processCpup10s[pid].
usage / LOS_CPUP_PRECISION_MULT,
162 processCpup10s[pid].
usage % LOS_CPUP_PRECISION_MULT,
163 processCpup1s[pid].
usage / LOS_CPUP_PRECISION_MULT,
164 processCpup1s[pid].
usage % LOS_CPUP_PRECISION_MULT);
171 PRINTK(
"\n%s\n", CPU_USAGE_HEADER);
172#ifdef LOSCFG_KERNEL_CPUP
181 if (processCpup == NULL) {
182 PRINT_ERR(
"func: %s, LOS_MemAlloc failed, Line: %d\n", __func__, __LINE__);
185 processCpupAll = processCpup;
188 (VOID)memset_s(processCpup, size, 0, size);
195 PRINTK(
"\nUnsupported!\n");
201 PRINTK(
"\n%s\n", MEM_USAGE_HEADER);
203 PRINTK(
"Unit: KB\n");
204 const char *argv[1] = {
"-k"};
206 PRINTK(
"%s\n", PAGE_USAGE_HEADER);
209 PRINTK(
"\nUnsupported!\n");
215 PRINTK(
"\n%s\n", TASK_INFO_HEADER);
219 PRINTK(
"\nUnsupported!\n");
223#ifdef LOSCFG_BLACKBOX
227 CHAR buf[READ_BUF_SIZE];
230 PRINT_ERR(
"fd: %d!\n", fd);
234 (
void)memset_s(buf,
sizeof(buf), 0,
sizeof(buf));
235 while (read(fd, buf,
sizeof(buf) - 1) > 0) {
237 (
void)memset_s(buf,
sizeof(buf), 0,
sizeof(buf));
241 PRINT_ERR(
"LOSCFG_FS_VFS isn't defined!\n");
245static void PrintFile(
const char *filePath,
const char *pHeader)
250 if (filePath == NULL || pHeader == NULL) {
251 PRINT_ERR(
"filePath: %p, pHeader: %p\n", filePath, pHeader);
255 fd = open(filePath, O_RDONLY);
257 PRINTK(
"\n%s\n", pHeader);
261 PRINT_ERR(
"Open [%s] failed or there's no fault log!\n", filePath);
266 PRINT_ERR(
"LOSCFG_FS_VFS isn't defined!\n");
273#ifdef LOSCFG_BLACKBOX
274 PrintFile(KERNEL_FAULT_LOG_PATH,
"************kernel fault info************");
275 PrintFile(USER_FAULT_LOG_PATH,
"************user fault info************");
281 PRINTK(
"\nDumpType: %d\n", param->
type);
282 PRINTK(
"Unsupported now!\n");
287#ifdef LOSCFG_DEBUG_VERSION
288 *((
INT32 *)KERNEL_FAULT_ADDR) = KERNEL_FAULT_VALUE;
290 PRINTK(
"\nUnsupported!\n");
299 case HIDUMPER_DUMP_ALL:
305 case HIDUMPER_CPU_USAGE:
308 case HIDUMPER_MEM_USAGE:
311 case HIDUMPER_TASK_INFO:
314 case HIDUMPER_INJECT_KERNEL_CRASH:
317 case HIDUMPER_DUMP_FAULT_LOG:
320 case HIDUMPER_MEM_DATA:
327 PRINTK(
"Invalid CMD: 0x%x\n", (
UINT32)cmd);
350 if (pAdapter == NULL) {
351 PRINT_ERR(
"pAdapter: %p\n", pAdapter);
370#ifdef LOSCFG_DEBUG_VERSION
372 ret = register_driver(HIDUMPER_DEVICE, &
g_hidumperDevOps, HIDUMPER_DEVICE_MODE, NULL);
374 PRINT_ERR(
"Hidumper register driver failed!\n");
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_GetAllProcessCpuUsage(UINT16 mode, CPUP_INFO_S *cpupInfo, UINT32 len)
获取系统所有进程的历史CPU占用率
VOID * LOS_MemAlloc(VOID *pool, UINT32 size)
从指定内存池中申请size长度的内存,注意这可不是从内核堆空间中申请内存
UINT8 * m_aucSysMem1
系统动态内存池地址的起始地址 @note_thinking 能否不要用 0,1来命名核心变量 ???
UINT32 LOS_MemFree(VOID *pool, VOID *ptr)
释放从指定动态内存中申请的内存
STATIC INT32 HiDumperOpen(struct file *filep)
static void DumpTaskInfo(void)
LOS_MODULE_INIT(OsHiDumperDriverInit, LOS_INIT_LEVEL_KMOD_EXTENDED)
static void PrintFile(const char *filePath, const char *pHeader)
STATIC struct file_operations_vfs g_hidumperDevOps
static void DoDumpCpuUsageUnsafe(CPUP_INFO_S *processCpupAll, CPUP_INFO_S *processCpup10s, CPUP_INFO_S *processCpup1s)
STATIC INT32 HiDumperClose(struct file *filep)
static void DumpCpuUsageUnsafe(void)
STATIC INT32 HiDumperIoctl(struct file *filep, INT32 cmd, unsigned long arg)
UINT32 OsShellCmdUname(INT32 argc, const CHAR *argv[])
int HiDumperRegisterAdapter(struct HiDumperAdapter *pAdapter)
UINT32 OsShellCmdDumpPmm(VOID)
查看系统内存物理页及pagecache物理页使用情况 , Debug版本才具备的命令 # pmm
UINT32 OsShellCmdFree(INT32 argc, const CHAR *argv[])
static void RegisterCommonAdapter(void)
static void InjectKernelCrash(void)
static void DumpMemUsage(void)
static void PrintFileData(INT32 fd)
int OsHiDumperDriverInit(void)
static void DumpSysInfo(void)
static void DumpMemData(struct MemDumpParam *param)
VOID OsShellCmdSystemInfoGet(VOID)
查看系统资源使用情况
static struct HiDumperAdapter g_adapter
static void DumpFaultLog(void)
LITE_OS_SEC_BSS LosProcessCB * g_processCBArray
进程池数组
LITE_OS_SEC_BSS UINT32 g_processMaxNum
进程最大数量,默认64个
STATIC INLINE BOOL OsProcessIsUnused(const LosProcessCB *processCB)
UINT32 OsShellCmdTskInfoGet(UINT32 taskID, VOID *seqfile, UINT16 flag)
void(* DumpTaskInfo)(void)
void(* DumpCpuUsage)(void)
void(* DumpSysInfo)(void)
void(* InjectKernelCrash)(void)
void(* DumpMemUsage)(void)
void(* DumpMemData)(struct MemDumpParam *param)
void(* DumpFaultLog)(void)
CHAR processName[OS_PCB_NAME_LEN]
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 void