免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3739 | 回复: 2
打印 上一主题 下一主题

网卡寄存器读写:X86 vs ARM [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-18 21:43 |只看该作者 |倒序浏览
小弟现在需要将基于X86写的一段网卡驱动程序移植到ARM,碰到了问题,其中一个问题是X86代码中对寄存器的读写在ARM板子
上无法正常运行,会产生随机错误,导致Oops。

基于X86的代码中读写寄存器的宏定义为:
#define EDRV_REGDW_WRITE(dwReg, dwVal) writel(dwVal, EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGW_WRITE(dwReg, wVal) writew(wVal, EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGB_WRITE(dwReg, bVal) writeb(bVal, EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGDW_READ(dwReg) readl(EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGW_READ(dwReg) readw(EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGB_READ(dwReg) readb(EdrvInstance_l.m_pIoAddr + dwReg)

然后我把网卡驱动程序跑在ARM中时,发现总是在写寄存器时会crash,读写哪个寄存器时crash是不固定的。

在初步比较了ARM平台上读写寄存器的方式,感觉跟X86的这段宏其实质是一样的,但不是很确定,另有兄弟说在writeb之前做ioremap,但代码中已经做了。
请高手指点迷津,多谢!


产生的Oops信息为:
<2>Bad mode in data abort handler detected
Internal error: Oops - bad mode: 0 [#1]
Modules linked in: epl sg sd_mod usb_storage scsi_mod uhci_hcd ehci_hcd usbcore moxa_dio moxa_software_id mxser_uc8400(P) nfs nfs_acl lockd sunrpc ixp400_eth ixp400
CPU: 0 Tainted: P (2.6.23.1 #987)
pc : [<ffff000c>] lr : [<60000013>] psr: a0000097
sp : cf743ce4 ip : cf743c74 fp : cf743d50
r10: bf1de528 r9 : bf1de530 r8 : c02971f4
r7 : c4242448 r6 : bf1dd900 r5 : bf1dd900 r4 : 00000000
r3 : d0852037 r2 : d0862000 r1 : 00000001 r0 : d0862037
Flags: NzCv IRQs off FIQs on Mode ABT_32 ISA ARM Segment user
Control: 000039ff Table: 0eec0000 DAC: 00000015
Process insmod (pid: 920, stack limit = 0xcf74225
Stack: (0xcf743ce4 to 0xcf744000)
3ce0: d0862037 00000001 d0862000 d0852037 00000000 bf1dd900 bf1dd900
3d00: c4242448 c02971f4 bf1de530 bf1de528 cf743d50 cf743c74 cf743ce4 60000013
3d20: ffff000c a0000097 ffffffff c4242400 cf743d3c bf1dc620 c4242400 bf1dc5f0
3d40: 00000000 cf743d70 cf743d54 c01675d0 bf1c6170 c4242448 c4242448 bf1dc620
3d60: c0182990 cf743d94 cf743d74 c01827a0 c0167570 c4242508 c4242448 bf1dc620
3d80: c0182990 c0277e94 cf743dac cf743d98 c0182a74 c0182704 00000000 cf743db0
3da0: cf743dd8 cf743db0 c0181adc c018299c c0277f80 c0277f80 c4242490 bf1dc628
3dc0: bf1dc620 00000000 bf1dd900 cf743de8 cf743ddc c0182610 c0181a94 cf743e0c
3de0: cf743dec c0181eb0 c01825fc bf1dc620 bf1db080 bf1dc620 bf1dd900 bf1de5c4
3e00: cf743e20 cf743e10 c0182c78 c0181e3c bf1dc5f0 cf743e3c cf743e24 c0167778
3e20: c0182c34 bf1dc5f0 bf1db080 cf743e64 cf743e60 cf743e40 bf1c53a4 c016773c
3e40: cf743e6c bf1de638 bf1e875c cf743e9c cf743e64 cf743e98 cf743e64 bf1c9404
3e60: bf1c5330 00000000 0000be40 bf1ca014 bf1c9d44 00000000 00000000 bf1e8768
3e80: bf1e875c 002dc6c0 000249f0 cf743ecc cf743e9c bf1d754c bf1c9374 00000000
3ea0: 0000501c 00000000 00000000 bf1dc6e0 bf1dca60 bf1dca90 00000002 0007a120
3ec0: cf743f04 cf743ed0 bf107190 bf1d7464 c0074964 bf1dd7c0 bf1dd7c0 bf1dd7c0
3ee0: bf1dd7c0 cccccccd d08da174 00000018 bf1dd7cc bf1dd7c0 cf743fa4 cf743f08
3f00: c005a778 bf10700c 00000000 cf742000 00000000 00000000 00000000 00000000
3f20: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
3f40: 0000000c 00000017 d08e6c6c cf10b028 00000000 d08da3f4 d08c1000 0000000b
3f60: 00000000 000005e9 000005e9 d08da50c 00000016 00000000 00000000 00000028
3f80: bec56e83 bec56dac 00000080 c001dfc4 cf742000 401a3048 00000000 cf743fa8
3fa0: c001de20 c005a65c bec56e83 bec56dac 00000080 401aa008 0002a070 00097008
3fc0: 00000028 bec56e83 bec56dac 4000b10c 00000002 0000c814 401a3048 bec56d24
3fe0: bec56cf0 bec56ce4 0000fa30 40153f00 60000010 00000080 42000000 00e00810
Backtrace:
Function entered at [<bf1c6164>] from [<c01675d0>]
r7:00000000 r6:bf1dc5f0 r5:c4242400 r4:bf1dc620
Function entered at [<c0167564>] from [<c01827a0>]
r7:c0182990 r6:bf1dc620 r5:c4242448 r4:c4242448
Function entered at [<c01826f8>] from [<c0182a74>]
r8:c0277e94 r7:c0182990 r6:bf1dc620 r5:c4242448 r4:c4242508
Function entered at [<c0182990>] from [<c0181adc>]
r5:cf743db0 r4:00000000
Function entered at [<c0181a88>] from [<c0182610>]
r7:bf1dd900 r6:00000000 r5:bf1dc620 r4:bf1dc628
Function entered at [<c01825f0>] from [<c0181eb0>]
Function entered at [<c0181e30>] from [<c0182c78>]
r8:bf1de5c4 r7:bf1dd900 r6:bf1dc620 r5:bf1db080 r4:bf1dc620
Function entered at [<c0182c28>] from [<c0167778>]
r4:bf1dc5f0
Function entered at [<c0167730>] from [<bf1c53a4>]
r6:cf743e64 r5:bf1db080 r4:bf1dc5f0
Function entered at [<bf1c5324>] from [<bf1c9404>]
r7:cf743e64 r6:cf743e9c r5:bf1e875c r4:bf1de638
Function entered at [<bf1c9368>] from [<bf1d754c>]
r7:000249f0 r6:002dc6c0 r5:bf1e875c r4:bf1e8768
Function entered at [<bf1d7458>] from [<bf107190>]
r5:0007a120 r4:00000002
Function entered at [<bf107000>] from [<c005a778>]
Function entered at [<c005a650>] from [<c001de20>]
Code: bad PC value.

论坛徽章:
0
2 [报告]
发表于 2010-07-19 13:24 |只看该作者
如果都是linux系统的话,还有啥移植可言啊?
不同的架构的寄存器读取方式系统已经提供了啊

论坛徽章:
0
3 [报告]
发表于 2010-07-23 18:36 |只看该作者
大端小端?
字节序
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP