网站大量收购独家精品文档,联系QQ:2885784924

linux源码分析之cpu初始化kernelheads.docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux源码分析之cpu初始化kernelheads

linux-2.6.20.6/arch/arm/kernel/head.S 这是解压内核后内核入口所在的文件,完成内核解压后将控制权将转移到这里的入口。 先看一下 arch/arm/kernel/vmlinux.lds 这个链接脚本,在开头 186. OUTPUT_ARCH(arm) 187. ENTRY(stext) 188. jiffies = jiffies_64; 189. 这里指定 stext 为入口。 下而回过头来看 head.S 中内容, 74. __INIT 75. .typestext,%function 76. ENTRY(stext) 77. msrcpsr_c,#PSR_F_BIT|PSR_I_BIT|SVC_MODE@ensuresvcmode 78. @andirqsdisabled 79. mrcp15,0,r9,c0,c0@ get processorid 80. bl__lookup_processor_type@r5=procinfor9=cpuid 81. movsr10,r5@invalidprocessor(r5=0)? // 处理器信息结构基地址保存到r10 82. beq__error_p@yes,error p 83. bl__lookup_machine_type@r5=machinfo 84. movsr8,r5@invalidmachine(r5=0)? // 机器类型结构的基地址保存到r8 85. beq__error_a@yes,error a 86. bl__create_page_tables 87. 开头的 __INIT 是一个宏定义在 include/linux/init.h 中: 55. #define __INIT .section .init.text,ax a 表示 Section contains allocated data x 表示 Section contains executable instructions. ENTRY(stext) 也是一个宏,在 include/linux/linkage.h 中定义 30. #ifndef ENTRY 31. #define ENTRY(name) / 32. .globl name; / 33. ALIGN; / 34. name: 35. #endif 36. 这段代码首先设置 cpu 工作模式为 svc 模式,禁止 FIQ 、 IRQ 。然后查找处理器类型、查找机器类型,如果出现错误则进行相应的处理,如果没错,则创建页表。下面分别看看这三个函数。 __create_page_tables 在 211 行定义,这个函数在后面介绍,先看看其他两个。 __lookup_processor_type 这个函数定义在 arch/arm/kernel/head-common.S 的第 146 行, 146. __lookup_processor_type: 147. adr r3, 3f 148. ldmda r3, {r5 - r7} 149. sub r3, r3, r7 @ get offset between virt 150. add r5, r5, r3 @ convert virt addresses to 151. add r6, r6, r3 @ physical address space 152. 1: ldmia r5, {r3, r4} @ value, mask 153. and r4, r4, r9 @ mask wanted bits 154. teq r3, r4 155. beq 2f 156. add r5, r5, #PROC_INFO_SZ @ sizeof (proc_info_list) 157. cmp r5, r6 158. blo 1b 159. mov r5, #0 @ unknown processor 160. 2: mov pc, lr 161. 162. /* 163. * This provides a C-API version of the above function. 164. */ 165. ENTR

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档