powerpc mpc8xx 中early_init, reloca_offset疑问
时间:2008-11-27
来源:互联网
在arch/powerpc/kernel/head_8xx.S 中:
start_here:
/* ptr to current */
lis r2,init_task@h
ori r2,r2,init_task@l
/* ptr to phys current thread */
tophys(r4,r2)
addi r4,r4,THREAD /* init task's THREAD */
mtspr SPRN_SPRG3,r4
li r3,0
mtspr SPRN_SPRG2,r3 /* 0 => r1 has kernel sp */
/* stack */
lis r1,init_thread_union@ha
addi r1,r1,init_thread_union@l
li r0,0
stwu r0,THREAD_SIZE-STACK_FRAME_OVERHEAD(r1)
bl early_init /* We have to do this with MMU on */
执行start_here的时候,MMU已经打开,但early_init中调用reloc_offset函数:
_GLOBAL(reloc_offset)
mflr r0
bl 1f
1: mflr r3
LOAD_REG_IMMEDIATE(r4,1b)
subf r3,r4,r3
mtlr r0
blr
函数本身比较简单,只是计算运行地址和链接地址的差值,但问题在于:
如果在MMU已经打开的情况,在start_here中的代码它们的运行地址和链接地址的差别已经在initial_mmu中设置好了:
即
逻辑地址-KERNELBASE=物理地址
我认为reloc_offset只能返回0,但明显不对,否则这个函数就没有意义了,请大侠指点
start_here:
/* ptr to current */
lis r2,init_task@h
ori r2,r2,init_task@l
/* ptr to phys current thread */
tophys(r4,r2)
addi r4,r4,THREAD /* init task's THREAD */
mtspr SPRN_SPRG3,r4
li r3,0
mtspr SPRN_SPRG2,r3 /* 0 => r1 has kernel sp */
/* stack */
lis r1,init_thread_union@ha
addi r1,r1,init_thread_union@l
li r0,0
stwu r0,THREAD_SIZE-STACK_FRAME_OVERHEAD(r1)
bl early_init /* We have to do this with MMU on */
执行start_here的时候,MMU已经打开,但early_init中调用reloc_offset函数:
_GLOBAL(reloc_offset)
mflr r0
bl 1f
1: mflr r3
LOAD_REG_IMMEDIATE(r4,1b)
subf r3,r4,r3
mtlr r0
blr
函数本身比较简单,只是计算运行地址和链接地址的差值,但问题在于:
如果在MMU已经打开的情况,在start_here中的代码它们的运行地址和链接地址的差别已经在initial_mmu中设置好了:
即
逻辑地址-KERNELBASE=物理地址
我认为reloc_offset只能返回0,但明显不对,否则这个函数就没有意义了,请大侠指点
作者: chenzeyun 发布时间: 2008-11-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28