[转载] linux启动流程分析(4)---汇编部分(1)
来源:互联网 发布:淘宝一千零一夜2男主角 编辑:程序博客网 时间:2024/05/15 23:44
原文地址:http://www.eetop.cn/blog/html/45/11145-1367.ht
================================
Author: taoyuetao
Email:tao_yuetao@yahoo.com.cn
Blog:http://www.eetop.cn/blog/?11145
2007-02-08
================================
在网上参考很多高手的文章,又加入了自己的一点儿内容,整理了一下,里面还有很多不明白的地方,而且也会有理解错误
的地方,望高手指点,自己也会不断进行修改
当进入linux内核后,arch/arm/kernel/head-armv.S是内核最先执行的一个文件,包括从内核入口ENTRY(stext)到
start_kernel之间的初始化代码,下面以我所是用的平台intel pxa270为例,说明一下他的汇编代码:
1 .section ".text.init",#alloc,#execinstr
2 .type stext, #function
/* 内核入口点 */
3 ENTRY(stext)
4 mov r12, r0
/* 程序状态,禁止FIQ、IRQ,设定SVC模式 */
5 mov r0, #F_BIT | I_BIT | MODE_SVC @ make sure svc mode
6 msr cpsr_c, r0 @ and all irqs disabled
/* 判断CPU类型,查找运行的CPU ID值与Linux编译支持的ID值是否支持 */
7 bl __lookup_processor_type
/* 判断如果r10的值为0,则表示函数执行错误,跳转到出错处理,*/
/* 出错处理函数__error的实现代码定义在debug-armv.S中,这里就不再作过多介绍了 */
8 teq r10, #0 @ invalid processor?
9 moveq r0, #'p' @ yes, error 'p'
10 beq __error
/* 判断体系类型,查看R1寄存器的Architecture Type值是否支持 */
11 bl __lookup_architecture_type
/* 判断如果r7的值为0,则表示函数执行错误,跳转到出错处理,*/
12 teq r7, #0 @ invalid architecture?
13 moveq r0, #'a' @ yes, error 'a'
14 beq __error
/* 创建核心页表 */
15 bl __create_page_tables
16 adr lr, __ret @ return address
17 add pc, r10, #12 @ initialise processor
@ (return control reg)
第5行,准备进入SVC工作模式,同时关闭中断(I_BIT)和快速中断(F_BIT)
第7行,查看处理器类型,主要是为了得到处理器的ID以及页表的flags。
第11行,查看一些体系结构的信息。
第15行,建立页表。
第17行,跳转到处理器的初始化函数,其函数地址是从__lookup_processor_type中得到的,
需要注意的是第16行,当处理器初始化完成后,会直接跳转到__ret去执行,
这是由于初始化函数最后的语句是mov pc, lr。
- [转载] linux启动流程分析(4)---汇编部分(1)
- [转载] linux启动流程分析(4)---汇编部分(4)
- [转载] linux启动流程分析(4)---汇编部分(2)
- [转载] linux启动流程分析(4)---汇编部分(3)
- [转载] linux启动流程分析(4)---汇编部分(5)
- ARM Linux启动流程分析——start_kernel前启动阶段(汇编部分)
- ARM Linux启动流程分析——start_kernel前启动阶段(汇编部分)
- [转载] linux启动流程分析(1)---bootloader启动内核过程
- (二)u-boot启动流程分析(汇编部分)
- 内核启动流程1——汇编部分
- linux启动流程--Android内核部分启动流程触类旁通(转载)
- linux启动流程分析(4)
- [转载] linux启动流程分析(3)---内核解压缩过程
- linux源码分析--内核启动之(2)Image内核启动(汇编部分)
- Linux启动流程分析
- linux启动流程分析
- linux启动流程分析
- [Linux] 启动流程分析
- CAD多行文本中文字的堆叠
- [转载] linux启动流程分析(2)---内核启动地址的确定
- C/C++也可以写的很安全!
- [转载] linux启动流程分析(3)---内核解压缩过程
- 关于Picasa
- [转载] linux启动流程分析(4)---汇编部分(1)
- js动画效果
- [转载] linux启动流程分析(4)---汇编部分(2)
- [转载] linux启动流程分析(4)---汇编部分(3)
- 判断excel文件是否被打开
- [转载] linux启动流程分析(4)---汇编部分(4)
- EXT2.0 checkbox树的扩展(支持单选,级联多选,只选叶子等)
- 看不到英雄的年代
- [转载] linux启动流程分析(4)---汇编部分(5)