77#ifdef LOSCFG_KERNEL_SMP
94#ifdef LOSCFG_TRACE_CONTROL_AGENT
98#define EVENT_MASK 0xFFFFFFF0
99#define MIN(x, y) ((x) < (y) ? (x) : (y))
103#ifdef LOSCFG_KERNEL_SMP
109 BOOL ret = ((hwiNum == NUM_HAL_INTERRUPT_UART) || (hwiNum == OS_TICK_INT_NUM));
110#ifdef LOSCFG_KERNEL_SMP
127 if (paramCount > LOSCFG_TRACE_FRAME_MAX_PARAMS) {
128 paramCount = LOSCFG_TRACE_FRAME_MAX_PARAMS;
138#ifdef LOSCFG_TRACE_FRAME_CORE_MSG
145#ifdef LOS_TRACE_FRAME_LR
147 LOS_RecordLR(frame->
linkReg, LOS_TRACE_LR_RECORD, LOS_TRACE_LR_RECORD, LOS_TRACE_LR_IGNORE);
150#ifdef LOSCFG_TRACE_FRAME_EVENT_COUNT
154 TRACE_UNLOCK(intSave);
156 for (i = 0; i < paramCount; i++) {
157 frame->
params[i] = params[i];
171 ret = strncpy_s(obj->
name, LOSCFG_TRACE_OBJ_MAX_NAME_SIZE, tcb->
taskName, LOSCFG_TRACE_OBJ_MAX_NAME_SIZE - 1);
173 TRACE_ERROR(
"Task name copy failed!\n");
223#ifdef LOSCFG_RECORDER_MODE_OFFLINE
228#ifdef LOSCFG_TRACE_CONTROL_AGENT
288 taskInitParam.
usTaskPrio = LOSCFG_TRACE_TASK_PRIORITY;
289 taskInitParam.
pcName =
"TraceAgent";
290 taskInitParam.
uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
291#ifdef LOSCFG_KERNEL_SMP
304 TRACE_ERROR(
"trace has been initialized already, the current state is :%d\n",
g_traceState);
305 ret = LOS_ERRNO_TRACE_ERROR_STATUS;
309#ifdef LOSCFG_TRACE_CLIENT_INTERACT
316#ifdef LOSCFG_TRACE_CONTROL_AGENT
319 TRACE_ERROR(
"trace init create agentTask error :0x%x\n", ret);
324#ifdef LOSCFG_RECORDER_MODE_OFFLINE
329#ifdef LOSCFG_TRACE_CONTROL_AGENT
341#ifdef LOSCFG_RECORDER_MODE_ONLINE
364 TRACE_ERROR(
"trace not inited, be sure LOS_TraceInit excute success\n");
365 ret = LOS_ERRNO_TRACE_ERROR_STATUS;
369 OsTraceNotifyStart();
374 TRACE_UNLOCK(intSave);
378 TRACE_UNLOCK(intSave);
395 TRACE_UNLOCK(intSave);
406 TRACE_ERROR(
"trace dump must after trace stopped , the current state is : %d\n",
g_traceState);
420 TRACE_ERROR(
"trace not inited, be sure LOS_TraceInit excute success\n");
433 TRACE_UNLOCK(intSave);
444 PRINTK(
"\nUsage: trace_mask or trace_mask ID\n");
449 mask = TRACE_DEFAULT_MASK;
451 mask = strtoul(argv[0], &endPtr, 0);
463 PRINTK(
"\nUsage: trace_dump or trace_dump [1/0]\n");
470 toClient = strtoul(argv[0], &endPtr, 0) != 0 ? TRUE : FALSE;
@ CMD_TYPE_EX
不支持标准命令参数输入,会把用户填写的命令关键字屏蔽掉,例如:输入ls /ramfs,传入给注册函数的参数只有/ramfs,而ls命令关键字并不会被传入。
VOID LOS_RecordLR(UINTPTR *LR, UINT32 LRSize, UINT32 recordCount, UINT32 jumpCount)
record LR function.
UINT32 LOS_MemInfoGet(VOID *pool, LOS_MEM_POOL_STATUS *poolStatus)
LOS_MemInfoGet 获取指定内存池的内存结构信息,包括空闲内存大小、已使用内存大小、空闲内存块数量、已使用的内存块数量、最大的空闲内存块大小
UINT8 * m_aucSysMem0
异常交互动态内存池地址的起始地址,当不支持异常交互特性时,m_aucSysMem0等于m_aucSysMem1。
LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskDelete(UINT32 taskID)
Delete a task.
LITE_OS_SEC_TEXT UINT32 LOS_CurTaskIDGet(VOID)
Obtain current running task ID.
struct tagTskInitParam TSK_INIT_PARAM_S
LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskCreate(UINT32 *taskID, TSK_INIT_PARAM_S *initParam)
创建任务,并使该任务进入ready状态,如果就绪队列中没有更高优先级的任务,则运行该任务
VOID *(* TSK_ENTRY_FUNC)(UINTPTR param1, UINTPTR param2, UINTPTR param3, UINTPTR param4)
Define the type of a task entrance function.
BOOL(* TRACE_HWI_FILTER_HOOK)(UINT32 hwiNum)
Define the type of trace hardware interrupt filter hook function.
OfflineHead * LOS_TraceRecordGet(VOID)
获取Trace缓冲区的首地址
VOID LOS_TraceEventMaskSet(UINT32 mask)
设置事件掩码,仅记录某些模块的事件
VOID LOS_TraceReset(VOID)
清除Trace缓冲区中的事件
UINT32 LOS_TraceStart(VOID)
启动Trace
VOID LOS_TraceHwiFilterHookReg(TRACE_HWI_FILTER_HOOK hook)
注册过滤特定中断号事件的钩子函数
VOID LOS_TraceStop(VOID)
停止Trace(跟踪)
VOID LOS_TraceRecordDump(BOOL toClient)
输出Trace缓冲区数据
UINT64 HalClockGetCycles(VOID)
STATIC INLINE UINT32 ArchCurrCpuid(VOID)
@ LOS_MP_IPI_SCHEDULE
!< 唤醒CPU
LITE_OS_SEC_TEXT UINT32 LOS_GetCurrProcessID(VOID)
获取当前进程的进程ID
STATIC INLINE UINT32 OsSchedLockCountGet(VOID)
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdTraceDump(INT32 argc, const CHAR **argv)
STATIC UINT32 OsCreateTraceAgentTask(VOID)
OsCreateTraceAgentTask 创建trace任务
LITE_OS_SEC_BSS STATIC UINT32 g_traceTaskId
TRACE_EVENT_HOOK g_traceEventHook
事件钩子函数
LOS_MODULE_INIT(OsTraceInit, LOS_INIT_LEVEL_KMOD_EXTENDED)
VOID OsTraceHook(UINT32 eventType, UINTPTR identity, const UINTPTR *params, UINT16 paramCount)
OsTraceHook 事件统一处理函数
TRACE_DUMP_HOOK g_traceDumpHook
输出缓冲区数据
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdTraceSetMask(INT32 argc, const CHAR **argv)
通过shell命令 设置事件掩码,仅记录某些模块的事件
LITE_OS_SEC_BSS STATIC TRACE_HWI_FILTER_HOOK g_traceHwiFilterHook
用于跟踪硬中断过滤的钩子函数
LITE_OS_SEC_BSS STATIC UINT32 g_traceEventCount
STATIC VOID OsTraceHookInstall(VOID)
初始化事件处理函数
STATIC BOOL OsTraceCmdIsValid(const TraceClientCmd *msg)
SHELLCMD_ENTRY(tracestart_shellcmd, CMD_TYPE_EX, "trace_start", 0,(CmdCallBackFunc) LOS_TraceStart)
STATIC VOID OsTraceSetFrame(TraceEventFrame *frame, UINT32 eventType, UINTPTR identity, const UINTPTR *params, UINT16 paramCount)
STATIC VOID OsTraceCmdHandle(const TraceClientCmd *msg)
trace任务的入口函数,接收串口数据
LITE_OS_SEC_BSS STATIC enum TraceState g_traceState
LITE_OS_SEC_DATA_INIT STATIC volatile BOOL g_enableTrace
trace开关
LITE_OS_SEC_BSS SPIN_LOCK_INIT(g_traceSpin)
BOOL OsTraceIsEnable(VOID)
VOID OsTraceSetObj(ObjData *obj, const LosTaskCB *tcb)
STATIC_INLINE BOOL OsTraceHwiFilter(UINT32 hwiNum)
LITE_OS_SEC_BSS STATIC UINT32 g_traceMask
全局变量设置事件掩码,仅记录某些模块的事件
STATIC UINT32 OsTraceInit(VOID)
跟踪模块初始化
VOID(* TRACE_EVENT_HOOK)(UINT32 eventType, UINTPTR identity, const UINTPTR *params, UINT16 paramCount)
UINT32 OsTraceBufInit(UINT32 size)
trace离线模式初始化
VOID(* TRACE_DUMP_HOOK)(BOOL toClient)
VOID OsTraceReset(VOID)
重置循环buf
@ TRACE_CMD_SET_EVENT_MASK
OfflineHead * OsTraceRecordGet(VOID)
VOID OsTraceRecordDump(BOOL toClient)
UINT32 OsTraceGetMaskTid(UINT32 taskId)
VOID OsTraceObjAdd(UINT32 eventType, UINT32 taskId)
添加一个任务
VOID OsTraceWriteOrSendEvent(const TraceEventFrame *frame)
离线模式下保存帧数据 @note_thinking 此处未封装好,会懵逼,文件名中体现了对离线模式的保存或对在线模式的发送这样真的好吗? .
CHAR name[LOSCFG_TRACE_OBJ_MAX_NAME_SIZE]
UINT32(* schedParamGet)(const LosTaskCB *taskCB, SchedParam *param)
获取调度参数
CHAR taskName[OS_TCB_NAME_LEN]
UINTPTR params[LOSCFG_TRACE_FRAME_MAX_PARAMS]
UINTPTR linkReg[LOS_TRACE_LR_RECORD]
struct TraceEventFrame::CoreStatus core
TSK_ENTRY_FUNC pfnTaskEntry
VOID OsTraceCnvInit(VOID)
UINT32 OsTraceDataWait(VOID)
UINT32 OsTraceDataRecv(UINT8 *data, UINT32 size, UINT32 timeout)
UINT32 OsTracePipelineInit(VOID)
u32_t(* CmdCallBackFunc)(u32_t argc, const char **argv)