现在的位置: 首页 > 综合 > 正文

【已解决】external abort on non-linefet

2012年09月09日 ⁄ 综合 ⁄ 共 2158字 ⁄ 字号 评论关闭

自己在驱动中将定时器timer2物理地址转化为虚拟地址之后访问会出现以下错误:

 

[root@lpc3250 tmp]# insmod timer2.ko
timer_test init...
Unhandled fault: external abort on non-linefetch
(0x808) at 0xf4058004
Internal error: : 808 [#1] PREEMPT
Modules linked in: timer2(+) iso7816 nfs lockd sunrpc unix [last unloaded: timer
2]
CPU: 0    Not tainted  (2.6.27.8 #400)
PC is at timer_init+0x30/0xcc [timer2]
LR is at release_console_sem+0x20c/0x248
pc : [<bf078030>]    lr : [<c003a4ec>]    psr: 60000013
sp : c3ab9ee8  ip : c3ab9e18  fp : c3ab9f04
r10: 00900071  r9 : c3ab8000  r8 : 00000000
r7 : 00000000  r6 : f4058000  r5 : bf0763e0  r4 : f4004000
r3 : 00000002  r2 : 00000000  r1 : 0000192a  r0 : 00000016
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 0005b17f  Table: 83b4c000  DAC: 00000015
Process insmod (pid: 367, stack limit = 0xc3ab8268)
Stack: (0xc3ab9ee8 to 0xc3aba000)
9ee0:                   00000008 00000c06 bf0763e0 bf078000 c3ab9f7c c3ab9f08
9f00: c001c2d8 bf078010 00000023 00000023 c387e6c0 bf076428 bf0762dc c493c84c
9f20: bf0763ec 00000014 c493c874 c020e74c 00000000 00000000 00000000 00000000
9f40: 00000000 00000c06 bf0763e0 00136148 00000000 c001d56c c3ab9f7c 00000c06
9f60: bf0763e0 00136148 00000000 c001d56c c3ab9fa4 c3ab9f80 c005e310 c001c298
9f80: c3ab9fa4 c3ab9f90 00000000 00000000 00000000 00000080 00000000 c3ab9fa8
9fa0: c001cd40 c005e288 00000000 00000000 00900080 00136148 00000c06 00135f78
9fc0: 00000000 00000000 00000000 00135f78 00135f68 0011e265 0011bf51 bef50e84
9fe0: bef509b4 bef509a8 000173d8 00008f20 a0000010 00900080 00004d60 00000000
Backtrace:
[<bf078000>] (timer_init+0x0/0xcc [timer2]) from [<c001c2d8>] (do_one_initcall+0
x50/0x180)
 r6:bf078000 r5:bf0763e0 r4:00000c06
[<c001c288>] (do_one_initcall+0x0/0x180) from [<c005e310>] (sys_init_module+0x98
/0x188)
 r8:c001d56c r7:00000000 r6:00136148 r5:bf0763e0 r4:00000c06
[<c005e278>] (sys_init_module+0x0/0x188) from [<c001cd40>] (ret_fast_syscall+0x0
/0x2c)
 r7:00000080 r6:00000000 r5:00000000 r4:00000000
Code: e59f6090 e3c33010 e58430c0 e3a03002 (e5863004)
---[ end trace 93626b9bcef0bd2d ]---
Segmentation fault

 

看了一下网上,很多这类错误。没有一个明确的解决方法。总之是MMU相关的错误。

最后问了一下炳哥,原来是要先在arm的功率管理模块打开timer2的电源使能,使之能够工作。

本来默认timer2是开机不工作的,这样可以节省电源。timer2没有开通电源,因此访问他的寄存器会失败,报non-linefetch 的错误。

 

============================================
作者:yuanlulu

http://blog.csdn.net/yuanlulu

版权没有,但是转载请保留此段声明
============================================

 

【上篇】
【下篇】

抱歉!评论已关闭.