您的位置 首页 发布

u-boot的Makefile剖析

u-boot的Makefile分析,U-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*。U-BOOT的下载

U-BOOT是一个LINUX下的工程,在编译之前有必要现已装置对应系统结构的穿插编译环境,这儿只针对ARM,编译器系列软件为arm-linux-*。

U-BOOT的下载地址: http://sourceforge.net/projects/u-boot
我下载的是1.1.6版别,一开始在FTP上下载了一个次新版,成果编译失利。1.1.6是没问题的。

u-boot源码结构

解压就能够得到悉数u-boot源程序。在顶层目录下有18个子目录,别离寄存和办理不同的源程序。这些目录中所要寄存的文件有其规矩,能够分为3类。
第1类目录与处理器系统结构或许开发板硬件直接相关;
第2类目录是一些通用的函数或许驱动程序;
第3类目录是u-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渠道通用的函数

lib_i386 渠道依靠 寄存对X86系统结构通用的文件,
首要用于完成X86渠道通用的函数

include 通用 头文件和开发板装备文件,
一切开发板的装备文件都在configs目录下

common 通用 通用的多功能函数完成
lib_generic 通用 通用库函数的完成
net  通用 寄存网络的程序
fs  通用 寄存文件系统的程序
post  通用 寄存上电自检程序
drivers   通用 通用的设备驱动程序,首要有以太网接口的驱动
disk   通用 硬盘接口程序
rtc   通用 RTC的驱动程序
dtt   通用 数字温度测量器或许传感器的驱动
examples 运用例程 一些独立运转的运用程序的比如,例如helloworld
tools   东西 寄存制造S-Record或许u-boot格局的映像等东西,
例如mkimage

doc   文档 开发运用文档

u-boot的源代码包括对几十种处理器、数百种开发板的支撑。但是关于特定的开发板,装备编译进程只需要其间部分程序。这儿详细以S3C2410 arm920t处理器为例,详细剖析S3C2410处理器和开发板所依靠的程序,以及u-boot的通用函数和东西。

编译

以smdk_2410板为例,编译的进程分两部:

# make smdk2410_config
# make

顶层Makefile剖析

要了解一个LINUX工程的结构有必要看懂Makefile,尤其是顶层的,没办法,UNIX国际便是这么无法,什么东西都用文档去办理、装备。首要在这方面我是个新手,时刻所限只浅显地看了一些Makefile规矩。

以smdk_2410为例,次序剖析Makefile大致的流程及结构如下:

1) Makefile中界说了源码及生成的方针文件寄存的目录,方针文件寄存目录BUILD_DIR能够经过make O=dir 指定。假如没有指定,则设定为源码顶层目录。一般编译的时分不指定输出目录,则BUILD_DIR为空。其它目录变量界说如下:

#OBJTREE和LNDIR为寄存生成文件的目录,TOPDIR与SRCTREE为源码地点目录
OBJTREE:= $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE:= $(CURDIR)
TOPDIR:= $(SRCTREE)
LNDIR:= $(OBJTREE)
exportTOPDIR SRCTREE OBJTREE

2)界说变量MKCONFIG:这个变量指向一个脚本,即顶层目录的mkconfig。

MKCONFIG:= $(SRCTREE)/mkconfig
export MKCONFIG

在编译U-BOOT之前,先要履行

# make smdk2410_config

smdk2410_config是Makefile的一个方针,界说如下:

smdk2410_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

unconfig::
@rm -f $(obj)include/config.h $(obj)include/config.mk
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp

明显,履行# make smdk2410_config时,先履行unconfig方针,留意不指定输出方针时,obj,src变量均为空,unconfig下面的指令清理上一次履行make *_config时生成的头文件和makefile的包括文件。首要是include/config.h 和include/config.mk文件。

然后才履行指令

@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
MKCONFIG 是顶层目录下的mkcofig脚本文件,后边五个是传入的参数。

关于smdk2410_config而言,mkconfig首要做三件事:

在include文件夹下树立相应的文件(夹)软衔接,

#假如是ARM系统将履行以下操作:
#ln -s asm-arm asm

#ln -s arch-s3c24x0 asm-arm/arch
#ln -s proc-armv asm-arm/proc

生成Makefile包括文件include/config.mk,内容很简单,界说了四个变量:

ARCH = arm
CPU = arm920t
BOARD = smdk2410
SOC = s3c24x0

生成include/config.h头文件,只要一行:

/* Automatically generated – do not edit */
#include config/smdk2410.h

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/133549.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部