当前位置: 技术问答>linux和unix
[讨论贴]板子跑了一段时间后出错了,该怎么办
来源: 互联网 发布时间:2016-10-01
本文导语: 板子刚开始跑得都很正常的,LINUX系统,3个小时后出错了,一堆数字(应该是内存地址),我应该从哪下手找错误呢? 各位朋友给我点指点啊,大家讨论下 | 贴出错误信息来看看。 有问题就解决问题...
板子刚开始跑得都很正常的,LINUX系统,3个小时后出错了,一堆数字(应该是内存地址),我应该从哪下手找错误呢? 各位朋友给我点指点啊,大家讨论下
|
贴出错误信息来看看。
有问题就解决问题!
有问题就解决问题!
|
Unable to handle kernel paging request at virtual address 100e1017
内存访问出问题的,似乎是ext3文件系统,你有改过?
没有改过的话,似乎是内存越界访问。
内存访问出问题的,似乎是ext3文件系统,你有改过?
没有改过的话,似乎是内存越界访问。
|
同意一下。哈哈。。
内存越界或者野指针的debug比较麻烦。只能大概给出点方法。
首先要确定一下罪犯在那个模块,或者大概确定是哪些代码(你的驱动?你修改过的内核?)。
1.在你改动过或者自己写的内核代码中,检查数组访问有没有越界。
2.如果是指针的问题会相当麻烦。办法不是没有,能改写kmalloc和kfree来做一些检查,算法比较复杂,但也不是万能,只能检查出overflow和underflow,对野指针暂时无能为力。
3.最后不行就人工把代码读n遍。或者干脆重写可疑代码来看看哪里出的问题。
|
都拿几个板子测试你的程序,若只有这个板子出错,那极可能是板子的硬件问题。
要确认是板子的问题,用一个板子厂商的大型程序来跑,跑几天看会不会死掉。
|
编一个PC版本,调试就方便多了。一般来说同步编一个PC版本是必须的。
|
代码本身也有可能,要是有内存泄露的话,长时间运行就会导致虚存以及可用的物理内存越来越少!
|
内核打印的Oops信息
程序死在函数at start_this_handle中,这个函数是驱动的函数?还是内核的函数。
你的程序死过几次?每次都有如下行吗?
PC is at start_this_handle+0x214/0x490
建议你重点查查所用的驱动
程序死在函数at start_this_handle中,这个函数是驱动的函数?还是内核的函数。
你的程序死过几次?每次都有如下行吗?
PC is at start_this_handle+0x214/0x490
建议你重点查查所用的驱动
|
软件与硬件都有要排除。
若你的软件在别的板子上跑没错,那就是你的板子的 RAM 品质不行。
若你的软件在别的板子上跑没错,那就是你的板子的 RAM 品质不行。
|
驱动里没有的话,那估计就是内核里的函数了。