6459|12

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助:WinCE gwes.exe data abort [复制链接]

系统平台: S3c2440+sm501
当我把501的驱动添加到系统后,下载nk.nb0到目标板,通过serial KITL反馈debug信息,如下:
   2451 PID:ade663f2 TID:adf9a8be Data Abort: Thread=8de66768 Proc=8c24c580 'gwes.exe'
   2459 PID:ade663f2 TID:adf9a8be AKY=00000011 PC=01eb3074(ddi_vgx.dll+0x00003074) RA=01eb3060(ddi_vgx.dll+0x00003060) BVA=eb002018 FSR=00000005
   2473 PID:ade663f2 TID:adf9a8be Data Abort: Thread=8de66768 Proc=8c24c580 'gwes.exe'
   2480 PID:ade663f2 TID:adf9a8be AKY=00000011 PC=0004c3d8(gwes.exe+0x0003c3d8) RA=00053308(gwes.exe+0x00043308) BVA=0a000008 FSR=00000007

系统情况如下:
sm501的物理地址为0x20000000,它有自己独立的显示存储区,64MB的sdram
更改common.reg如下:
IF BSP_DISPLAY_SMIVGX
[HKEY_LOCAL_MACHINE\System\GDI\Drivers]
        "Display"="ddi_vgx.dll"
[HKEY_LOCAL_MACHINE\Drivers\Display\SMIVGX]
       ...
       ...
; For Host-based driver
  "FB_BASE"         = dword:20000000
  "FG_BASE"         = dword:23E00000

; For DMA API on STELLCOM Peacock, should be same as in config.bib file.
; VGXDMA        8C050000  000E0000  RESERVED            ; in config.bib
  "SDRAM_BASE"      = dword:8C000000
  "VGXDMABUF_ADDR"  = dword:8C050000
  "VGXDMABUF_SIZE"  = dword:E0000
       ...
       ...
ENDIF

小弟目前对vgxdma这里不是很明白,这里写的这些地址都代表什么意思,用来做什么的?
查看oemaddrtab_cfg.inc,它将物理地址0x20000000与0x88000000对应起来。
此帖出自WindowsCE论坛

最新回复

谢谢! 目前我的整个硬件平台是这样的:s3c2440 + 64MB SDRAM   地址为0x30000000                           sm501   +  64MB SDRAM  地址为0x20000000 修改g_oalAddressTable中的内存映射表 DCD     0x88000000, 0x20000000, 64      ; 64 MB SROM(SRAM/ROM) BANK 4 去除BANK5的映射,由于这个地址没有外挂外设 这样物理地址就和虚拟地址一一对应起来,访问对应的虚拟地址就可以得到对应的物理地址的 数值? 要不要在config.bib中声明一下所拥有的外部存储资源呢? 注: 其实sm501需要8MB ram就足够了,价钱差不多,就直接用了个64MB,有点浪费   详情 回复 发表于 2008-12-4 09:22
点赞 关注
 

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己顶一个
没人回复呀!
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
; VGXDMA 8C050000  000E0000  RESERVED    ; in config.bib
这个VGXDMA没有什么特别是的意思,只不过是个名称而已
这是为DMA BUFFER保留这块区域
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
回复2楼,这个我也知道。
目前通过kitl传回的信息如下:
   9089 PID:ade6645e TID:8de25392 Data Abort: Thread=8de49700 Proc=8c24c580 'gwes.exe'
   9097 PID:ade6645e TID:8de25392 AKY=ffffffff PC=03fc550c(coredll.dll+0x0005550c) RA=01ea7da0(ddi_vgx.dll+0x00007da0) BVA=45fff800 FSR=00000005
   9108 PID:ade6645e TID:8de25392 Data Abort: Thread=8de49700 Proc=8c24c580 'gwes.exe'
   9116 PID:ade6645e TID:8de25392 AKY=ffffffff PC=03fc550c(coredll.dll+0x0005550c) RA=01ea7da0(ddi_vgx.dll+0x00007da0) BVA=45fff800 FSR=00000005

然后我通过比对ddi_vgx.map文件,把错误定位在SMI::SaveRestore()这个函数中。

但是此函数就是保存或者设置一些寄存器的值,不可能发生数据异常呀!

