设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
智能计算—— LinuxSir.cn
›
Linux及计算机学科基础理论版
›
[Linux]最近在看深入理解Linux第二版,有个问题感到很困 ...
返回列表
查看:
3128
|
回复:
2
[Linux]最近在看深入理解Linux第二版,有个问题感到很困惑
[复制链接]
czj_fly
czj_fly
当前离线
积分
3
IP卡
狗仔卡
发表于 2007-3-13 13:27:41
|
显示全部楼层
|
阅读模式
在该书的72页,关于在汇编函数startup_32()中启动MMU的分页功能的语句
movl $swarpper_pg_dir - 0xc0000000, %eax
movl %eax , %cr3 /*设置页面指针*/
我不理解为何要用swarpper_pg_dir的地址减去0xc0000000,因为此时CPU
还处于实模式,那么全局变量swarpper_pg_dir的地址就应该是物理地址。为
何要减去0xc0000000呢?请那位高手帮我解答。
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
rickxbx
rickxbx
当前离线
积分
1256
IP卡
狗仔卡
发表于 2007-4-6 13:51:58
|
显示全部楼层
我猜是这样的: 在编译的时候 base address 是 0xc0000000, 这样在得到的object文件中的地址都是 0xc0000000 偏移的, 要得到实地址(因为 cr3寄存器需要实地址), 所以要减去一个 0xc0000000.
回复
支持
反对
使用道具
举报
显身卡
bamu1984
bamu1984
当前离线
积分
5
IP卡
狗仔卡
发表于 2007-4-24 19:49:38
|
显示全部楼层
内核空间是 3G 以上,所以在链接的时候,会把地址定在 0xC000 0000 之上的,对于内核代码而言,3G的空间线性映射到物理地址 0 - max 上,所以,需要减一下;
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表