arm linux内核启动分析

arm linux内核启动分析

ID:1748619

大小:111.50 KB

页数:16页

时间:2017-11-13

arm linux内核启动分析_第1页
arm linux内核启动分析_第2页
arm linux内核启动分析_第3页
arm linux内核启动分析_第4页
arm linux内核启动分析_第5页
资源描述:

《arm linux内核启动分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ARMlinux 内核启动分析[原创2007-06-1110:35:46]发表者:jimmy_leehead-armv.S主支分析head-armv.S是解压后(或未压缩)的内核最先执行的一个文件,这个文件位于arch/arm/kernel/head-armv.S,在与这个文件同目录下还有一个文件head-armo.S与head-armv.S很相似,但从arch/arm/下的Makefile中可以看到区别在哪里:ifeq($(CONFIG_CPU_26),y)PROCESSOR:=armoifeq($(CONFIG_ROM_KERNEL),

2、y)DATAADDR=0x02080000TEXTADDR=0x03800000LDSCRIPT=arch/arm/vmlinux-armo-rom.lds.inelseTEXTADDR=0x02080000LDSCRIPT=arch/arm/vmlinux-armo.lds.inendifendififeq($(CONFIG_CPU_32),y)PROCESSOR=armvTEXTADDR=0xC0008000LDSCRIPT=arch/arm/vmlinux-armv.lds.inendif……HEAD:=arch/arm/kernel

3、/head-$(PROCESSOR).oarch/arm/kernel/init_task.o闲话少说,在进入分析head-armv.S之前,交待一下我所分析的内核版本号以及硬件平台,内核是2.4.19-rmk7-pxa2,对应的硬件平台为pxa270。开篇说到,head-armv.S是进入内核最先执行的文件,为什么呢?内核可执行文件由许多链接在一起的对象文件组成。对象文件有许多节,如文本、数据、init数据、bass等等。这些对象文件都是由一个称为linkscript的文件链接并装入的。这个linkscript的功能是将输入对象文件的各

4、节映射到输出文件中;换句话说,它将所有输入对象文件都链接到单一的可执行文件中,将该可执行文件的各节装入到指定地址处。vmlinux-armv.lds就是链接内核用到的linkscript,它位于arch/arm/目录下,你可能注意到了同目录下还有一vmlinux-armv.lds.in文件,这两文件可是有关系的,答案就在arch/arm/Makefile里。ifeq($(CONFIG_CPU_32),y)/*对于pxa270来说这里是True*/PROCESSOR=armvTEXTADDR=0xC0008000LDSCRIPT=arch/a

5、rm/vmlinux-armv.lds.inendifarch/arm/vmlinux.lds:arch/arm/Makefile$(LDSCRIPT)$(wildcardinclude/config/cpu/32.h)$(wildcardinclude/config/cpu/26.h)$(wildcardinclude/config/arch/*.h)@echo'Generating$@'@sed's/TEXTADDR/$(TEXTADDR)/;s/DATAADDR/$(DATAADDR)/'$(LDSCRIPT)>$@从这个Mak

6、efile中我们可以看到,实际上arch/arm/vmlinux-armv.lds.in就是arch/arm/vmlinux-armv.lds是一个蓝本,在make的时候vmlinux-armv.lds是由sed命令来替换vmlinux-armv.lds.in文件中的TEXTADDR,DATAADDR为特定的值而生成的。接下来就来真正看一下vmlinux-armv.lds里面的内容:OUTPUT_ARCH(arm)ENTRY(stext)SECTIONS{.=0xC0008000;.init:{/*Initcodeanddata*/_ste

7、xt=.;__init_begin=.;*(.text.init)__proc_info_begin=.;*(.proc.info)__proc_info_end=.;__arch_info_begin=.;*(.arch.info)__arch_info_end=.;……}……}ENTRY(stext),就是说明了最先执行的第一条指令是从stext开始,而这个stext就是位于head-armv.S当中,它被定义于放置于.text.initsection,而且.text.initsection在vmlinux.lds文件中也是被放置于输出

8、文件的起始位置。/*arch/arm/kernel/head-armv.S*/93.section".text.init",#alloc,#execinstr94.typeste

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。