`
isiqi
  • 浏览: 16071858 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

【已解决】external abort on non-linefet

阅读更多

自己在驱动中将定时器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 的错误。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics