分析u-boot的makefile

author author     2022-08-31     494

关键词:

  这里分析三星s5pv210芯片官方u-boot 

先看u-boot 版本号

VERSION = 1          #主版本号
PATCHLEVEL = 3   #次版本号
SUBLEVEL = 4     # 修改正版本号
EXTRAVERSION =    # 拓展版本号 
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
VERSION_FILE = $(obj)include/version_autogenerated.h

1 HOSTARCH := $(shell uname -m | \   # 将uname -m 结果通过管道传输到 sed 如果传输过来的是i686的话
2 sed -e s/i.86/i386/ \           # sed -e s/i.86/i386/  意思是用 sed 将i.86这些内容替换成i386 
                  . 的意思是匹配任意字符 i.86就是说匹配i为前缀 86为后缀中间任意字符    
3 -e s/sun4u/sparc64/ 4 -e s/arm.*/arm/ 5 -e s/sa110/arm/ 6 -e s/powerpc/ppc/ 7 -e s/ppc64/ppc/ 8 -e s/macppc/ppc/)

i686 是Ubantu 的CPU架构

  然后讲下针对特定平台设置。

smdkv210single_config : unconfig

        $1(将_config字符去掉) $2   $3          $4               $5            $6
@$(MKCONFIG) $(@:_config=)     arm s5pc11x smdkc110 samsung s5pc110

        #将参数n   $0 smdk210single   ($2:arm) $3 s5pc11x     $4 smdkc110   $5 samsung    $6 s5pc110 传入至顶层目录下的mkconfig.mk文件
@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/smdkc110/config.mk

 

  判断该目录下有无config.mk文件,有就包含改头文件,并输出 config.mk下的  ARCH(编译平台)  CPU   BOARD  VENDOR    SOC这些变量信息
1
feq ($(obj)include/config.mk,$(wildcard $(obj)include/config.mk)) wildcard函数是将展开所有符合起指定参数的文件名(指定参数为include/config.mk) 2 3 # load ARCH, BOARD, and CPU configuration 4 include $(obj)include/config.mk 5 export ARCH CPU BOARD VENDOR SOC // arm s5pc11x smdkc110 samsung s5pc110 由.mk配置文件可知

所要查找的config.mk 文件如下所示:(目录为:顶层目录下include/config.mk)

技术分享

    下面开始分析ARCH CPU BOARD 这些变量,对接下来编译的作用。

ifndef CROSS_COMPILE
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE =
else
ifeq ($(ARCH),ppc)
CROSS_COMPILE = ppc_8xx-
endif
ifeq ($(ARCH),arm)       判断ARCH 和arm 是否一样,有上面可知,在配置上面的步骤后是一样的。

#CROSS_COMPILE = arm-linux-
#CROSS_COMPILE = /usr/local/arm/4.4.1-eabi-cortex-a8/usr/bin/arm-linux-    
#CROSS_COMPILE = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
CROSS_COMPILE = /home/gec/arm-2009q3/bin/arm-none-linux-gnueabi-        #指定编译工具路径
endif

# load other configuration
include $(TOPDIR)/config.mk           #包含顶层config.mk文件,这个文件定义了交叉编译器即选项和编译规则

 

 #告诉了我们的Makefile OBJS依赖的目标文件是顶层目录下的cpu/s5pc11x/start.0

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

 #如果存在 board/samsung/common/Makefile 这个文件 就输出当前所依赖库文件的名字

LIBS = lib_generic/libgeneric.a   #指定相应库文件
LIBS += $(shell if [ -f board/$(VENDOR)/common/Makefile ]; then echo \
"board/$(VENDOR)/common/lib$(VENDOR).a"; fi)
LIBS += cpu/$(CPU)/lib$(CPU).a                  #指定相应库文件

 

 

 1 ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND) $(U_BOOT_ONENAND) $(obj)u-boot.dis
 2 ifeq ($(ARCH),blackfin)
 3 ALL += $(obj)u-boot.ldr
 4 endif
 5 
 6 all:    $(ALL)                  # all 依赖于$(ALL)
 7 
 8 $(obj)u-boot.hex:    $(obj)u-boot
 9 $(OBJCOPY) ${OBJCFLAGS} -O ihex $< [email protected]
10 
11 $(obj)u-boot.srec:    $(obj)u-boot
12 $(OBJCOPY) ${OBJCFLAGS} -O srec $< [email protected]
13 
14 $(obj)u-boot.bin:    $(obj)u-boot               #转换成.bin格式
15 $(OBJCOPY) ${OBJCFLAGS} -O binary $< [email protected]
16 
17 $(obj)u-boot.ldr:    $(obj)u-boot
18 $(LDR) -T $(CONFIG_BFIN_CPU) -f -c [email protected] $< $(LDR_FLAGS)
19 
20 $(obj)u-boot.ldr.hex:    $(obj)u-boot.ldr
21 $(OBJCOPY) ${OBJCFLAGS} -O ihex $< [email protected] -I binary
22 
23 $(obj)u-boot.ldr.srec:    $(obj)u-boot.ldr
24 $(OBJCOPY) ${OBJCFLAGS} -O srec $< [email protected] -I binary
25 
26 $(obj)u-boot.img:    $(obj)u-boot.bin                   #生成u-boot.img
27 ./tools/mkimage -A $(ARCH) -T firmware -C none 28 -a $(TEXT_BASE) -e 0 29 -n $(shell sed -n -e s/.*U_BOOT_VERSION//p $(VERSION_FILE) | 30 sed -e s/"[    ]*$$/ for $(BOARD) board"/) 31 -d $< [email protected]
32 
33 $(obj)u-boot.sha1:    $(obj)u-boot.bin
34 $(obj)tools/ubsha1 $(obj)u-boot.bin
35 
36 $(obj)u-boot.dis:    $(obj)u-boot            #生成反汇编代码 .dis 文件
37 $(OBJDUMP) -d $< > [email protected]
38 
39 $(obj)u-boot:    depend $(SUBDIRS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT)
40 UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | 41 sed -n -e s/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p|sort|uniq`;42 cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) 43 --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) 44 -Map u-boot.map -o u-boot

 

    这里说一下顶层目录下mkconfig.mk文件的作用:

1. 创建include/config.mk文件

  #
  # Create include file for Make
  #
  echo "ARCH = $2" > config.mk
  echo "CPU = $3" >> config.mk
  echo "BOARD = $4" >> config.mk

并将相关信息输出到config.mk文件

 

2. 创建开发板相关头文件

echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h

 

































u-boot主makefile详尽分析

U-boot主Makefile详尽分析主Makefile位于uboot源码的根目录下,其内容主要结构为:1.确定版本号及主机信息(23至48行)2.实现静默编译功能(48至55行)3.设置各种路径(56至123行)4.设置编译工具链(124至186行,大部分在config.mk内)5.... 查看详情

u-boot全面分析

 uboot主Makefile分析1ubootversion确定(Makefile的24-29行)HOSTARCH和HOSTOS(Makefile的31-43行)静默编译(50-54行)2种编译方法(原地编译和单独输出文件夹编译)编译方法实践两种编译的实现(Makefile的78-123行)include$(obj)include/config.mk... 查看详情

嵌入式开发(s5pv210)——u-boot的顶层makefile分析(代码片段)

前言本文分析的是u-boot的主Makefile以及主Makefile调用到的一些关键文件,此Makefile可能和你手里的u-boot的Makefile不一样,这是正常的,但是从逻辑上都是一样的,无非就是把同样功能的脚本放在了不同的位置或者子Ma... 查看详情

u-boot-2016.09顶层makefile分析

##SPDX-License-Identifier: GPL-2.0+#VERSION=2016PATCHLEVEL=09SUBLEVEL=EXTRAVERSION=NAME=#*DOCUMENTATION*#Toseealistoftypicaltargetsexecute"makehelp"#Moreinfocanbelocatedin./README#Commentsinthisfilear 查看详情

linux系统移植:u-boot顶层makefile分析(下)(代码片段)

目录Linux系统移植:U-Boot顶层Makefile分析(下)一、调用scripts/Kbuild.include二、导出交叉编译工具变量设置三、导出其他变量四、makexxx_config过程五、make过程Linux系统移植:U-Boot顶层Makefile分析(下)继续沿着... 查看详情

linux系统移植:u-boot顶层makefile分析(上)(代码片段)

目录Linux系统移植:U-Boot顶层Makefile分析(上)一、版本号二、传递变量到子make三、命令输出四、静默输出五、编译输出目录六、代码检查七、模块编译八、获取主机架构和系统九、设置目标架构、交叉编译器和配置... 查看详情

tiny4412u-boot分析u-boot配置流程分析

...maketiny4412_configmake这个过程主要涉及到两个文件,顶层的Makefile文件和mkconfig文件,makeconfig文件是一个脚本,通过文件的注释可以了解到它的作用#Scripttocreateheaderfilesandlinkstoconfigure#U-Bootforaspecificboard.##Para 查看详情

u-boot分析与使用(代码片段)

...u-boot打补丁、编译、烧写四、uboot功能、结构,结合Makefile进行分析五、u-boot分析之源码阶段六、u-boot分析之命令实现七、uboot启动内核一、u-boot介绍u-boot即通用的BootLoader,是遵循GPL条款的开放源代码项目。“通用”有两... 查看详情

u-boot顶层makefile介绍(*)(代码片段)

参考:U-Boot顶层Makefile介绍作者:一只青木呀发布时间:2020-10-2216:22:17网址:https://blog.csdn.net/weixin_45309916/article/details/109218569目录1、准备好uboot源码2、分析顶层Makefile2.1、版本号2.2、MAKEFLAGS变量2.3、 查看详情

嵌入式linux7.u-boot顶层makefile分析(代码片段)

...用ifeq来判断"$(originV)"和"commandline"是否相等。这里用到了Makefile中的函数originorigin和其他的函数不一样,它不操作变量的值, 查看详情

嵌入式linux7.u-boot顶层makefile分析(代码片段)

1.版本号5VERSION=20166PATCHLEVEL=037SUBLEVEL=8EXTRAVERSION=9NAME=VERSION是主版本号,PATCHLEVEL是补丁版本号,SUBLEVEL是次版本号,这三个一起构成了uboot的版本号,比如当前的uboot版本号就是“2016.03”。EXTRAVERSION是附加版本信息,NAME是和名字有... 查看详情

u-boot-2016.07移植(第一篇)初步分析

...m-linux-gcc443安装环境Ubuntu910下载u-boot-201607并解压分析顶层Makefile1找出目标依赖关系2总结初次编译u-boot1配置2编译分析u-boot启动流程1分析startS 查看详情

u-boot分析与使用(代码片段)

...u-boot打补丁、编译、烧写四、uboot功能、结构,结合Makefile进行分析五、u-boot分析之源码阶段六、u-boot分析之命令实现七、uboot启动内核一、u-boot介绍u-boot即通用的BootLoader,是遵循GPL条款的开放源代码项目。“通用”有两... 查看详情

uboot主makefile解析

...nfig,make的时候都作了那些动作呢,这里我先大概介绍一下Makefile的内容,然后在大概理解一下命令执行的流程。如果有错的地方,希望大家指正,谢谢。1.u-boot顶层目录的Makefile分析:HOSTARCH:=$(shelluname-m|      &... 查看详情

嵌入式linux从入门到精通之第十六节:u-boot分析

...在u-boot的根目录下执行:#makeunsp210_config//对应开发板配置Makefile会构建编译结构,如:架构、cpu、开发板、厂商、芯片、目录等,为下一步真正编译链接做准备。2、修改include/configs/unsp210.h配置文件3、在根目录下执行:make根据以... 查看详情

嵌入式开发(s5pv210)——u-boot的顶层config.mk分析(代码片段)

...路径等,但是config.mk的配置是建立在顶层mkconfig、主Makefile等配置之上的。2、config.mk的调用#loadotherconfigurationinclude$(TOPDI 查看详情

u-boot代码分析--第一节(代码片段)

u-boot代码分析--第一节编者:weirdo时间:2020-5-12QQ:2651293248标题:u-boot代码分析第一节1.u-boot.lds文件?? 这里指的是顶层目录下面的u-boot.lds,这里需要注意的是这个文件是根据arch/arm/cpu/armvx/对应的u-boot.lds模板生成的,在不严格的... 查看详情

u-boot代码分析--第一节(代码片段)

u-boot代码分析--第一节编者:weirdo时间:2020-5-12QQ:2651293248标题:u-boot代码分析第一节1.u-boot.lds文件?? 这里指的是顶层目录下面的u-boot.lds,这里需要注意的是这个文件是根据arch/arm/cpu/armvx/对应的u-boot.lds模板生成的,在不严格的... 查看详情