kernel paging request at virtual address e6f4b4d0"/>
Unable to handle kernel paging request at virtual address e6f4b4d0
调试tiny4412LCD屏幕的时候,驱动加载的时候会挂掉。对寄存器ioremap的时候没有出错,但是访问寄存器的时候出错了。
[ 187.030282] Unable to handle kernel paging request at virtual address e6f4b4d0
[ 187.034416] pgd = dedc0000
[ 187.037145] [e6f4b4d0] *pgd=5f2d0811, *pte=00000000, *ppte=00000000
[ 187.043359] Internal error: Oops: 7 [#1] PREEMPT SMP
[ 187.048304] Modules linked in: tiny4412_fb(+) compat snd_soc_tiny4412_wm8960 snd_soc_wm8960
[ 187.056638] CPU: 0 Not tainted (3.0.86-FriendlyARM #53)
[ 187.062198] PC is at lcd_init+0x1b8/0x564 [tiny4412_fb]
[ 187.067405] LR is at l2x0_cache_sync+0x38/0x3c
[ 187.071828] pc : [<bf0053dc>] lr : [<c0055e80>] psr: 600b0013
[ 187.071831] sp : df345e90 ip : df345e78 fp : df345eac
[ 187.083284] r10: 0000001c r9 : c00bcbcc r8 : bf005224
[ 187.088492] r7 : 00000320 r6 : 00000001 r5 : c09048cc r4 : bf005b0c
[ 187.095002] r3 : e6f4b4c0 r2 : 00000000 r1 : a00b0013 r0 : c09a2338
[ 187.101513] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
[ 187.108631] Control: 10c5387d Table: 5edc004a DAC: 00000015
[ 187.114359]
[ 187.114361] LR: 0xc0055e00:
[ 187.118611] 5e00 e59f0008 eb18e751 e89da818 c09a2330 c09a2338 e1a0c00d e92dd830 e24cb004
[ 187.126770] 5e20 e59f401c e1a00004 eb18e814 e1a05000 ebffffc2 e1a00004 e1a01005 eb18e743
[ 187.134929] 5e40 e89da830 c09a2338 e1a0c00d e92dd830 e24cb004 e3024330 e34c409a e2845008
[ 187.143088] 5e60 e1a00005 eb18e805 e5943000 e3a02000 e1a01000 e5832730 e1a00005 eb18e733
[ 187.151247] 5e80 e89da830 e1a0c00d e92dd878 e24cb004 e59f60a0 e0602001 e5963010 e1a04000
[ 187.159407] 5ea0 e1520003 e1a05001 2a000020 e2860008 eb18e7f2 e3c4401f e1a01000 e1550004
[ 187.167566] 5ec0 9a000014 e0643005 e3530a01 90843003 82843a01 e1530004 9a000005 e5962000
[ 187.175725] 5ee0 e2822e7f e5824000 e2844020 e1530004 8afffffb e1550003 9affffef e59f0038
[ 187.183885]
[ 187.183887] SP: 0xdf345e10:
[ 187.188138] 5e10 00000000 e6f4a000 1003c000 c090da80 c00bcbcc 0000040f 00000007 00000001
[ 187.196297] 5e30 00000320 bf005224 df345eac df345e48 c0048210 c0042510 c09a2338 a00b0013
[ 187.204456] 5e50 00000000 e6f4b4c0 bf005b0c c09048cc 00000001 00000320 bf005224 c00bcbcc
[ 187.212615] 5e70 0000001c df345eac df345e78 df345e90 c0055e80 bf0053dc 600b0013 ffffffff
[ 187.220774] 5e90 bf005a10 c09a1f00 df344000 00000000 df345eec df345eb0 c0042808 bf005230
[ 187.228934] 5eb0 00000000 df345ec0 bf005a10 bf0059c8 00000001 ded2f0c0 bf005a10 bf0059c8
[ 187.237093] 5ed0 00000001 ded2f0c0 00000001 0000001c df345fa4 df345ef0 c00be284 c00427dc
[ 187.245252] 5ef0 bf0059d4 c015e9f4 c00bccf4 00000000 be988594 e6f21f80 df344000 c0904988
原因是访问超出了ioremap的界限。
#define CLK_DIV_LCD 0x534static volatile unsigned long *clk_regs_base;clk_regs_base = ioremap(CLK_REGS_BASE, 0x1000);if (clk_regs_base == NULL){printk("ioremap clk_regs_base error\n");return -EINVAL;}temp = readl(clk_regs_base + CLK_DIV_LCD); //出错位置temp &= ~0x0f;writel(temp, clk_regs_base + CLK_DIV_LCD);
指针加1,等于地址加4,所有这里访问越界了,需要将CLK_DIV_LCD的值除以4,才是正确的访问地址。
更多推荐
Unable to handle kernel paging request at virtual address e6f4b4d0
发布评论