关键词:
1. 设置obj与src
ifneq ($(OBJTREE),$(SRCTREE)) ifeq ($(CURDIR),$(SRCTREE)) dir := else dir := $(subst $(SRCTREE)/,,$(CURDIR)) endif obj := $(if $(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/) src := $(if $(dir),$(SRCTREE)/$(dir)/,$(SRCTREE)/) $(shell mkdir -p $(obj)) else obj := src := endif
一般目标输出到源代码目录下,因此执行完上面的代码后,src和obj都为空。
2.设置编译选项
主要是设置以下三个编译选项
# clean the slate ... PLATFORM_RELFLAGS = PLATFORM_CPPFLAGS = PLATFORM_LDFLAGS =
2.1 $(ARCH)=arm,所以包含的文件是arm_config.mk,架构相关的编译选项。
ifdef ARCH sinclude $(TOPDIR)/$(ARCH)_config.mk # include architecture dependend rules endif
arm_config.mk只有一行,内容如下
PLATFORM_CPPFLAGS += -DCONFIG_ARM -D__ARM__
2.2 $(CPU)=s3c64xx,所以包含的文件是cpu/s3c64xx/config.mk,处理器相关的编译选项。
ifdef CPU sinclude $(TOPDIR)/cpu/$(CPU)/config.mk # include CPU specific rules endif
cpu/s3c64xx/config.mk内容如下:
PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 -msoft-float # Make ARMv5 to allow more compilers to work, even though its v6. PLATFORM_CPPFLAGS += -march=armv5t # ========================================================================= # # Supply options according to compiler version # # ========================================================================= #PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
2.3 $(SOC)=s3c6410,所以包含的文件是cpu/s3c64xx/s3c6410/config.mk。但这个文件不存在,因为用sinclude包含,所以不会报错
ifdef SOC sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk # include SoC specific rules endif
以上代码执行完成后,
1 PLATFORM_RELFLAGS : -fno-strict-aliasing -fno-common -ffixed-r8 -msoft-float 2 PLATFORM_CPPFLAGS : -DCONFIG_ARM -D__ARM__ -march=armv5t
3 指定交叉编译工具,$(CROSS_COMPILE) = /usr/local/arm/4.3.2/bin/arm-linux-
AS = $(CROSS_COMPILE)as LD = $(CROSS_COMPILE)ld CC = $(CROSS_COMPILE)gcc CPP = $(CC) -E AR = $(CROSS_COMPILE)ar NM = $(CROSS_COMPILE)nm STRIP = $(CROSS_COMPILE)strip OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump RANLIB = $(CROSS_COMPILE)RANLIB
4 连接器选项的设置
LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)
4.1 $(BOARD)=smdk6410,$(BOARDDIR)=samsung/smdk6410,所以包含的文件是board/samsung/smdk6410/config.mk。
ifdef VENDOR BOARDDIR = $(VENDOR)/$(BOARD) else BOARDDIR = $(BOARD) endif ifdef BOARD sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk # include board specific rules endif
board/samsung/smdk6410/config.mk文件中定义了TEXT_BASE。u-boot编译时使用TEXT_BASE作为代码段链接的起始地址。
ifndef TEXT_BASE TEXT_BASE = 0xCFE00000 endif
4.2 指定board/samsung/smdk6410/u-boot.lds位u-boot的链接脚本
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/ OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . = 0x00000000; . = ALIGN(4); .text : { cpu/s3c64xx/start.o (.text) cpu/s3c64xx/s3c6410/cpu_init.o (.text) cpu/s3c64xx/onenand_cp.o (.text) cpu/s3c64xx/nand_cp.o (.text) cpu/s3c64xx/movi.o (.text) *(.text) lib_arm/div0.o } . = ALIGN(4); .rodata : { *(.rodata) } . = ALIGN(4); .data : { *(.data) } . = ALIGN(4); .got : { *(.got) } __u_boot_cmd_start = .; .u_boot_cmd : { *(.u_boot_cmd) } __u_boot_cmd_end = .; . = ALIGN(4); .mmudata : { *(.mmudata) } . = ALIGN(4); __bss_start = .; .bss : { *(.bss) } _end = .; }
5 指定隐含的编译规则
AFLAGS为汇编代码编译选项,CFLAGS为C代码编译选项
4 CFLAGS : -g -Os -fno-strict-aliasing -fno-common -ffixed-r8 -msoft-float -D__KERNEL__ -DTEXT_BASE=0xCFE00000 -I/home/yjg/arm6410/qudong/01-uboot/uboot_ok6410/include -fno-builtin -ffreestanding -nostdinc -isystem /usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/include -pipe -DCONFIG_ARM -D__ARM__ -march=armv5t -Wall -Wstrict-prototypes
5 AFLAGS : -D__ASSEMBLY__ -g -Os -fno-strict-aliasing -fno-common -ffixed-r8 -msoft-float -D__KERNEL__ -DTEXT_BASE=0xCFE00000 -I/home/yjg/arm6410/qudong/01-uboot/uboot_ok6410/include -fno-builtin -ffreestanding -nostdinc -isystem /usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/include -pipe -DCONFIG_ARM -D__ARM__ -march=armv5t
%.s: %.S $(CPP) $(AFLAGS) -o [email protected] $< %.o: %.S $(CC) $(AFLAGS) -c -o [email protected] $< %.o: %.c $(CC) $(CFLAGS) -c -o [email protected] $<
CPP: /usr/local/arm/4.3.2/bin/arm-linux-gcc -E,只激活预处理,不生成文件。
6 ARFLAGS,ARFLAGS声明如下,暂时不知道在哪里使用。
ARFLAGS = crv
顶层目录下的config.mk文件分析
顶层目录下的config.mk文件主要完成如下功能的配置:1、确定生成可执行文件过程中需要的各种工具,如编译器(arm-linux-gcc)、连接器(arm-linux-ld)、反汇编器(arm-linux-objdump)等2、确定CPU、板相关的配置文件,存在于各个目录下的config.... 查看详情
顶层makefile分析(代码片段)
1.顶层目录下的Makefile OpenHarmony/kernel/liteos_a/Makefile-include$(LITEOSTOPDIR)/tools/build/config.mk#包含kernel/liteos_a/tools/build/config.mkLITEOS_TARGET=liteosLITEOS_PLATFORM_BASE=$(LITE 查看详情
u-boot顶层makefile分析
1.u-boot制作命令make forlinx_nand_ram256_config;makeall;2.顶层mkconfig分析,参考 U-BOOT顶层目录mkconfig分析mkconfig脚本执行后会生成以下3个文件,这些文件中提供的变量会在Makefile中其它地方使用。116#loadARCH,BOARD,andCPUconfiguration117includ... 查看详情
子目录makefile分析(代码片段)
... 2.fat目录下的Makfile文件include$(LITEOSTOPDIR)/config.mk#包含顶层目录下的config.mk,即liteos_a/config.mkMOD 查看详情
linux系统移植:u-boot顶层makefile分析(上)(代码片段)
目录Linux系统移植:U-Boot顶层Makefile分析(上)一、版本号二、传递变量到子make三、命令输出四、静默输出五、编译输出目录六、代码检查七、模块编译八、获取主机架构和系统九、设置目标架构、交叉编译器和配置... 查看详情
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顶层目录链接脚本文件(u-boot.lds)介绍(*)
参考:U-Boot顶层目录链接脚本文件(u-boot.lds)介绍作者:一只青木呀发布时间:2020-10-2313:52:23网址:https://blog.csdn.net/weixin_45309916/article/details/109240625目录1、u-boot.lds文件2、arch/arm/l 查看详情
linux系统移植:u-boot顶层makefile分析(下)(代码片段)
目录Linux系统移植:U-Boot顶层Makefile分析(下)一、调用scripts/Kbuild.include二、导出交叉编译工具变量设置三、导出其他变量四、makexxx_config过程五、make过程Linux系统移植:U-Boot顶层Makefile分析(下)继续沿着... 查看详情
u-boot-2016.09顶层makefile分析
##SPDX-License-Identifier: GPL-2.0+#VERSION=2016PATCHLEVEL=09SUBLEVEL=EXTRAVERSION=NAME=#*DOCUMENTATION*#Toseealistoftypicaltargetsexecute"makehelp"#Moreinfocanbelocatedin./README#Commentsinthisfilear 查看详情
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、 查看详情
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.07移植(第一篇)初步分析
U-BOOT-2016.07移植 (第一篇) 初步分析目录U-BOOT-201607移植 第一篇 初步分析目录编译和移植环境更新交叉编译工具1下载arm-linux-gcc4432安装arm-linux-gcc443安装环境Ubuntu910下载u-boot-201607并解压分析顶层Makefile1找出目标依赖关系2总结... 查看详情
嵌入式开发(s5pv210)——u-boot的顶层mkconfig文件分析(代码片段)
mkconfig文件的调用#第一步:SRCTREE是源码的路径,也就是顶层的目录MKCONFIG :=$(SRCTREE)/mkconfigexportMKCONFIG#第二步:配置#$(@:_config=):作用是将x210_sd_config的_config去掉,得到x210_sdx210_sd_c 查看详情
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模板生成的,在不严格的... 查看详情
嵌入式linux7.u-boot顶层makefile分析(代码片段)
1.版本号5VERSION=20166PATCHLEVEL=037SUBLEVEL=8EXTRAVERSION=9NAME=VERSION是主版本号,PATCHLEVEL是补丁版本号,SUBLEVEL是次版本号,这三个一起构成了uboot的版本号,比如当前的uboot版本号就是“2016.03”。EXTRAVERSION是附加版本信息,NAME是和名字有... 查看详情
嵌入式linux7.u-boot顶层makefile分析(代码片段)
5VERSION=20166PATCHLEVEL=037SUBLEVEL=8EXTRAVERSION=9NAME=VERSION是主版本号,PATCHLEVEL是补丁版本号,SUBLEVEL是次版本号,这三个一起构成了uboot的版本号,比如当前的uboot版本号就是“2016.03”。EXTRAVERSION是附加版本信息,NAME是和名字有关的,... 查看详情