首页 > 其他分享 >baremetal bsp工程管理

baremetal bsp工程管理

时间:2024-03-16 23:23:31浏览次数:31  
标签:文件 obj TARGET 工程 COMPILE bsp CROSS baremetal

参考学习:https://www.bilibili.com/video/BV1yE411h7uQ?p=20&vd_source=432ba293ecfc949a4174ab91ccc526d6   便于bsp工程管理,将工程进行分类管理,如下图 0 Makefile编译脚本文件 bsp文件夹存所写的bsp驱动 imx6ul文件夹存放imx6ull官方sdk文件 imx6ul.lds是链接脚本 obj文件夹存在生成的.o文件 project存放main.c和start.S   Makefile编写:

CROSS_COMPILE   ?= arm-linux-gnueabihf-
TARGET                  ?= bsp

CC                              := $(CROSS_COMPILE)gcc
LD                              := $(CROSS_COMPILE)ld
OBJCOPY                 := $(CROSS_COMPILE)objcopy
OBJDUMP                 := $(CROSS_COMPILE)objdump

INCDIRS                 := imx6ul \
                                   bsp/clk \
                                   bsp/led \
                                   bsp/delay

SRCDIRS                 := project \
                                   bsp/clk \
                                   bsp/led \
                                   bsp/delay


INCLUDE                 := $(patsubst %, -I %, $(INCDIRS))

SFILES                  := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))
CFILES                  := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))

SFILENDIR               := $(notdir  $(SFILES))
CFILENDIR               := $(notdir  $(CFILES))

SOBJS                   := $(patsubst %, obj/%, $(SFILENDIR:.S=.o))
COBJS                   := $(patsubst %, obj/%, $(CFILENDIR:.c=.o))
OBJS                    := $(SOBJS) $(COBJS)

VPATH                   := $(SRCDIRS)

.PHONY: clean

$(TARGET).bin : $(OBJS)
        $(LD) -Timx6ul.lds -o $(TARGET).elf $^
        $(OBJCOPY) -O binary -S $(TARGET).elf $@
        $(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis

$(SOBJS) : obj/%.o : %.S
        $(CC) -Wall -nostdlib -c -O2  $(INCLUDE) -o $@ $<

$(COBJS) : obj/%.o : %.c
        $(CC) -Wall -nostdlib -c -O2  $(INCLUDE) -o $@ $<

clean:
        rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)
Makefile逐行分析:
  1. CROSS_COMPILE ?= arm-linux-gnueabihf-:定义了交叉编译工具链的前缀,默认使用 arm-linux-gnueabihf-。
  2. TARGET ?= bsp:定义了目标文件名为 bsp。
  3. CC := $(CROSS_COMPILE)gcc:定义了 C 编译器。
  4. LD := $(CROSS_COMPILE)ld:定义了链接器。
  5. OBJCOPY := $(CROSS_COMPILE)objcopy:定义了目标文件复制工具。
  6. OBJDUMP := $(CROSS_COMPILE)objdump:定义了目标文件反汇编工具。
  7. INCDIRS := imx6ul \ bsp/clk \ bsp/led \ bsp/delay:定义了头文件目录。
  8. SRCDIRS := project \ bsp/clk \ bsp/led \ bsp/delay:定义了源文件目录。
  9. INCLUDE := $(patsubst %, -I %, $(INCDIRS)):将头文件目录转换成 -I 参数形式。
  10. SFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S)):查找所有的汇编文件。
  11. CFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c)):查找所有的 C 文件。
  12. SFILENDIR := $(notdir $(SFILES)):获取汇编文件的文件名部分。
  13. CFILENDIR := $(notdir $(CFILES)):获取 C 文件的文件名部分。
  14. SOBJS := $(patsubst %, obj/%, $(SFILENDIR:.S=.o)):生成汇编文件对应的目标文件路径。
  15. COBJS := $(patsubst %, obj/%, $(CFILENDIR:.c=.o)):生成 C 文件对应的目标文件路径。
  16. OBJS := $(SOBJS) $(COBJS):所有目标文件列表。
  17. VPATH := $(SRCDIRS):设置源文件搜索路径。
  18. .PHONY: clean:声明 clean 为一个伪目标。
  19. $(TARGET).bin : $(OBJS):生成目标文件 $(TARGET).bin 的规则。
  20. $(LD) -Timx6ul.lds -o $(TARGET).elf $^:链接生成 ELF 可执行文件。
  21. $(OBJCOPY) -O binary -S $(TARGET).elf $@:将 ELF 文件转换成二进制文件。
  22. $(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis:反汇编生成 dis 文件。
  23. $(SOBJS) : obj/%.o : %.S:汇编文件编译规则。
  24. $(COBJS) : obj/%.o : %.c:C 文件编译规则。
  25. clean: rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS):清理规则,删除生成的文件。
 

