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

发布时间:2023-08-30  

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

顶层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。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>