Liunx驱动死机,经常运行一段时间,报错重启问题 5C

驱动程序运行一段时间之后,就容易报这种错误重启。
[ 122.377666] Unable to handle kernel paging request at virtual address 4d118106
[ 122.384417] pgd = d497c000
[ 122.387603] [4d118106] *pgd=00000000
[ 122.391150] Internal error: Oops: 5 [#1] PREEMPT SMP
[ 122.395520] Modules linked in:
[ 122.398560] CPU: 3 Not tainted (3.0.15 #4)
[ 122.402994] PC is at anon_vma_clone+0x58/0x168
[ 122.407413] LR is at anon_vma_clone+0x4c/0x168
[ 122.411841] pc : [] lr : [] psr: a0000053
[ 122.411844] sp : d490be30 ip : c004130c fp : d490be64
[ 122.423296] r10: d6097690 r9 : c09b2940 r8 : 4d118102
[ 122.428505] r7 : d3afebb0 r6 : d6097690 r5 : d6097690 r4 : d3db3000
[ 122.435014] r3 : 00000000 r2 : c08f28f0 r1 : 00000001 r0 : d3db3000
[ 122.441526] Flags: NzCv IRQs on FIQs off Mode SVC_32 ISA ARM Segment user
[ 122.448729] Control: 10c5387d Table: 5497c04a DAC: 00000015
[ 122.454457]
[ 122.454459] PC: 0xc01009e0:
[ 122.458710] 09e0 eb12abc0 eaffffac e3060f80 e3a010d6 e34c0086 ebfe02cd e3a03001 e51bc038
[ 122.466869] 0a00 e5cc3008 eafffff4 e1a0c00d e92ddff0 e24cb004 e24dd00c e2812038 e1a07000
[ 122.475028] 0a20 e50b2030 e591803c e1580002 e2488008 0a00002e e3029940 e2803038 e34c909b
[ 122.483187] 0a40 e50b3034 e3a06000 e5990000 e3a01c02 eb0023c4 e2504000 0a000026 e1a0a006
[ 122.491346] 0a60 e5985004 e5956000 e15a0006 0a000003 e35a0000 1a00002a e2860004 eb12ac2a
[ 122.499506] 0a80 e5847000 e5845004 e2852020 e597e038 e284c008 e584e008 e58ec004 e587c038
[ 122.507665] 0aa0 e5842010 e2840010 e51b1034 e584100c e5953024 e5850024 e5830000 e5843014
[ 122.515824] 0ac0 e598e00c e51b2030 e24e8008 e15e0002 1affffdc e3560000 0a000004 e2860004
[ 122.523984]
[ 122.523985] LR: 0xc01009d4:
[ 122.528236] 09d4 e3500001 1a000002 e2880004 eb12abc0 eaffffac e3060f80 e3a010d6 e34c0086
[ 122.536395] 09f4 ebfe02cd e3a03001 e51bc038 e5cc3008 eafffff4 e1a0c00d e92ddff0 e24cb004
[ 122.544555] 0a14 e24dd00c e2812038 e1a07000 e50b2030 e591803c e1580002 e2488008 0a00002e
[ 122.552714] 0a34 e3029940 e2803038 e34c909b e50b3034 e3a06000 e5990000 e3a01c02 eb0023c4
[ 122.560873] 0a54 e2504000 0a000026 e1a0a006 e5985004 e5956000 e15a0006 0a000003 e35a0000
[ 122.569032] 0a74 1a00002a e2860004 eb12ac2a e5847000 e5845004 e2852020 e597e038 e284c008
[ 122.577192] 0a94 e584e008 e58ec004 e587c038 e5842010 e2840010 e51b1034 e584100c e5953024
[ 122.585351] 0ab4 e5850024 e5830000 e5843014 e598e00c e51b2030 e24e8008 e15e0002 1affffdc
[ 122.593511]
[ 122.593512] SP: 0xd490bdb0:
[ 122.597763] bdb0 40029000 00000008 d490be44 d490bdc8 c00f7280 c05aaf80 ffffffff d490be1c
[ 122.605922] bdd0 d6097690 d3afebb0 d490be64 d490bde8 c00462ec c003f52c d3db3000 00000001
[ 122.614082] bdf0 c08f28f0 00000000 d3db3000 d6097690 d6097690 d3afebb0 4d118102 c09b2940
[ 122.622241] be10 d6097690 d490be64 c004130c d490be30 c0100a54 c0100a60 a0000053 ffffffff
[ 122.630400] be30 d3afebe8 d67e4fb0 c00fa9d8 d67e4f78 d3afebb0 d3afe160 d67e4f78 00000033
[ 122.638559] be50 c098a440 d3afe17c d490be8c d490be68 c0100b9c c0100a14 d48e0a6c d3afebb0
[ 122.646718] be70 d08abd40 d3afe160 d67e4f78 00000033 d490bee4 d490be90 c007f8e8 c0100b7c
[ 122.654878] be90 d490beac d490bea0 c05ad964 d08abd7c d490c37c d490a000 c098a440 d490c340
[ 122.663037]
[ 122.663039] IP: 0xc004128c:
[ 122.667290] 128c e08c4003 e51b0038 e51b103c e2808801 e1510008 2affffca e1a0c009 e1a0000c
[ 122.675449] 12ac e24bd028 e89daff0 e7e02b50 e2008a0f e18285a8 eaffff80 e0848005 e2084007
[ 122.683608] 12cc e0844002 eaffff9e e084e005 e20e4007 e0844003 eaffffb4 e51b1030 e2013807
[ 122.691768] 12ec e50b303c e5992000 e3520000 1affff7b e3e0c000 eaffffe8 e59f1008 e081918a
[ 122.699927] 130c eaffff67 c08fae8c c08fad8c e1a0c00d e92dd830 e24cb004 e1a04002 e1a05001
[ 122.708086] 132c ebfffd9f e7e72bd4 e1a03000 e35200ff 0a00001a e3a00000 e7e7cbd3 e35c00ff
[ 122.716245] 134c 0a000022 e3500000 189da830 e1530004 0a000029 e183c004 e3cc1102 e3510000
[ 122.724404] 136c 0a000025 e1330004 4a000025 e1530004 a3a0e000 b3a0e001 e1a02fa3 e152000e
[ 122.732564]
在网上也查了很多资料,有些认为是驱动程序存在非法变量,可是我检查了好多遍,并没有出现自己的驱动程序中有非法变量这一问题,而且导致出问题的函数,也并未显示驱动程序中的函数。由于我的驱动程序里面包含有,等待队列、中断函数。我开始以为是不是因为中断或者是等待队列原因导致的,但是目前也不敢准确说明是这个原因,请各位Linux驱动大神教教我,这种问题要怎么解决啊?

3个回答

先确定是哪个驱动,然后让这个驱动的工程师去分析具体的原因。

遇到非法地址访问了 ,通过map文件确定当前的cpu运行在那个驱动里面就能知道是哪里出错了

Hi friend,
你这个问题是否已解决?如果没解决。
不知道你有没有百度“Internal error: Oops: 5 [#1] PREEMPT SMP”,有篇博文有详细说明出现这个问题的debug过程。你也可先在你的项目中全局搜索,是否有个这函数“anon_vma_clone”,查看下是否存在非法调用导致内存的不够。
对你遇到的问题我比较感兴趣,所以如果我的回答对你有帮助,烦请给我个回馈。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问