U-BOOT中MAKEFILE详解【1】

 

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)
export TOPDIR SRCTREE OBJTREE
2 定义变量 MKCONFIG :这个变量指向一个脚本,即顶层目录的 mkconfig
Mkconfig 源码详解见 http://student.csdn.net/space.php?uid=91306&do=blog&id=6389
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"
mkconfig 脚本文件的执行至此结束,继续分析 Makefile 剩下部分。
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值