免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1660 | 回复: 4

[硬件及驱动] 想在嵌入式装置里作一个黑匣子 [复制链接]

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
发表于 2012-04-30 09:10 |显示全部楼层
本帖最后由 linuxfellow 于 2012-04-30 09:16 编辑

嵌入式系统里如何处理警告信息?好像好多系统都是接着运行直到oops, 有问题后头疼好几天来找原因,尤其是那些从用户返回有“reset"问题的板子,一点头绪都没有。领导还会站你后面看着你查错,那感觉真不是滋味。

突然想起波音的飞机都有黑匣子,于是想在嵌入式装置里也设计一个。
先要把系统的警告(alarm)给分类:
critical
major
minor
debug_info

再定义一个黑匣子, 在系统的永久信息保存区申请256bytes
在这个黑匣子里倒序放上4~5条critical alarms。
这样每次产品从用户回来时,首先读黑匣子, 希望这个黑匣子能给我足够的信息去找到问题的根源。

黑匣子里的信息很重要,每条信息必须小,信息要丰富,至少让你知道从那里下手排查。
现在能想到的有下面几项

进程id,
正在执行的函数,
PC 寄存器
当前函数返回地址(LR继承器 powerpc)
含有exception info的寄存器(ESR in powerpc)

这样,就可以大概知道这些critical alarm在什么情况下发生的。

我还有点犹豫, 关键是如何把这瓜卖出去。希望它真正有用,不影响系统性能。而且不停往NVM里写内容本省就容易出问题。

先拿到在这里show一下,大家看我这瓜会有市场吗?

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
发表于 2012-04-30 11:26 |显示全部楼层
kdump能满足要求么?

不过我是觉得kdump比较麻烦的,而且支持的体系有限。

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
发表于 2012-05-01 07:51 |显示全部楼层
回复 2# tempname2

想多得到几个点的信息,core dump只给last minute snapshot
自己实现core dump有点麻烦,主要是拿到全部的stack frame有点罗嗦。用当前pc,和返回register可以明白谁调用谁了。
   

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-05-02 14:18 |显示全部楼层
内存设置单独的段落出来操作(E820中不是usable),只要不掉电,信息始终在,可以选择在系统启动后导出一次到硬盘等非易失介质上

发生严重问题时,直接写到这个黑匣子里面,oops了上电回来读出来保存,至于需要什么内容,完全看你结构体怎么规划了

从用户手上拿回来,肯定是掉电了的,不过信息已经保存到介质上了

论坛徽章:
0
发表于 2012-05-02 15:19 |显示全部楼层
本帖最后由 frank529 于 2012-05-02 15:22 编辑

回复 1# linuxfellow


    用__backtrace()可以打印出栈内函数的调用关系,比打印PC寄存器的值有效,你怎么肯定PC寄存器的值正好是在出错的地方?还有打印进程名也比进程ID有效,只有ID系统重启了你怎么知道是哪个进程?__backtrace函数是汇编写的,不太明白它是怎么把打印信息输出的,应该是把打印信息放到printk的打印缓冲,由printk打印。你可以在die函数dump_backtrace后把printk缓冲区的内容存放到NVM,这样就不会对NVM频繁操作了,你的系统总不可能频繁Oops吧。这种办法对解决Oops有点用,它一般是内核空间踩到非法内存导致的,进程应该不太容易使系统Oops,而且有时候系统挂也不一定会Oops,应用场景还是有些局限。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP