社区
嵌入开发(WinCE)
帖子详情
物理地址到虚拟地址的转换问题?
winamp123
2009-09-02 03:51:19
2440中UART0寄存器对应的物理地址为 0x50000000,对应的虚拟地址在g_oalAddressTable表中为0x91000000
g_oalAddressTable
DCD 0x91000000, 0x50000000, 1 ; UART control register
而在WINCE下驱动程序中利用 MmMapIoSpace()映射的虚拟地址确实 0x140000.
请问这个地址为什么不等于0x91000000 ?是怎么得到的?
...全文
212
13
打赏
收藏
物理地址到虚拟地址的转换问题?
2440中UART0寄存器对应的物理地址为 0x50000000,对应的虚拟地址在g_oalAddressTable表中为0x91000000 g_oalAddressTable DCD 0x91000000, 0x50000000, 1 ; UART control register 而在WINCE下驱动程序中利用 MmMapIoSpace()映射的虚拟地址确实 0x140000. 请问这个地址为什么不等于0x91000000 ?是怎么得到的?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dwAll_Blue
2009-09-04
打赏
举报
回复
g_oaladdresstable的映射是control register的,而MmMapIoSpace()是申请一段虚拟地址空间并和UART DMA地址绑定起来.
dwAll_Blue
2009-09-04
打赏
举报
回复
[Quote=引用 11 楼 kuron 的回复:]
g_oalAddressTable 表的虚拟地址是供内核使用的,你在驱动里面的地址是又经过一层映射到你的驱动程序空间的虚拟地址
[/Quote]
有根据?
kuronca
2009-09-04
打赏
举报
回复
g_oalAddressTable 表的虚拟地址是供内核使用的,你在驱动里面的地址是又经过一层映射到你的驱动程序空间的虚拟地址
yuanqh20000065
2009-09-03
打赏
举报
回复
用MmMapIoSpace是将物理地址动态映射到虚拟内存,每次映射得到的值可能都不一样。而g_oalAddressTable 表里的地址是静态的、固定不变的。
smallbasket
2009-09-03
打赏
举报
回复
MmMapIoSpace是用于把一个系统物理地址映射到当前的执行流所在的进程虚拟地址空间中,像楼主这种情况转换的是GPIO控制器的基地址,不是UART端口的地址
jiereliyi
2009-09-02
打赏
举报
回复
mark
guopeixin
2009-09-02
打赏
举报
回复
MARK,下班后研究一下源码
gooogleman
2009-09-02
打赏
举报
回复
我也不懂,但是我就看微软上面有说,具体的要看操作系统源码了。
winamp123
2009-09-02
打赏
举报
回复
[Quote=引用 4 楼 gooogleman 的回复:]
MmMapIoSpace申请的是堆内存,不是直接的虚拟内存,当然不是那个了。
[/Quote]
那这个堆内存地址与物理地址有个什么映射关系? 是在哪里确定的?
gooogleman
2009-09-02
打赏
举报
回复
[Quote=引用 2 楼 winamp123 的回复:]
引用 1 楼 gooogleman 的回复:
你的问题我怎么看的有点模糊呢?
也许我没说清楚。
我想问的是:为什么物理地址0x50000000通过MmMapIoSpace函数映射的虚拟地址为0x140000 ?
而不是g_oalAddressTable表中的 0x91000000?
[/Quote]
MmMapIoSpace申请的是堆内存,不是直接的虚拟内存,当然不是那个了。
jscoolman
2009-09-02
打赏
举报
回复
就是,感觉好奇怪,我的DM9000A的驱动上打印出来的信息就是这样
MmMapIoSpace不是到是怎么映射的,而且我在基地址上加偏移量之后还超限
winamp123
2009-09-02
打赏
举报
回复
[Quote=引用 1 楼 gooogleman 的回复:]
你的问题我怎么看的有点模糊呢?
[/Quote]
也许我没说清楚。
我想问的是:为什么物理地址0x50000000通过MmMapIoSpace函数映射的虚拟地址为0x140000 ?
而不是g_oalAddressTable表中的 0x91000000?
gooogleman
2009-09-02
打赏
举报
回复
你的问题我怎么看的有点模糊呢?
虚拟地址
转
物理地址
操作系统启动过程中,如何完成
物理地址
到
虚拟地址
的
转换
?
虚拟地址
又是如何翻译成
物理地址
的? 以qemu-system-riscv64为例,opensbi会将内核搬到内存0x80200000的位置,如果内核的.ld链接文件也是以0x80200000开始,...
Linux 内核空间
虚拟地址
和
物理地址
相互
转换
一直以来感觉
虚拟地址
和
物理地址
之间的相互
转换
非常麻烦,
虚拟地址
到
物理地址
的
转换
由CPU硬件完成,但
物理地址
到
虚拟地址
怎么
转换
啊?况且有时候在软件上也希望通过一个
物理地址
得到
虚拟地址
,这时候自然不能依赖CPU...
虚拟地址
与
物理地址
的
转换
在
虚拟地址
空间那篇文章中我们通过
虚拟地址
空间简单地介绍了
虚拟地址
空间,知道了应用程序中使用的是
虚拟地址
,需要通过MMU
转换
成
物理地址
,本文将详细介绍
虚拟地址
如何
转换
成
物理地址
。 页、页框、页表 linux操作...
用户
虚拟地址
转化成
物理地址
,
物理地址
转换
成内核
虚拟地址
,内核
虚拟地址
转换
成
物理地址
,
虚拟地址
和对应页的关系
用户
虚拟地址
转换
成
物理地址
2. 内核
虚拟地址
转换
成
物理地址
3.
物理地址
转换
成内核
虚拟地址
4
虚拟地址
和对应页 1. 用户
虚拟地址
转换
成
物理地址
2. 内核
虚拟地址
转换
成
物理地址
3.
物理地址
转换
成内核
虚拟地址
4 虚拟...
Linux驱动中
物理地址
、
虚拟地址
的
转换
物理地址
、
虚拟地址
在单片机和逻辑中,我们操作硬件是可以直接 unsigned int *p = 0x12345678; *p = 0x87654321; 但是在Linux上不行,是不能对
物理地址
直接进行操作的。(因为使能了MMU) 可我们还是...
嵌入开发(WinCE)
19,518
社区成员
41,565
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章