U-Boot移植(6)总结U-Boot工程的总体结构

本文深入解析U-Boot的源代码组织结构和顶层Makefile,包括主要目录的功能、Makefile的配置过程以及如何通过顶层Makefile生成最终的u-boot.bin文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、源代码组织

对于ARM而言,主要的目录如下:

board                  平台依赖          存放电路板相关的目录文件,每一套板子对 应一个目录。如smdk2410(arm920t)

                                                                                                                    

cpu                    平台依赖           存放CPU相关的目录文件,每一款CPU对应一个目录,例如:arm920t、 xscale、i386等目录

lib_arm                平台依赖            存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数,软件浮点。

common              通用          通用的多功能函数实现,如环境,命令,控制台相关的函数实现。

include                通用               头文件和开发板配置文件,所有开发板的配置文件都在configs目录下                                       

lib_generic         通用             通用库函数的实现

net                    通用                存放网络协议的程序

drivers              通用               通用的设备驱动程序,主要有以太网接口的驱动,nand驱动。

.......

2.makefile简要分析

所有这些目录的编译连接都是由顶层目录的makefile来确定的。

在执行make之前,先要执行make $(board)_config 对工程进行配置,以确定特定于目标板的各个子目录和头文件。

$(board)_config:是makefile 中的一个伪目标,它传入指定的CPU,ARCH,BOARD,SOC参数去执行mkconfig脚本。

这个脚本的主要功能在于连接目标板平台相关的头文件夹,生成config.h文件包含板子的配置头文件。

使得makefile能根据目标板的这些参数去编译正确的平台相关的子目录。

以我的ylp2410板为例,执行 make 100ask24x0_config。

主要完成三个功能

@在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  = 100ask24x0

SOC    = s3c24x0

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

/* Automatically generated - do not edit */

#include <configs/100ask24x0.h>

顶层makefile先调用各子目录的makefile,生成目标文件或者目标文件库。

然后再连接所有目标文件(库)生成最终的u-boot.bin。

连接的主要目标(库)如下:

OBJS  = cpu/$(CPU)/start.o

LIBS  = lib_generic/libgeneric.a

LIBS += board/$(BOARDDIR)/lib$(BOARD).a

LIBS += cpu/$(CPU)/lib$(CPU).a

ifdef SOC

LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a

endif

LIBS += lib_$(ARCH)/lib$(ARCH).a

LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a \

fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a

LIBS += net/libnet.a

LIBS += disk/libdisk.a

LIBS += rtc/librtc.a

LIBS += dtt/libdtt.a

LIBS += drivers/libdrivers.a

LIBS += drivers/nand/libnand.a

LIBS += drivers/nand_legacy/libnand_legacy.a

LIBS += drivers/sk98lin/libsk98lin.a

LIBS += post/libpost.a post/cpu/libcpu.a

LIBS += common/libcommon.a

LIBS += $(BOARDLIBS)

显然跟平台相关的主要是:

cpu/$(CPU)/start.o

board/$(BOARDDIR)/lib$(BOARD).a 

cpu/$(CPU)/lib$(CPU).a

cpu/$(CPU)/$(SOC)/lib$(SOC).a 

lib_$(ARCH)/lib$(ARCH).a

这里面的四个变量定义在include/config.mk(见上述)。

其余的均与平台无关。

所以考虑移植的时候也主要考虑这几个目标文件(库)对应的目录。

关于u-boot 的makefile更详细的分析可以参照http://blog.mcuol.com/User/lvembededsys/Article/4355_1.htm

本文参考:http://deshunfan.blog.163.com/blog/static/34244101200972832324749/

转载于:https://www.cnblogs.com/huanghuang/archive/2011/07/14/2106410.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值