u-boot-1.1.6的配置编译过程分析.doc_第1页
u-boot-1.1.6的配置编译过程分析.doc_第2页
u-boot-1.1.6的配置编译过程分析.doc_第3页
u-boot-1.1.6的配置编译过程分析.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

uboot更目录下的Makefile分析一.配置过程(make smdk2410_config):smdk2410_config:unconfig /相当于执行这条语句$(MKCONFIG) $(:_config=) arm arm920t smdk2410 NULL s3c24x0-解析-MKCONFIG:= $(SRCTREE)/mkconfig 最终替换mkconfig$(:_config=) 表示目标,最终替换smdk2410从而说明,执行make smdk2410_config命令,相当于执行以下命令:mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0= $0 $1 $2 $3 $4 $5 $6 命令 cpu的架构 cpu类型,对应于cpuarm920t 开发板型号,boardsmdk2410 厂家 soc注:在linux的脚本文件里面,可以用$n来表示第n个参数,$0才是第一个参数,即为命令!=对上一句命令进一步解析:打开uboot更目录下面的mkconfig脚本文件,观看分析: $BOARD_NAME | BOARD_NAME=$1 /如果有BOARD_NAME,就用这个的BOARD_NAME, /如果为空,则让BOARD_NAME = $1(即smdk2410)cd ./includerm -f asmln -s asm-$2 asm /相当于ln -s asm-arm asm(建立一个连接文件asm,指向asm-arm)问:为什么要建立这样的连接文件呢?答:是为了在源码中写代码的方便,比如: #include /源码中的书写形式! 但是当执行完配置命令后,就相当于#include 。这样方便支持多种建构rm -f asm-$2/arch /rm -f asm-arm/archln -s $LNPREFIXarch-$6 asm-$2/arch /ln -s arch-s3c24x0 asm-arm/arch /在asm-arm目录下建立一个连接文件arch,指向arch-s3c24x0 rm -f asm-$2/procln -s $LNPREFIXproc-armv asm-$2/proc /ln -s proc-armv asm-arm/proc /在asm-arm目录下建立一个连接文件proc,指向proc-armv*# Create include file for Make# 创建一个配置文件config.mkecho ARCH = $2 config.mk /表示新建文件echo CPU = $3 config.mk /表示在原有的文件中追加类容echo BOARD = $4 config.mk $5 & $5 != NULL & echo VENDOR = $5 config.mk $6 & $6 != NULL & echo SOC = $6 config.mk*执行以上5句命令后,相当于config.mk中有类容*ARCH = arm CPU = arm920t BOARD = $4smdk2410SOC = s3c24x0注意:config.mk用于更目录的Makefile完成相关的配置筛选!*# Create board specific header file#创建一个单板相关的头文件 config.h# Create new config filefiecho /* Automatically generated - do not edit */ config.hecho #include config.h*执行以上4句命令后,相当于config.h中有类容*Automatically generated - do not edit#include 注意:config.h用于完成代码中相关配置的筛选!*二.编译过程(make)再看Makefile.# load ARCH, BOARD, and CPU configurationinclude $(OBJTREE)/include/config.mk /包含上面配置过程生成的config.mk文件ifeq ($(ARCH),arm)CROSS_COMPILE = arm-linux- /如果ARCH = arm,则编译工具为arm-linux-OBJS = cpu/$(CPU)/start.o /非常重要的命令! /$(CPU) 即调用CPU = arm920t 即:OBJS = cpu/arm920t/start.oLIBS = lib_generic/libgeneric.a LIBS += board/$(BOARDDIR)/lib$(BOARD).a /LIBS += board/smdk2410/libsmdk2410.aLIBS += cpu/$(CPU)/lib$(CPU).a /LIBS += cpu/arm920t/libarm920t.a.-或者展开下列的定义:ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)$(obj)u-boot.bin:$(obj)u-boot$(OBJCOPY) $OBJCFLAGS -O binary $ $(obj)u-boot:depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)UNDEF_SYM=$(OBJDUMP) -x $(LIBS) |sed -n -e s/.*(_u_boot_cmd_.*)/-u1/p|sort|uniq;cd $(LNDIR) & $(LD) $(LDFLAGS) $UNDEF_SYM $(_OBJS) -start-group $(_LIBS) -end-group $(PLATFORM_LIBS) -Map u-boot.map -o u-boot-或者直接make,然后观察编译信息:cd /uboot_kernel/u-boot-1.1.6 &arm-linux-ld -Bstatic -T /uboot_kernel/u-boot-1.1.6/board/smdk2410/u-boot.lds -Ttext 0x33F80000 $UNDEF_SYM cpu/arm920t/start.o -start-group lib_generic/libgeneric.a board/smdk2410/libsmdk2410.a cpu/arm920t/libarm920t.a cpu/arm920t/s3c24x0/libs3c24x0.a lib_arm/libarm.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a drivers/sk98lin/libsk98lin.a post/libpost.a post/cpu/libcpu.a common/libcommon.a -end-group -L /usr/local/arm/3.4.1/bin/./lib/gcc/arm-linux/3.4.1 -lgcc -Map u-boot.map -o u-boot- 注:从上面的连接过程得知。目标是依赖于连接脚本,start.o和许多lib库文件!问:那么多的连接时,依赖的原材料,让门谁放在最前面呢?答:看连接脚本(board/smdk2410/u-boot.lds)便可以知道答案!打开u-boot.lds,分析:SECTIONS. = 0x00000000; /当前地址等于0 /但是该地址会加上-Ttext 0x33F80000指出的0x33F80000,用于说明以后的东西会从0x33F80000这个地方开始排放! /另外注意:-Ttext 0x33F80000中的0x33F8000是由board/smdk2410/config.mk中定义的!这个的值可以根据自己开发板的内存的大小来做相应的调整!. = ALIGN(4); /下面采用4字节对齐方式.text : cpu/arm920t/start.o(.text) /最先放该文件的所有的代码段! *(.text) /再放其他的所有文件的代码段. = ALIGN(4);.rodata : *(.rodata) /所有文件的只读数据段(由const定义). = ALIGN(4);.data : *(.data) /所有文件的数据段. = ALIGN(4);.got : *(.got) /. = .; /当前地址_u_boot_cmd_start = .; /_u_boot_cmd_start等于当前地址.u_boot_cmd : *(.u_boot_cmd) /所有文件的.u_boot_cmd(由uboot自己定义的)段_u_boot_cmd_end = .;. = ALIGN(4);_bss_start = .;.bss : *(.bss) _end = .;-综上得出结论:uboot被start.o来贯穿的! 数据的排放是根据连接脚本u-boot.lds来排放的!共享以前分析uboot时做的笔记,包括: 1.u-boot-1.1.6的配置编译过程分析.doc 2.u-boot-2012.04.01的配置编译过程分析.doc 3.u-boot-1.1.6完全注释,基本实现了逐行的注释。 . / 后继更新的将直接上传群共享 请大家原谅哈,由于我们想建立一个uboot技术交流社区,需要经费。故上述uboot笔记,需要9元钱购买,购买链接地址:/item.htm?spm=1.lHTZaH&id当然,为了让大家觉得花钱值得。大家购买后,可以凭借购买的帐号,加入“uboot移植交流

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论