收藏 分享(赏)

U-BOOT中MAKEFILE详解.doc

上传人:精品资料 文档编号:11004821 上传时间:2020-01-31 格式:DOC 页数:9 大小:61.50KB
下载 相关 举报
U-BOOT中MAKEFILE详解.doc_第1页
第1页 / 共9页
U-BOOT中MAKEFILE详解.doc_第2页
第2页 / 共9页
U-BOOT中MAKEFILE详解.doc_第3页
第3页 / 共9页
U-BOOT中MAKEFILE详解.doc_第4页
第4页 / 共9页
U-BOOT中MAKEFILE详解.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、U-BOOT 详解UBOOT 是一个 LINUX 下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对 ARM,编译器系列软件为 arm-linux-*。UBOOT 的下载地址: http:/ 1.1.6 版本,一开始在 FTP 上下载了一个次新版,结果编译失败。1.1.6 是没问题的。u-boot 源码结构解压就可以得到全部 u-boot 源程序。在顶层目录下有 18 个子目录,分别存放和管理不同的源程序。这些目录中所要存放的文件有其规则,可以分为 3 类。第 1 类目录与处理器体系结构或者开发板硬件直接相关;第 2 类目录是一些通用的函数或者驱动程序;第 3 类目录是 u

2、-boot 的应用程序、工具或者文档。u-boot 的源码顶层目录说明目 录 特 性 解释说明board 平台依赖 存放电路板相关的目录文件,例如:RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86) 等目录cpu 平台依赖 存放 CPU 相关的目录文件例如:mpc8xx、ppc4xx、arm720t、arm920t、 xscale、i386 等目录lib_ppc 平台依赖 存放对 PowerPC 体系结构通用的文件,主要用于实现 PowerPC 平台通用的函数lib_arm 平台依赖 存放对 ARM 体系结构通用的文件,主要用于实现 ARM 平台通

3、用的函数lib_i386 平台依赖 存放对 X86 体系结构通用的文件,主要用于实现 X86 平台通用的函数include 通用 头文件和开发板配置文件,所有开发板的配置文件都在 configs 目录下common 通用 通用的多功能函数实现lib_generic 通用 通用库函数的实现net 通用 存放网络的程序fs 通用 存放文件系统的程序post 通用 存放上电自检程序drivers 通用 通用的设备驱动程序,主要有以太网接口的驱动disk 通用 硬盘接口程序rtc 通用 RTC 的驱动程序dtt 通用 数字温度测量器或者传感器的驱动examples 应用例程 一些独立运行的应用程序的例

4、子,例如helloworldtools 工具 存放制作 S-Record 或者 u-boot 格式的映像等工具,例如 mkimagedoc 文档 开发使用文档u-boot 的源代码包含对几十种处理器、数百种开发板的支持。可是对于特定的开发板,配置编译过程只需要其中部分程序。这里具体以 S3C2410 echo -n “$(U_BOOT_VERSION)“ $(VERSION_FILE); echo -n $(shell $(CONFIG_SHELL) $(TOPDIR)/tools/setlocalversion $(TOPDIR) $(VERSION_FILE); echo “ $(VERS

5、ION_FILE)伪目标 SUBDIRS: 执行 tools ,examples ,post,postcpu 子目录下面的 make文件。SUBDIRS = tools examples post post/cpu.PHONY : $(SUBDIRS)$(SUBDIRS):$(MAKE) -C $ all依赖目标$(OBJS),即 cpu/start.o $(OBJS):$(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$,$(notdir $)依赖目标$(LIBS),这个目标太多,都是每个子目录的库文件*.a ,通过执行相应子目录下的 make 来完成:$

6、(LIBS):$(MAKE) -C $(dir $(subst $(obj),$) 依赖目标$(LDSCRIPT):LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.ldsLDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)对于 smdk2410,LDSCRIPT 即连接脚本文件是 board/smdk2410/u-boot.lds,定义了连接时各个目标文件是如何组织的。内容如下:OUTPUT_FORMAT(“elf32-littlearm“, “elf3

7、2-littlearm“, “elf32-littlearm“)/*OUTPUT_FORMAT(“elf32-arm“, “elf32-arm“, “elf32-arm“)*/OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS. = 0x00000000;. = ALIGN(4);.text :/*.text 的基地址由 LDFLAGS 中-Ttext $(TEXT_BASE)指定*/ /*smdk2410 指定的基地址为 0x33f80000*/cpu/arm920t/start.o (.text) /*start.o 为首*/*(.text). = ALIGN(4)

8、;.rodata : *(.rodata) . = ALIGN(4);.data : *(.data) . = ALIGN(4);.got : *(.got) . = .;_u_boot_cmd_start = .;.u_boot_cmd : *(.u_boot_cmd) _u_boot_cmd_end = .;. = ALIGN(4);_bss_start = .;.bss : *(.bss) _end = .;执行连接命令:cd $(LNDIR) & $(LD) $(LDFLAGS) $UNDEF_SYM $(_OBJS) -start-group $(_LIBS) -end-group

9、$(PLATFORM_LIBS) -Map u-boot.map -o u-boot其实就是把 start.o 和各个子目录 makefile 生成的库文件按照 LDFLAGS 连接在一起,生成 ELF 文件 u-boot 和连接时内存分配图文件 u-boot.map。 9)对于各子目录的 makefile 文件,主要是生成*.o 文件然后执行 AR 生成对应的库文件。如 lib_generic 文件夹 Makefile:LIB = $(obj)libgeneric.aCOBJS = bzlib.o bzlib_crctable.o bzlib_decompress.o bzlib_randt

10、able.o bzlib_huffman.o crc32.o ctype.o display_options.o ldiv.o string.o vsprintf.o zlib.oSRCS := $(COBJS:.o=.c)OBJS := $(addprefix $(obj),$(COBJS)$(LIB): $(obj).depend $(OBJS) #项层 Makefile 执行 make libgeneric.a$(AR) $(ARFLAGS) $ $(OBJS)整个 makefile 剩下的内容全部是各种不同的开发板的*_config:目标的定义了。概括起来,工程的编译流程也就是通过执行执行一个 make *_config 传入ARCH,CPU,BOARD,SOC 参数,mkconfig 根据参数将 include 头文件夹相应的头文件夹连接好,生成 config.h。然后执行 make 分别调用各子目录的makefile 生成所有的 obj 文件和 obj 库文件*.a. 最后连接所有目标文件,生成镜像。不同格式的镜像都是调用相应工具由 elf 镜像直接或者间接生成的。剩下的工作就是分析 U-Boot 源代码了。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报