kinggate
驱动牛犊
驱动牛犊
  • 注册日期2008-06-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望233点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1647回复:4

各位大哥,请教下OAL层虚拟地址申请问题,谢谢指教!

楼主#
更多 发布于:2009-02-07 19:22
各位大虾:
  
    我在增加自定义中断的时候有点疑问,CFW.C文件里,有
OEMInterruptEnable(  )
{
   volatile INTreg *s2440INT  =  (INTreg *) INT_BASE;
   volatile IOPreg *s2440IOP =  (IOPreg *) IOP_BASE;
   s2440IOP ->rEINTPEND  = (1 << 18) ;
  ................................
  ................................
}
    为什么 s2440IOP ->rEINTPEND  = (1 << 18) ;  可以用s2440IOP直接操作了?不用 VirualAlloc  和 VirtualCopy 先申请对虚拟地址的操作吗?
  谢谢指教啦,总想不明白。
kinggate
驱动牛犊
驱动牛犊
  • 注册日期2008-06-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望233点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-02-09 15:43
没人理我啊? 哪位高手帮忙指教一下啦,谢谢了  。。。。
liulord
驱动牛犊
驱动牛犊
  • 注册日期2007-07-31
  • 最后登录2009-05-18
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望155点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-02-10 14:56
VirtualAlloc和VirtualCopy应该是在kernel执行reschedule之后使用,你这条代码是在OEMInit中调用的,
OemInit是由NkStartup调用的,你可以参考具体的代码,这个时候还不能使用VirtualAlloc和VirtualCopy的API,也就是MMMapIoSpace函数是不能使用的,我不太清楚2440的代码是怎么样的,如果在boot的时候没有配置过cp15(用于虚拟--物理地址映射)的话,应该是直接就可以对s2440IOP操作了。
high
论坛版主
论坛版主
  • 注册日期2002-08-10
  • 最后登录2010-07-26
  • 粉丝4
  • 关注0
  • 积分60分
  • 威望655点
  • 贡献值0点
  • 好评度56点
  • 原创分0分
  • 专家分60分
地板#
发布于:2009-02-11 15:03
因为这里是运行在内核态。 内核态拥有全地址访问的特权。 如果是用户态的驱动里面就需要映射。
kinggate
驱动牛犊
驱动牛犊
  • 注册日期2008-06-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望233点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-02-18 19:55
谢谢两位的指点,有点明白了。
游客

返回顶部