单片机
返回首页

分析u-boot的Makefile

2025-02-17 来源:cnblogs

这里分析三星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)

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 $< $@

10 

11 $(obj)u-boot.srec:    $(obj)u-boot

12 $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@

13 

14 $(obj)u-boot.bin:    $(obj)u-boot               #转换成.bin格式

15 $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@

16 

17 $(obj)u-boot.ldr:    $(obj)u-boot

18 $(LDR) -T $(CONFIG_BFIN_CPU) -f -c $@ $< $(LDR_FLAGS)

19 

20 $(obj)u-boot.ldr.hex:    $(obj)u-boot.ldr

21 $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary

22 

23 $(obj)u-boot.ldr.srec:    $(obj)u-boot.ldr

24 $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -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 $< $@

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 $< > $@

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_.*)/-u1/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 ' >>config.h


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 家用电器遥控器

  • 12V 转 28V DC-DC 变换器(基于 LM2585)

  • 红外开关

  • DS1669数字电位器

  • HA1377 桥式放大器 BCL 电容 17W(汽车音频)

    相关电子头条文章