欢迎来到天天文库
浏览记录
ID:22954232
大小:102.50 KB
页数:29页
时间:2018-11-02
《aoyuetao-linux启动流程分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、http://www.eetop.cn/blog/?taoyuetaolinux启动流程分析(1)---bootloader启动内核过程================================Author:taoyuetaoEmail:tao_yuetao@yahoo.com.cnBlog:http://www.eetop.cn/blog/?111452006-11-01================================我分析的是2.4.19的内核版本,是xscale的平台,参考了网上很多有价值的帖子,也加入了自己的一些看法,陆续总结成文字,今天是第一
2、篇:内核一般是由bootloader来引导的,通过bootloader启动内核一般要传递三个参数,第一个参数放在寄存器0中,一般都为0,r0=0;第二个参数放在寄存器1中,是机器类型id,r1=MachineTypeNumber;第三个参数放在寄存器2中,是启动参数标记列表在ram中的起始基地址;bootloader首先要将ramdisk(如果有)和内核拷贝到ram当中,然后可以通过c语言的模式启动内核:void(*startkernel)(intzero,intarch, unsignedint params_addr)=(void(*)(int,int,unsigned
3、int))KERNEL_RAM_BASE;startkernel(0,ARCH_NUMBER,(unsignedint)kernel_params_start);其中KERNEL_RAM_BASE为内核在ram中启动的地址,ARCH_NUMBER是MachineTypeNumber,kernel_params_start是参数在ram的偏移地址。这时候就将全力交给了内核。linux启动流程分析(2)---内核启动地址的确定================================Author:taoyuetaoEmail:tao_yuetao@yahoo.com.cn
4、Blog:http://www.eetop.cn/blog/?111452006-11-03================================内核编译链接过程是依靠vmlinux.lds文件,以arm为例vmlinux.lds文件位于kernel/arch/arm/vmlinux.lds,但是该文件是由vmlinux-armv.lds.in生成的,根据编译选项的不同源文件还可以是vmlinux-armo.lds.in,vmlinux-armv-xip.lds.in。vmlinux-armv.lds的生成过程在kernel/arch/arm/Makefile中L
5、DSCRIPT =arch/arm/vmlinux-armv.lds.inarch/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)>$@vmli
6、nux-armv.lds.in文件的内容:OUTPUT_ARCH(arm)ENTRY(stext)SECTIONS{ .=TEXTADDR; .init:{ /*Initcodeanddata */ _stext=.; __init_begin=.; *(.text.init) __proc_info_begin=.; *(.proc.info) __proc_info_end=.; __arch_info_begin=.;
7、 *(.arch.info) __arch_info_end=.; __tagtable_begin=.; *(.taglist) __tagtable_end=.; *(.data.init) .=ALIGN(16); __setup_start=.; *(.setup.init) __setup_end=.; __initcall_start=.;
此文档下载收益归作者所有