阅读:1723回复:4
各位大哥,请教下OAL层虚拟地址申请问题,谢谢指教!
各位大虾:
我在增加自定义中断的时候有点疑问,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 先申请对虚拟地址的操作吗? 谢谢指教啦,总想不明白。 |
|
沙发#
发布于:2009-02-09 15:43
没人理我啊? 哪位高手帮忙指教一下啦,谢谢了 。。。。
|
|
板凳#
发布于:2009-02-10 14:56
VirtualAlloc和VirtualCopy应该是在kernel执行reschedule之后使用,你这条代码是在OEMInit中调用的,
OemInit是由NkStartup调用的,你可以参考具体的代码,这个时候还不能使用VirtualAlloc和VirtualCopy的API,也就是MMMapIoSpace函数是不能使用的,我不太清楚2440的代码是怎么样的,如果在boot的时候没有配置过cp15(用于虚拟--物理地址映射)的话,应该是直接就可以对s2440IOP操作了。 |
|
地板#
发布于:2009-02-11 15:03
因为这里是运行在内核态。 内核态拥有全地址访问的特权。 如果是用户态的驱动里面就需要映射。
|
|
地下室#
发布于:2009-02-18 19:55
谢谢两位的指点,有点明白了。
|
|