SylixOS Makefile浅析

zynq7000 Makefile浅析

一、Makefile布局

1、bspzynq7000中主要包括:SylixOS、Makefile(顶层Makefile)、config.mk。
2、SylixOS目录包括:bsp、driver、user、bspbuild.mk、config.ld、config.lds、Makefile(子目录Makefile)、srcs.mk、SylixOSBSP.ld。
在这里插入图片描述

二、顶层Makefile分析

1)BOARD_LIST为Makefile中的变量,统计不同平台

2)export SYLIXOS_BASE_DIR = $$(SYLIXOS_BASE_PATH)把同级目录config.mk中 SYLIXOS_BASE_PATH传给子目录Makefile使用。

3)遍历BORD_LIST变量取出不同板卡的board,通过export BOARD=$$board;导入给子目录使用。

($$是shell中的变量)

4)make -C SylixOS .(把当前工作转移到SylixOS目录下)
make -C SylixOS all. (就是编译SylixOS目录下的所有代码。)
all一般是伪目标,clean一般是伪目标。就是编译所有目标和删除所有目标。
在这里插入图片描述

三、顶层config.mk分析

1、SYLIXOS_BASE_PATH:可以引用相对路径和绝对路径。(在windows下的cmd命令行编译时,一定要用绝对路径)
2、DEBUG_LEVEL:此选项可以是debug或者release。
3、FPU_TYPE:此选项根据平台选择那种浮点类型。
在这里插入图片描述

四、SylixOS目录下Makefile分析

1、下图这几行代码,主要是要查找config.mk的存在,如果上一级目录存在config.mk,就包含config.mk,依次类推。
在这里插入图片描述2、下图主要是包含base中的config.mk。

1)SPACE变量代表两个空格。

2)SYLIXOS_BASE_PATH_BAK:获得base路径,SYLIXOS_BASE_PATH_DIR:是从顶层Makefile导入进来的。(疑问:SYLIXOS_BASE_PATH在顶层config.mk中存在,为啥还需要export在顶层Makefile中导出SYLIXOS_BASE_PATH_DIR)

3)TOOLCHAIN_PREFIX_BAK:获得编译链,TOOLCHAIN_PREFIX是从base中的config.mk导入进来。(自己的理解:makefile都是展开的,base中config.mk在下边声明也可以)

4)CPU_TYPE_BAK:获得CPU_TYPE类型。(是从顶层config.mk导入进来的)
5)FPU_TYPE_BAK获得FPU_TYPE类型。(是从顶层config.mk导入进来的)
在这里插入图片描述
3、下图主要是通过添加头文件方式添加header.mk

  1. MKETEMP:base中的mktemp文件夹的路径赋值给MKETEMP变量
  2. header.mk:通过include插入到本文件中。header.mk包括编译bsp用到的相关.mk,如:bsp.mk、end.mk、gcc.mk。 bsp.mk包含comman.mk。 在这里插入图片描述在这里插入图片描述4、包含板级支持包中相同代码部分
    1)srcs.mk是不同板卡相同部分代码,srcs.mk中的LOCAL_SRCS提供给common.mk使用,加上相关arch层的代码LOCAL_ARCH_SRCS生成$$(target)_OBJS等。

2)bsp.mk利用$$(target)_OBJS等文件生成elf文件,然后通过elf生成.bin、.siz、.lzo,。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述4、板级支持包不同代码部分
1)BOARD是通过export传过来的,针对不同板卡.mk文件使用。
2)bspbuild.mk文件包括:BSP_BASE_NAME,即为板卡名字、LOCAL_DSYMBOL添加宏定义、LOCAL_INC_PATH头文件路径、LOCAL_LD_SCRIPT链接脚本。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
5、不同板卡的全名
1)BSP_BASE_NAME:在bspbuild.mk中定义。
2)BOARD:在顶层Makefile中导入进来。
3)TARGET_FULL_NAME,即要生成.elf的全名。
在这里插入图片描述6、添加默认配置
1)LOCAL_INC_PATH为头文件路径
2)LOCAL_DSYMBOL为宏定义传参值
3)LOCAL_LINKFLAGS为地址映射表
在这里插入图片描述参数解析:
-W1,option 给链接器发送一个选项,比如生成地址映射表,-Wl,-Map,output.map
(主要是调试用的,里面有具体的地址)

7、更新变量的值
因为加入了一些.mk文件,所以要更新下变量的值。
里面有些变量并没有用到。在这里插入图片描述8、产生不同板卡的config.h
把config_chip.h和$(board).重定向到config.h中
在这里插入图片描述9、设备树编译,暂时还没用到。
在这里插入图片描述10、地址映射表编译。

在这里插入图片描述11、执行make all.
执行全部目标生成目标文件。
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值