欢迎来到天天文库
浏览记录
ID:1748619
大小:111.50 KB
页数:16页
时间:2017-11-13
《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
此文档下载收益归作者所有