主题 : 4412的3.5内核是不是有内存指针保护限制?我的驱动无法正常工作。 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 11651
精华: 0
发帖: 38
金钱: 190 两
威望: 38 点
贡献值: 0 点
综合积分: 76 分
注册时间: 2009-12-15
最后登录: 2015-11-23
楼主  发表于: 2014-10-16 09:27

 4412的3.5内核是不是有内存指针保护限制?我的驱动无法正常工作。

我在做4412的硬件图像旋转驱动时,发现3.5内核存在内存保护现象。在6410上正常运行的操作和程序,4412上报指针错误,无法操作内存。包括:
a. shell命令中的dd指令,只要和显存一挂钩,马上报错。
   按6410的用法用命令: #dd if=/dev/fb0 of=fbfile 可以将fb中的内容保存下来; 但在4412中一运行该指令,就马上报错:
Unable to handle kernel paging request at virtual address f0049000
[   39.885000] pgd = ec7c8000
[   39.885000] [f0049000] *pgd=6d02a811, *pte=00000000, *ppte=00000000
[   39.885000] Internal error: Oops: 7 [#1] PREEMPT SMP ARM
[   39.885000] Modules linked in: libertas_sdio(O) libertas(O) zd1211rw(O) rt2800usb(O) rt2800lib(O) rt73usb(O) rt2x00usb(O) rt2x00lib(O) ath9k_htc(O) mac80211(O) ath9k_common(O) ath9k_hw(O) ath(O) cfg80211(O) compat(O) rtl8192cu(O) snd_soc_tiny4412_wm8960 snd_soc_wm8960
[   39.885000] CPU: 0    Tainted: G           O  (3.5.0-FriendlyARM #2)
[   39.885000] PC is at memcpy+0x48/0x330
[   39.885000] LR is at fb_read+0x14c/0x1b0
[   39.885000] pc : [<c02544e8>]    lr : [<c0273d0c>]    psr: 20000013
[   39.885000] sp : ec769f1c  ip : 00000000  fp : ec443e00
[   39.885000] r10: 00000000  r9 : ec768000  r8 : 00000200
[   39.885000] r7 : f0049000  r6 : 000bc008  r5 : ec769f80  r4 : 00000200
[   39.885000] r3 : ec769f38  r2 : 00000180  r1 : f0049000  r0 : ec443e00
[   39.885000] Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
[   39.885000] Control: 10c5387d  Table: 6c7c804a  DAC: 00000015
.......
[   40.740000] ---[ end trace a0a1060a9c00bc6c ]---
Segmentation fault

    同样写回屏幕的命令: #dd if=fbfile of=/dev/fb0; 也报相同错误

b. 4412的旋转寄存器的基地址0x12810000,ioremap后,对其赋值无任何反应,赋任意值后再读出均为0.
   request_mem_region(0x12810000,0x100,"rotator_base_out");   //包括测试了request_region()函数。
   rotator_base = ioremap(0x12810000, 0x100);
   writeb(0x55,rotator_base );
   tmp=readb(rotator_base);
按道理  tmp应该为0x55,但读出始终为0.
   而用4412的lcd寄存器基地址0x11c00000,代替0x12810000后,是可以读可以写。可以看到4412对液晶的配置。能正常赋值读取。

c. 对任意物理内存地址,ioremap后,读取立即报指针错误。
   4412为1G内存,它的物理地址从0xA000_0000-----0xE000_0000;
   根据它的lcd寄存器,它的显存物理地址为0xC000_0000;
   按照上面步骤(b)的操作对0xA000_0000-----0xE000_0000的任意地址,ioremap,只要一调用readb()或readl()马上就报指针错误:
Unhandled fault: imprecise external abort (0x406) at 0xf5000000
Internal error: : 406 [#1] PREEMPT SMP ARM
下面将详细贴出
//---------------------------------------------------------------------
d. 逐层跟踪writel和readl函数,后将writel和readl函数直接简化为对内存指针的操作。例如将readl函数直接简化为:
tmp=(uint32_t )(* (uint32_t *)rotator_base );
writel简化为:
*(uint32_t *)rotator_base =0x1425;
效果一模一样,说明问题的症结不在读写函数。

以上程序或指令在6410上均能正常操作。在4412的3.5内核中应该有对内存有很强的保护,应该如何解决这个问题呢?


ps,曾经考虑过trustzone的问题,而后我使用了2014年3月份以前的没有trustzone的友善内核,情况一样。
        我又比对6410和4412的menuconfig,没找到有明显的内存保护选项。

正在研究mmu,但目前没有思路。请各位帮帮忙,谢谢。




级别: 新手上路
UID: 11651
精华: 0
发帖: 38
金钱: 190 两
威望: 38 点
贡献值: 0 点
综合积分: 76 分
注册时间: 2009-12-15
最后登录: 2015-11-23
1楼  发表于: 2014-10-16 09:28
在read指令后,马上报错:
[   41.375000] Unhandled fault: imprecise external abort (0x406) at 0xf5000000
[   41.375000] Internal error: : 406 [#1] PREEMPT SMP ARM
[   41.375000] Modules linked in: chwview(O+) libertas_sdio(O) libertas(O) zd1211rw(O) rt2800usb(O) rt2800lib(O) rt73usb(O) rt2x00usb(O) rt2x00lib(O) ath9k_htc(O) mac80211(O) ath9k_common(O) ath9k_hw(O) ath(O) cfg80211(O) compat(O) rtl8192cu(O) snd_soc_tiny4412_wm8960 snd_soc_wm8960
[   41.390000] CPU: 1    Tainted: G           O  (3.5.0-FriendlyARM #2)
[   41.395000] PC is at chen_hw_view_init+0xc8/0x248 [chwview]
[   41.400000] LR is at chen_hw_view_init+0xbc/0x248 [chwview]
[   41.405000] pc : [<bf24a0c8>]    lr : [<bf24a0bc>]    psr: 60000013
[   41.405000] sp : ecbd1ea8  ip : 00000001  fp : c00805dc
[   41.420000] r10: 0000001c  r9 : 0000015a  r8 : bf24a000
[   41.425000] r7 : 00000000  r6 : c08d80c0  r5 : 00000000  r4 : bf248370
[   41.430000] r3 : ffffffff  r2 : c0913b80  r1 : 20000093  r0 : 00000012
[   41.435000] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
[   41.445000] Control: 10c5387d  Table: 6bcbc04a  DAC: 00000015
[   41.450000]
[   41.450000] SP: 0xecbd1e28:
[   41.455000] 1e28  00000000 00000000 00000000 00000000 c098a6f0 00000012 bf24a000 c00084e8
[   41.460000] 1e48  bf24a0c8 60000013 ffffffff ecbd1e94 bf24a000 c0013598 00000012 20000093
[   41.470000] 1e68  c0913b80 ffffffff bf248370 00000000 c08d80c0 00000000 bf24a000 0000015a
[   41.480000] 1e88  0000001c c00805dc 00000001 ecbd1ea8 bf24a0bc bf24a0c8 60000013 ffffffff
[   41.485000] 1ea8  00000000 c0917314 bf248250 c0988d00 ecbd0000 c00086a4 bf248208 c0057300
[   41.495000] 1ec8  00000000 0001ef3c 0000015a bf248250 bf248208 bf248250 bf248208 00000001
[   41.505000] 1ee8  ec569140 00000001 0000001c c0081888 bf248214 00007fff c0080798 bebfde08
[   41.510000] 1f08  00000000 00000000 bf248214 ecbd0000 bf24835c f07d19d0 f07d2088 000afa95
[   41.520000]
[   41.520000] FP: 0xc008055c:
[   41.520000] 055c  e5913024 e1a00002 e3021928 e59320cc e34c1083 ea0782ff e5913024 e1a00002
[   41.530000] 057c  e5933000 e3530002 959f1014 859f3014 90813103 959330d4 e59f100c e1a02003
[   41.540000] 059c  ea0782f4 c061c280 c07bd710 c083437c e5913024 e1a00002 e304137c e5932080
[   41.550000] 05bc  e34c1083 ea0782eb e5913024 e1a00002 e304137c e593207c e34c1083 ea0782e5
[   41.555000] 05dc  e5903020 e3081158 e1a00002 e34c107c e1a02003 ea0782df e92d4010 e1a04000
[   41.565000] 05fc  e1a00001 e3a010d0 eb013e53 e5840080 e8bd8010 e92d4010 e1a04000 e1a00001
[   41.570000] 061c  e3a010d0 eb013e4c e584007c e8bd8010 e92d45f8 e59fa09c e1a07000 e59a6000
[   41.580000] 063c  e3e02000 e3a05000 e59f408c e59f808c ea000004 e7981102 e5973164 e0833001
[   41.590000]
[   41.590000] R2: 0xc0913b00:
[   41.590000] 3b00  00000005 00000006 00000007 00000008 00000009 0000000a 0000000b 0000000c
[   41.600000] 3b20  0000000d 0000000e 0000000f 00000010 00000011 00000012 00000013 00000014
[   41.610000] 3b40  00000015 00000016 00000017 00000018 00000019 0000001a 0000001b 0000001c
[   41.615000] 3b60  0000001d 0000001e 0000001f 00000005 00000001 00020000 00000000 00000000
[   41.625000] 3b80  c0913b80 c0913b80 00000001 c098ab20 c0913b90 c0913b90 00000000 00000000
[   41.635000] 3ba0  000003e8 0000000a 00000000 00000000 00000000 00000000 00000000 00000001
[   41.640000] 3bc0  c0913bc0 c0913bc0 00000000 0000000f 00000004 00000001 00000007 ffffffff
[   41.650000] 3be0  ffffffff 00000000 c0913a30 c0913cd4 c0913c30 c07bc134 ecc06090 00000000
[   41.660000]
[   41.660000] R6: 0xc08d8040:
[   41.660000] 8040  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   41.670000] 8060  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   41.680000] 8080  c0038d58 c003f378 c04bfda4 c04c2554 c0246e10 c02473e0 c0038e68 c0068680
[   41.685000] 80a0  c0055bb0 c0094b60 00000000 00000000 00000000 00000000 00000000 00000000
[   41.695000] 80c0  ffff3633 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   41.705000] 80e0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   41.710000] 8100  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   41.720000] 8120  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   41.730000] Process insmod (pid: 321, stack limit = 0xecbd02f8)
[   41.735000] Stack: (0xecbd1ea8 to 0xecbd2000)
[   41.740000] 1ea0:                   00000000 c0917314 bf248250 c0988d00 ecbd0000 c00086a4
[   41.745000] 1ec0: bf248208 c0057300 00000000 0001ef3c 0000015a bf248250 bf248208 bf248250
[   41.755000] 1ee0: bf248208 00000001 ec569140 00000001 0000001c c0081888 bf248214 00007fff
[   41.760000] 1f00: c0080798 bebfde08 00000000 00000000 bf248214 ecbd0000 bf24835c f07d19d0
[   41.770000] 1f20: f07d2088 000afa95 f07c1000 00015b12 f07d19d0 f07d1811 f07d69b8 0000037c
[   41.780000] 1f40: 0000049c 00000000 00000000 0000002a 0000002b 00000010 00000000 0000000c
[   41.785000] 1f60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 c00f2e7c
[   41.795000] 1f80: 00000003 00000001 00000069 bebfde04 00000080 c0013ba8 ecbd0000 00000000
[   41.805000] 1fa0: 00000000 c0013a00 00000001 00000069 000bc040 00015b12 000afa95 7fffffff
[   41.810000] 1fc0: 00000001 00000069 bebfde04 00000080 bebfde08 000afa95 bebfde08 00000000
[   41.820000] 1fe0: 00000001 bebfdaac 0001cb50 b6dd5664 60000010 000bc040 00000000 00000000
[   41.830000] [<bf24a0c8>] (chen_hw_view_init+0xc8/0x248 [chwview]) from [<c00086a4>] (do_one_initcall+0x30/0x174)
[   41.840000] [<c00086a4>] (do_one_initcall+0x30/0x174) from [<c0081888>] (sys_init_module+0xe0/0x1a28)
[   41.850000] [<c0081888>] (sys_init_module+0xe0/0x1a28) from [<c0013a00>] (ret_fast_syscall+0x0/0x30)
[   41.850000] Code: eb4f29f2 e5943000 e5933000 f57ff04f (e5942000)
[   41.865000] ---[ end trace 76a4ee94ed29e7b6 ]---
Segmentation fault
级别: 侠客
UID: 25875
精华: 0
发帖: 80
金钱: 402 两
威望: 80 点
贡献值: 0 点
综合积分: 160 分
注册时间: 2010-07-30
最后登录: 2020-07-04
2楼  发表于: 2017-02-15 12:38
此帖售价 1 金钱,已有 0 人购买
若发现会员采用欺骗的方法获取财富,请立刻举报,我们会对会员处以2-N倍的罚金,严重者封掉ID!
描述:如何关闭INO分配方式
附件: INO.png (19 K) 下载次数:5 售价:1金钱
级别: 新手上路
UID: 64766
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
贡献值: 0 点
综合积分: 12 分
注册时间: 2012-03-09
最后登录: 2017-05-23
3楼  发表于: 2017-05-23 08:51
我也有同样的错误,楼主是怎么解决的?