OpenHarmony - 小型体系内核(LiteOS-A)(十)
十四、邪术键使用方法
使用场景
在体系运行出现无响应等环境时,可以通过邪术键功能确定体系是否被锁中断(邪术键也无响应)或者查察体系任务运行状态等信息。
在中断有响应的环境下,可以通过邪术键查察task信息中 cpup(CPU占用率)看是哪个任务长时间占用CPU导致体系其他任务无响应(一样平常为比较高优先级任务不停抢占CPU,导致低优先级任务无响应)。
使用设置
邪术键依赖于宏LOSCFG_ENABLE_MAGICKEY,在kernel/liteos_a中输入make menuconfig下令。此时会弹出设置项,找到Debug选项并进入,在设置项中开启“Enable MAGIC KEY”:
Debug ---> Enable MAGIC KEY;若关闭该选项,则邪术键失效(默以为选中的)。
分析: 可以在menuconfig中,将光标移动到LOSCFG_ENABLE_MAGICKEY上,输入“?”,可以查察资助信息。
使用方法
- 输入“ctrl + r”键,打开邪术键检测功能。
在毗连UART或者USB转假造串口的环境下,输入“ctrl + r” 键,打开邪术键检测功能,输出 “Magic key on”;再输入一次后,则关闭邪术键检测功能,输出“Magic key off”。邪术键功能如下:
- ctrl + z:资助键,输出干系邪术键简单先容;
- ctrl + t:输出任务干系信息;
- ctrl + p:体系主动进入panic,输出panic干系信息后,体系会挂住;
- ctrl + e:体系举行简单完备性内存池查抄,查抄堕落会输出干系错误信息,查抄正常会输出“system memcheck over, all passed!”。
须知: 邪术键检测功能打开环境下,如果需要通过UART或者USB转假造串口输入特殊字符需制止与邪术键值重复,否则邪术键会被误触发,而原有筹划功能大概出现错误。
十五、用户态异常信息分析
用户态在运行过程中,大概由于各种缘故原由出现用户态体系异常,异常信息如下所示:- ##################excFrom: User!####################
- prefetch_abort fault fsr:0x5, far:0x00000000
- Translation fault, section
- excType: prefetch abort
- processName = shell
- processID = 3
- process aspace = 0x01000000 -> 0x3f000000
- taskName = shell
- taskID = 4
- task user stack = 0x3707d000 -> 0x3717d000
- pc = 0x0
- ulr = 0x2000424 in /bin/shell ---> 0x424
- usp = 0x3717cd60fp = 0x3717cd64
- R0 = 0x1
- R1 = 0x0
- R2 = 0x0
- R3 = 0x1
- R4 = 0x3717cf58
- R5 = 0x0
- R6 = 0x3717cf54
- R7 = 0x200043c
- R8 = 0x84
- R9 = 0x229a7560
- R10 = 0x0
- R11 = 0x3717cd64
- R12 = 0x0
- CPSR = 0x40000030
- ***backtrace begin***
- traceback 0 -- lr = 0x229123a4 fp = 0x0 lr in /lib/libc.so --> 0x213a4
- PID PPID PGID UID Status CPUUSE CPUUSE10s CPUUSE1s Policy Priority MTID TaskTotal Mode PName
- 1 -1 1 0 Ready 0.0 0.0 0.0 RR 28 16 1 user init
- 2 -1 2 0 Pend 10.1 10.1 0.0 RR 0 0 14 kernel KProcess
- 3 1 3 0 Running 0.0 0.0 0.0 RR 28 4 1 user shell
- TID PID Status StackSize WaterLine Policy Priority MEMUSE TaskName
- 16 1 Ready 0x3000 0x978 RR 31 0x8b0c init
- 0 2 Pend 0x1000 0x1d4 RR 5 0 ResourcesTask
- 2 2 Pend 0x4000 0x4ec RR 0 0 Swt_Task
- 3 2 Pend 0x4000 0x1d4 RR 1 0 system_wq
- 5 2 Pend 0x4000 0x1fc RR 9 0 SendToSer
- 6 2 PendTime 0x6000 0x204 RR 5 0 tcpip_thread
- 7 2 Pend 0x3000 0x1fc RR 5 0 sdmci_detect
- 8 2 Pend 0x4000 0x204 RR 5 0 USB_GIANT_Task
- 9 2 Pend 0x4000 0x204 RR 1 0 USB_NGIAN_ISOC_Task
- 10 2 Pend 0x4000 0x204 RR 2 0 USB_NGIAN_BULK_Task
- 11 2 Pend 0x4000 0x690 RR 5 0xbb0 USB_EXPLR_Task
- 12 2 Pend 0x4000 0x204 RR 5 0 USB_CXFER_Task
- 13 2 Pend 0x20000 0x1e4 RR 3 0xac20 eth_irq_Task
- 14 2 Pend 0x4000 0x1d4 RR 10 0 jffs2_gc_thread
- 15 2 Pend 0x2000 0x1f4 RR 4 0 hisi_frw
- 4 3 Running 0x3000 0x838 RR 31 0x1100 shell
- system memcheck over, all passed!
复制代码 此中,主要包罗如下几方面信息:
- 用户态异常根本信息:
- prefetch_abort fault fsr:0x5, far:0x00000000
- Translation fault, section
- excType: prefetch abort
- processName = shell
- processID = 3
- process aspace = 0x01000000 -> 0x3f000000
- taskName = shell
- taskID = 4
- task user stack = 0x3707d000 -> 0x3717d000
复制代码 - 寄存器干系信息。
- pc = 0x0
- ulr = 0x2000424 in /bin/shell ---> 0x424
- usp = 0x3717cd60fp = 0x3717cd64
- R0 = 0x1
- R1 = 0x0
- R2 = 0x0
- R3 = 0x1
- R4 = 0x3717cf58
- R5 = 0x0
- R6 = 0x3717cf54
- R7 = 0x200043c
- R8 = 0x84
- R9 = 0x229a7560
- R10 = 0x0
- R11 = 0x3717cd64
- R12 = 0x0
- CPSR = 0x40000030
复制代码 - 调用栈信息。
- ***backtrace begin***
- traceback 0 -- lr = 0x229123a4 fp = 0x0 lr in /lib/libc.so --> 0x213a4
复制代码 - 进程线程根本信息。
- PID PPID PGID UID Status CPUUSE CPUUSE10s CPUUSE1s Policy Priority MTID TaskTotal Mode PName
- 1 -1 1 0 Ready 0.0 0.0 0.0 RR 28 16 1 user init
- 2 -1 2 0 Pend 10.1 10.1 0.0 RR 0 0 14 kernel KProcess
- 3 1 3 0 Running 0.0 0.0 0.0 RR 28 4 1 user shell
- TID PID Status StackSize WaterLine Policy Priority MEMUSE TaskName
- 16 1 Ready 0x3000 0x978 RR 31 0x8b0c init
- 0 2 Pend 0x1000 0x1d4 RR 5 0 ResourcesTask
- 2 2 Pend 0x4000 0x4ec RR 0 0 Swt_Task
- 3 2 Pend 0x4000 0x1d4 RR 1 0 system_wq
- 5 2 Pend 0x4000 0x1fc RR 9 0 SendToSer
- 6 2 PendTime 0x6000 0x204 RR 5 0 tcpip_thread
- 7 2 Pend 0x3000 0x1fc RR 5 0 sdmci_detect
- 8 2 Pend 0x4000 0x204 RR 5 0 USB_GIANT_Task
- 9 2 Pend 0x4000 0x204 RR 1 0 USB_NGIAN_ISOC_Task
- 10 2 Pend 0x4000 0x204 RR 2 0 USB_NGIAN_BULK_Task
- 11 2 Pend 0x4000 0x690 RR 5 0xbb0 USB_EXPLR_Task
- 12 2 Pend 0x4000 0x204 RR 5 0 USB_CXFER_Task
- 13 2 Pend 0x20000 0x1e4 RR 3 0xac20 eth_irq_Task
- 14 2 Pend 0x4000 0x1d4 RR 10 0 jffs2_gc_thread
- 15 2 Pend 0x2000 0x1f4 RR 4 0 hisi_frw
- 4 3 Running 0x3000 0x838 RR 31 0x1100 shell
- system memcheck over, all passed!
复制代码 可以根据以上信息,分析用户态异常的具体缘故原由。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|