标签:文件,obj,TARGET,工程,COMPILE,bsp,CROSS,baremetal
From: https://www.cnblogs.com/lethe1203/p/18077861

相关文章

  • 今日头条Linux 运维工程师面试真题
    今日头条Linux运维工程师面试真题首先我们来看下今日头条Linux运维工程师招聘岗位要求:【岗位定义】系统运维工程师【岗位薪资】10K-24K【基本要求】北京/经验3-5年/本科及以上/全职【职位描述】1、负责业务系统日常运行维护,线上故障紧急处理;2、监控平台的搭建......
  • Linux 运维工程师面试真题-2-Linux 命令及文件操作
    Linux运维工程师面试真题-2-Linux命令及文件操作1.在/tmp/目录下创建test.txt文件,内容为:Hello,World!,用一个命令写出来。2.给test.txt文件除所有者之外增加执行权限,最终以数字写出文件的权限。3.用vi命令编辑test.txt,如何跳转到末行,首行,行首、行末,如何在光标行下一......
  • Linux 运维工程师面试真题-1-必会Linux 操作系统知识
    Linux运维工程师面试真题-1-必会Linux操作系统知识运维的整个面试流程其实是非常繁杂的,为了方便大家准备,我们特地在这里给大家整理了一些Linux系统运维相关的面试题,有些问题没有标准答案,希望要去参加Linux运维面试的朋友,可以先思考下这些问题。首先我们看看《Linux操作......
  • Linux 运维工程师面试真题-4-Linux 服务配置及管理
    Linux运维工程师面试真题-4-Linux服务配置及管理**1.请写出apache2.X版本的两种工作模式,以及各自工作原理。如何查看apache当前所支持的模块,并且查看是工作在哪种模式下?2.Linux下nfs在客户端无法挂载,请写出排查步骤?3.Linux下已经部署了dhcp服务器,客户端无法获取的......
  • Linux 运维工程师面试真题-3-Linux 磁盘及软件管理操作
    Linux运维工程师面试真题-3-Linux磁盘及软件管理操作1.如何添加一块新的50G硬盘到linux服务器系统作为单独的分区,并正在使用?需要哪些操作步骤?2.有个金士顿U盘,需要往服务器/var/www/html/目录下上传一个index.html文件,如何操作并完成。3.有一块移动硬盘,上面有300G......
  • Linux 运维工程师面试真题-5-常考题目汇总
    Linux运维工程师面试真题-5-常考题目汇总1.解释下什么是GPL,GNU,自由软件?GPL:(通用公共许可证):一种授权,任何人有权取得、修改、重新发布自由软件的权力。GNU:(革奴计划):目标是创建一套完全自由、开放的的操作系统。自由软件:是一种可以不受限制地自由使用、复制、研究、修改和分......
  • 小米Linux 运维工程师面试真题
    小米Linux运维工程师面试真题首先我们来看下小米Linux运维工程师招聘岗位要求:【岗位定义】运维工程师【岗位薪资】10K-24K【基本要求】北京/经验3-5年/本科及以上/全职【职位描述】1、负责小米网交易系统部署、监控、可持续优化等;2、负责小米网抢购系统运维变......
  • 新浪Linux 运维工程师面试真题
    新浪Linux运维工程师面试真题首先我们来看下新浪Linux运维工程师招聘岗位要求:【岗位定义】运维工程师【岗位薪资】10K-20K【基本要求】经验1-3年/本科及以上/全职【职位描述】1、负责服务器和应用的监控和应急反应,需要值夜班以确保有7*24小时的持续运作能力;2、......
  • 京东Linux 运维工程师面试真题
    京东Linux运维工程师面试真题首先我们来看下京东Linux运维工程师招聘岗位要求:【岗位定义】运维工程师【岗位薪资】10K-20K【基本要求】北京/经验3-5年/本科及以上/全职【职位描述】1.负责私有云docker的日常维护、故障排查、性能调优;2.负责应用系统的日常监......
  • 腾讯Linux 运维工程师面试真题
    腾讯Linux运维工程师面试真题1、如何防止DDOS攻击?如提供足够资源给你,要保证用户访问不影响。首先确定攻击源范围,如果是处于公司内部,那么暂时性的将这一区域的内部网络封掉,如果是外部IP那么通过防火墙或者软件进行IP过滤,这样能够一定程度上减缓承受的攻击压力。其次,开......