当前位置: 首页 > news >正文

OpenHarmony - 小型系统内核(LiteOS-A)(十),魔法键使用方法,用户态异常信息说明

OpenHarmony - 小型系统内核(LiteOS-A)(十)


十四、魔法键使用方法

使用场景

在系统运行出现无响应等情况时,可以通过魔法键功能确定系统是否被锁中断(魔法键也无响应)或者查看系统任务运行状态等信息。

在中断有响应的情况下,可以通过魔法键查看task信息中 cpup(CPU占用率)看是哪个任务长时间占用CPU导致系统其他任务无响应(一般为比较高优先级任务一直抢占CPU,导致低优先级任务无响应)。

使用配置

魔法键依赖于宏LOSCFG_ENABLE_MAGICKEY,在kernel/liteos_a中输入make menuconfig命令。此时会弹出配置项,找到Debug选项并进入,在配置项中开启“Enable MAGIC KEY”:

Debug ---> Enable MAGIC KEY;若关闭该选项,则魔法键失效(默认为选中的)。

icon-note.gif

说明: 可以在menuconfig中,将光标移动到LOSCFG_ENABLE_MAGICKEY上,输入“?”,可以查看帮助信息。

使用方法

  1. 输入“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 --> 0x213a4PID  PPID PGID       UID  Status CPUUSE CPUUSE10s CPUUSE1s Policy Priority MTID TaskTotal   Mode  PName1    -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  TaskName16    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!

其中,主要包含如下几方面信息:

  1. 用户态异常基本信息:

    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
    
  2. 寄存器相关信息。

    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
    
  3. 调用栈信息。

    ***backtrace begin***
    traceback 0 -- lr = 0x229123a4    fp = 0x0 lr in /lib/libc.so --> 0x213a4
    
  4. 进程线程基本信息。

      PID  PPID PGID       UID  Status CPUUSE CPUUSE10s CPUUSE1s Policy Priority MTID TaskTotal   Mode  PName1    -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  TaskName16    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!
    

    可以根据以上信息,分析用户态异常的具体原因。

相关文章:

  • git版本回退 | 远程仓库的回退 (附实战Demo)
  • 从零开始掌握Linux数据流:管道与重定向完全指南
  • 支持Function Call的本地ollama模型对比评测-》开发代理agent
  • 工业排风轴流风机:强劲动力与节能设计的完美融合
  • websheet 之 VUE使用
  • 基于 Netmiko 的网络设备自动化操作
  • 【器件专题1——IGBT第2讲】IGBT 基本工作原理:从结构到特性,一文解析 “电力电子心脏” 的核心机制
  • 人工智能与机器学习:Python从零实现性回归模型
  • react和vue的区别之一
  • 【Mybatis】MyBatisPlus的saveBatch真的是批量插入吗?深度解析与性能优化
  • 全球玻璃纸市场深度洞察:环保浪潮下的材料革命与产业重构(2025-2031)
  • 算法 | 基于SSA-CNN-LSTM(麻雀算法优化卷积长短期记忆神经网络)的股票价格预测(附完整matlab代码,公式,原理,可用于毕业论文设计)
  • 【持续更新】 CDC 跨时钟域处理
  • 解读《数据资产质量评估实施规则》:企业数据资产认证落地的关键指南
  • 数据挖掘技术与应用课程论文——数据挖掘中的聚类分析方法及其应用研究
  • 从原生检索到异构图:Native RAG、GraphRAG 与 NodeRAG 架构全景解析
  • 高效使用DeepSeek对“情境+ 对象 +问题“型课题进行开题!
  • JavaScript学习教程,从入门到精通,Ajax数据交换格式与跨域处理(26)
  • PubMed PDF下载 cloudpmc-viewer-pow逆向
  • 深入了解C# List集合及两种常见排序算法:插入排序与堆排序
  • 大家聊中国式现代化|邓智团:践行人民城市理念,开创人民城市建设新局面
  • 四川:全省统一取消普通住宅和非普通住宅标准
  • 铜钴巨头洛阳钼业一季度净利润同比大增九成,最新宣布首度进军黄金矿产
  • 亚振家居控制权将变更:济南域潇集团实控人成新控股股东
  • 铁线礁、牛轭礁珊瑚礁“体检”报告首次发布,专家:菲非法活动产生胁迫性影响
  • 预热苏杯,“谁羽争锋”全国新闻界羽毛球团体邀请赛厦门开赛