那位高手能够帮小弟解决此问题呢?
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
操作寄存器就不会出现Data Abort吗?完全有可能的
不过LZ最好是通过反汇编去定位出错的语句,然后跟踪一下代码,看到底是哪行代码出了问题
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
4楼兄弟,他的异常出现在gwes.exe里,不是普通驱动里,可以用反汇编能查的到的吧?!
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
可以生成cod文件吧,然后定位异常。
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
根据自己的问题和网上查到的方法,总结如下:
3071 PID:400002 TID:b60002 Exception 'Data Abort' (4): Thread-Id=00b60002(pth=87f68a68), Proc-Id=00400002(pprc=81fce308) 'NK.EXE', VM-active=01870002(pprc=87fb9e8c) 'shell.exe'
3072 PID:400002 TID:b60002 PC=d04b9e74(nandflsh.dll+0x00009e74) RA=00000790(???+0x00000790) SP=d02be81c, BVA=d04be000
该错误是由于函数内存泄露导致的,问题函数的具体定位方法——PC=d04b9e74(nandflsh.dll+0x00009e74),说明问题函数出现在nandflsh.dll中,需要查看NANDFLSH.map文件;在NANDFLSH.map文件中有“Preferred load address is 10000000 ”, 0x00009e74+10000000计算结果实定位的依据,在NANDFLSH.map文件中的Rva+Base列(如下表)查看10009e74得到问题函数为:XllpFlashDfcReadFIFOPartial
Address         Publics by Value              Rva+Base       Lib:Object
0001:00008a48       XllpFlashDfcSetGPIO        10009a48 f   NandFmd:xllp_dfc.obj
0001:00008abc       XllpFlashDfcSetTiming      10009abc f   NandFmd:xllp_dfc.obj
0001:00008c40       XllpFlashDfcSetDMA         10009c40 f   NandFmd:xllp_dfc.obj
0001:00008c68       XllpFlashDfcSetECC         10009c68 f   NandFmd:xllp_dfc.obj
0001:00008c90       XllpFlashDfcSetSpare       10009c90 f   NandFmd:xllp_dfc.obj
0001:00008cb8       XllpFlashDfcGetPattern     10009cb8 f   NandFmd:xllp_dfc.obj
0001:00008e18       XllpFlashDfcReadFIFOPartial 10009e18 f   NandFmd:xllp_dfc.obj
0001:00008ed0       XllpFlashDfcWriteFIFOPartial 10009ed0 f   NandFmd:xllp_dfc.obj
0001:00008f4c       XllpFlashDfcReadBadBlockAddr 10009f4c f   NandFmd:xllp_dfc.obj
0001:00008f90       XllpFlashDfcInit           10009f90 f   NandFmd:xllp_dfc.obj

希望有用
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(中级)

9
 
引用 5 楼 lesho 的回复:
4楼兄弟,他的异常出现在gwes.exe里,不是普通驱动里,可以用反汇编能查的到的吧?!

他的异常明明是在它的显示驱动里面(RA=01ea7da0(ddi_vgx.dll+0x00007da0)),为什么查不到呢?
再说即使是GWES出错,反汇编出来也可以定位到哪个函数报的错
此帖出自WindowsCE论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

10
 
直接反汇编,然后查找出错的地址,就应该可以找到出错对应的函数,但没有办法确定是哪一句话导致的异常
此帖出自WindowsCE论坛
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

11
 
谢谢楼上的众兄弟们
目前定位清楚了,是由于读取虚拟地址空间错误造成的,

为什么会出现读取错误呢?这个问题我正在排查,可能的原因是我对芯片的初始化可能没做好

在这里问一个问题:
platform\smdk2440\src\kernel\oal中的startup.s

platform\common\...中的startup.s

有什么区别?
最先调用哪个?
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
看它的输出不就知道了,有一个是OALStartUp,一个是StartUp
显然应该是调用platform\smdk2440\src\kernel\oal中的startup.s先
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

13
 
谢谢!

目前我的整个硬件平台是这样的:s3c2440 + 64MB SDRAM   地址为0x30000000
                          sm501   +  64MB SDRAM  地址为0x20000000

修改g_oalAddressTable中的内存映射表
DCD     0x88000000, 0x20000000, 64      ; 64 MB SROM(SRAM/ROM) BANK 4
去除BANK5的映射,由于这个地址没有外挂外设

这样物理地址就和虚拟地址一一对应起来,访问对应的虚拟地址就可以得到对应的物理地址的
数值?

要不要在config.bib中声明一下所拥有的外部存储资源呢?


注:
其实sm501需要8MB ram就足够了,价钱差不多,就直接用了个64MB,有点浪费
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表