linux启动流程导读(arm为例)<一>

==============================================

本文系本站原创,欢迎转载!转载请注明出处:http://www.cnblogs.com/gdt-a20

==============================================

以arm为例,分析一下kernel的启动过程;

内核版本:linux-3.2.tar.gz

一、arch/arm/kernel/head.s

复制代码
 1 
19 .arm
20
21 __HEAD @#define __HEAD  .section ".head.text","ax"
22 ENTRY(stext)
23
24 THUMB( adr r9, BSYM(1f) ) @ Kernel is always entered in ARM.
25 THUMB( bx r9 ) @ If this is a Thumb-2 kernel,
26 THUMB( .thumb ) @ switch to Thumb now.
27 THUMB(1: )
28
29 setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode 关闭普通中断,快速中断,使能svc模式
30 @ and irqs disabled
31 mrc p15, 0, r9, c0, c0 @ get processor id 获得芯片ID
32 bl __lookup_processor_type @ r5=procinfo r9=cpuid 获得处理器型号,r5 == id,#1
33 movs r10, r5 @ invalid processor (r5=0)? 校验正确性,0错误
34 THUMB( it eq ) @ force fixup-able long branch encoding
35 beq __error_p @ yes, error 'p'
36
37 #ifndef CONFIG_XIP_KERNEL
38 adr r3, 2f
39 ldmia r3, {r4, r8}
40 sub r4, r3, r4 @ (PHYS_OFFSET - PAGE_OFFSET)
41 add r8, r8, r4 @ PHYS_OFFSET
42 #else
43 ldr r8, =PHYS_OFFSET @ always constant in this case #define PHYS_OFFSET   UL(CONFIG_DRAM_BASE)
44 #endif
复制代码

#1 :arch/arm/kernel/head-common.h

复制代码
 1 
14 __CPUINIT
15 __lookup_processor_type:
16 adr r3, __lookup_processor_type_data @adr 相对偏移读取,读取下面type_data地址
17 ldmia r3, {r4 - r6} @将该地址存放的值 放入r4(.),r5(begin),r6(end)
18 sub r3, r3, r4 @ get offset between virt&phys 链接地址-实际地址=偏移量
19     add    r5, r5, r3            @ convert virt addresses to    得到begin的虚拟起始地址
20 add r6, r6, r3 @ physical address space 得到end的虚拟起始地址
21 1: ldmia r5, {r3, r4} @ value, mask 得到r5的两个值到r3,r4
22 and r4, r4, r9 @ mask wanted bits 确定id值
23 teq r3, r4
24 beq 2f @相等返回,不等读取下一组
25 add r5, r5, #PROC_INFO_SZ @ sizeof(proc_info_list)
26 <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值