当前位置:首页 > 探索 > 科学

F88体育_【干货】Linux编程时遇到“Oops”提示该如何排查?

2021-09-05 23:47:02
本文摘要:诸位技术工程师在Linux下产品研发程序流程时,是否遇到因为系统软件中不会有一些小常见故障而跑出了“Oops”提醒的状况,这时你是怎样清查常见故障?

诸位技术工程师在Linux下产品研发程序流程时,是否遇到因为系统软件中不会有一些小常见故障而跑出了“Oops”提醒的状况,这时你是怎样清查常见故障?一行行的查看编码吗?只不过是无须这么简单,文中将给你解读一种高效率的Linux程序编写的常见故障逃避方式。在剖析Oops以前,大家再作看来下列那么一个事例,用以GPIO的终断保证断电检验,参考《嵌入式Linux研发教程下卷》的驱动器架构,设计方案以下程序框图:这一架构设计方案之初的理想化步骤为:运用于起动->程序流程复位->运用于open机器设备->等待终断恶性事件,但具体新项目产品研发时,通常再次出现许多不可以预测分析的事儿。

荐个实例:小赵已经调Qt运用于,寻找老孙的过程李家在复印机,那么就不愿老孙的过程开机自启动,徵了两三天后,不指定地提醒个Oops提醒,小赵依照“之前编码不经常会出现,添加的经常会出现,那麼原因意味著在新的编码内”的思维定势,强调是添加的Qt导致的,随后小赵就大大的检测,大大的查看bug中.......那样就过去十年。但缘故只不过小赵没open机器设备,即驱动器层没复位计时器序列,那麼终断处理函数中五十米s启动的序列就为一个空值,空指针时Linux内核自然“哎呀”一下警示你呢,而不指定地提醒只不过是便是由于开关电源不指定地开裂,gpio检验到断电了因此 启动了终断。

F88体育APP

F88体育官方网站

本质上,那样的实例十分罕见,本来要想A->B->C,具体用以是A->D->C,又或是驱动器中有某一自变量还记得复位这些,这时候剖析Oops就可以十分比较慢地解决困难。那接下去大家就用Linux中规范驱动器去启动一个Oops,对的你没有看错,Linux内核规范源代码也不会有那样的发现异常,并且大家还可以去整修那样的难题。用以EasyARM-iMX283单片机开发板,内核源代码为光碟内的Linux-2.6.35.3.tar.bz2,c语言编译器方式要求参考光碟材料,大家务必把lcd的led背光驱动器修改为ko方式。

封裝完新内核,载入新的c语言编译器出去的drivers/video/backlight/mxs_bl.ko文档就不容易提醒下列Oops信息:乍看之下,这一段信息跟错码类似,但如果你一层层地剖析,你也就不容易寻找,这种信息早就对他说了大家错误的缘故。接下去就刚开始大家的Oops剖析之行。1关键错误信息用作提醒错误的种类,这儿答复用以空指针。

2作业者通道用作提醒错误的作业者,这儿答复载入mxs_bl控制模块时错误,相匹配于载入作业者insmodmxs_bl.ko。3PC指针用作提醒错误时的PC指针方向,PC指针即当今程序执行点的详细地址,这儿提醒答复错误涵数为regulator_set_current_limit,偏移详细地址为0xc。4LR指针用作提醒错误时的LR指针方向,LR指针即启用子函数的上一个涵数名及其通道偏移,这儿答复上一个涵数为set_bl_intensity,偏移详细地址为0xd8。即set_bl_intensity启用regulator_set_current_limit时错误。

5存储器值用作纪录错误时每个存储器的值,针对编写比较熟识的技术工程师能够科学研究一下这一段信息。6错误过程信息用作提醒错误的过程id号与过程名字。错误过程为insmod,PID号2261,针对多个任务系统软件中,有可能不会有好几个PID启用同一个控制模块的状况。

F88体育

7错误时的局部变量信息用作提醒错误时局部变量内存留的存储器信息,当程序流程因为终断再次出现或汇编程序启用时,不容易执行压栈作业者,即将经营自然环境存留到局部变量内,保证 散伙终断或跑出汇编程序后,经营自然环境不再次出现变化。而这里的局部变量信息即纪录了程序执行时的自然环境信息。

借此机会我们可以找寻很多LR详细地址,进而剖析出有调用函数关联,与下一段的信息有类似具有。8涵数执行的追朔关联用作答复涵数的启用关联,根据这一段信息我们可以告知,涵数的全部执行步骤,告知它的调用函数关联,最终分类整理的涵数执行步骤以下:借此机会大家看到了熟识的init涵数、probe函数、及其准确probe函数下执行的操作流程是到哪一步错误的。如今大家告知了编码的执行步骤,错误的PC指针的方向,但還是见到编码,错误指针处大家只看到了一串数据,那麼接下去大家就作业者一下,把pc指针的数据信息变为更有意义的编码。

F88体育APP

第一步鉴别出有错误编码在什么方向此次试验涉及的二进制文件有内核的封裝固定件及其驱动器的ko文档,因此 第一步剖析就务必确定错误编码是在内核固定件里還是ko文档里。最先得到 内核编码的范畴,用下列指令将内核反编译。查看这一文件的格式以下:第一列个数,第二列经营详细地址,第三列二进制码,第四佩编写编码,即然第二纳入经营详细地址,即相当于程序执行到这行后,pc指针的值相同这一标值。

那样要是阅览这一文档的头顶部及其尾端,就能告知内核编码的PC指针范畴为:c0008000~c0562338。依据前边第5步存储器值,错误时PC指针为c02f1878,即在内核源代码范畴内。


本文关键词:F88体育,F88体育APP,F88体育官方网站

本文来源:F88体育-www.pkgme.com

热门推荐