注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

时间记录器

记录我的Linux、Android学习之路

 
 
 

日志

 
 

Kernel中 “0x40008000”的由来  

2011-06-16 21:47:41|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、Documentation/arm/Booting文件有如下描述

104 5. Calling the kernel image
105 ---------------------------
106
107 Existing boot loaders:      MANDATORY
108 New boot loaders:       MANDATORY
109
110 There are two options for calling the kernel zImage.  If the zImage
111 is stored in flash, and is linked correctly to be run from flash,
112 then it is legal for the boot loader to call the zImage in flash
113 directly.
114
115 The zImage may also be placed in system RAM (at any location) and
116 called there.  Note that the kernel uses 16K of RAM below the image
117 to store page tables.  The recommended placement is 32KiB into RAM.

红色部分说明了为什么总是从0x40008000开始放kernel,而不能从0x40000000开始

32KiB = 0x8000, 所以,前32KB是用来存放存储器页表(store page tables)

二、同时在arch/unicore/boot/compressed/head.S 下

183 /*
184  * Turn on the cache.  We need to setup some page tables so that we
185  * can have both the I and D caches on.
186  *
187  * We place the page tables 16k down from the kernel execution address,
188  * and we hope that nothing else is using it.  If we're using it, we
189  * will go pop!
190  *
191  * On entry,
192  *  r4 = kernel execution address
193  *  r6 = processor ID
194  *  r7 = architecture number
195  *  r8 = atags pointer
196  *  r9 = run-time address of "start"  (???)
197  * On exit,
198  *  r1, r2, r3, r9, r10, r12 corrupted
199  * This routine must preserve:
200  *  r4, r5, r6, r7, r8
201  */

红色部分也明确说明前16KB使用作为页表,改页表的作用是 使用数据和指令caches(so that we can have both the I and D caches on

  评论这张
 
阅读(418)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017