首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

求教:关于内核物理地址和虚拟地址的有关问题

2012-03-13 
求教:关于内核物理地址和虚拟地址的问题内核里的程序可以直接访问物理地址吗?我知道用户程序拥有的是虚拟

求教:关于内核物理地址和虚拟地址的问题
内核里的程序可以直接访问物理地址吗?我知道用户程序拥有的是虚拟的空间不能访问物理地址,现在我学驱动程序,看到书上有个程序,为了测试低1M内的物理地址,是这样写的
int   addr=0x0A.....;
char   *p=(char   *)addr;

然后它就用这样的方法就访问到了物理地址,我知道如果写的是用户空间里的程序,这样是绝对不能访问物理地址的,因为给变量p的地址是虚拟地址,物理地址要靠MMU给用户程序分配,但是书上这么写是不是表明,只要是编译加载到内核里的模块,都是直接访问物理地址的,而不是虚拟地址?

[解决办法]
内核也不能直接访问物理地址.但因为内核的虚拟地址和物理地址之间只是一个差值0xc0000000的区别,所以从物理地址求虚拟地址或从虚拟地址求物理地址很容易,+-这个差就行了.宏phy_to_virt就是这样从物理地址得到虚拟地址的.你在程序应该可以找到这个宏.

热点排行