文章目录
- 1. 创建 $(obj)/lib/asm-offsets.s
- 2. 创建 $(obj)/\$(generic-offsets-file)
- 3. 创建 $(obj)/arch/arm/lib/asm-offsets.s
- 4. 创建 $(obj)/\$(offsets-file)
# make -f ./scripts/Makefile.build obj=. # ./Kbuild 1 # SPDX-License-Identifier: GPL-2.0 2 # 3 # Kbuild for top-level directory of U-Boot 4 5 ##### 6 # Generate generic-asm-offsets.h 7 8 generic-offsets-file := include/generated/generic-asm-offsets.h 9 10 always := $(generic-offsets-file) 11 targets := lib/asm-offsets.s 12 13 CFLAGS_REMOVE_asm-offsets.o := $(LTO_CFLAGS) 14 15 $(obj)/$(generic-offsets-file): $(obj)/lib/asm-offsets.s FORCE 16 $(call filechk,offsets,__GENERIC_ASM_OFFSETS_H__) 17 18 ##### 19 # Generate asm-offsets.h 20 21 ifneq ($(wildcard $(srctree)/arch/$(ARCH)/lib/asm-offsets.c),) 22 offsets-file := include/generated/asm-offsets.h 23 endif 24 25 always += $(offsets-file) 26 targets += arch/$(ARCH)/lib/asm-offsets.s 27 28 CFLAGS_asm-offsets.o := -DDO_DEPS_ONLY 29 30 $(obj)/$(offsets-file): $(obj)/arch/$(ARCH)/lib/asm-offsets.s FORCE 31 $(call filechk,offsets,__ASM_OFFSETS_H__) 32
- 13行:在顶层Makefile中定义:
$(LTO_CFLAGS):=
- 21行:在顶层Makefile中定义:
$(srctree)=.
,在输入命令行中定义:$(ARCH)=arm
,
$(srctree)/arch/$(ARCH)/lib/asm-offsets.c
文件在源码中存在,所以这里条件成立
最终展开后为:# make -f ./scripts/Makefile.build obj=. # ./Kbuild CFLAGS_REMOVE_asm-offsets.o := CFLAGS_asm-offsets.o := -DDO_DEPS_ONLY targets = lib/asm-offsets.s arch/arm/lib/asm-offsets.s generic-offsets-file := include/generated/generic-asm-offsets.h offsets-file := include/generated/asm-offsets.h always = $(generic-offsets-file) $(offsets-file) 15 $(obj)/$(generic-offsets-file): $(obj)/lib/asm-offsets.s FORCE 16 $(call filechk,offsets,__GENERIC_ASM_OFFSETS_H__) 17 30 $(obj)/$(offsets-file): $(obj)/arch/arm/lib/asm-offsets.s FORCE 31 $(call filechk,offsets,__ASM_OFFSETS_H__)
由上可知,创建目标前要先创建其依赖,所以:
- 创建
$(obj)/$(generic-offsets-file)
,见下面《2.创建 $(obj)/$(generic-offsets-file)》
1.1 创建$(obj)/lib/asm-offsets.s
,见下面《1.创建 $(obj)/lib/asm-offsets.s》- 创建
$(obj)/$(offsets-file)
,见下面《4.创建 $(obj)/$(offsets-file)》
2.1 创建$(obj)/arch/arm/lib/asm-offsets.s
,见下面《3.创建 $(obj)/arch/arm/lib/asm-offsets.s》
1. 创建 $(obj)/lib/asm-offsets.s
在
scripts/Makefile.build
中有如下创建规则:# scripts/Makefile.build 152 cmd_cc_s_c = $(CC) $(c_flags) $(DISABLE_LTO) -fverbose-asm -S -o $@ $< 153 154 $(obj)/%.s: $(src)/%.c FORCE 155 $(call if_changed_dep,cc_s_c)
- 在顶层Makefile中, $(CC) = /home/xd/rpi3b/toolchain/toolchain-rpi32b/bin/arm-linux-gnueabihf-gcc
$(c_flags)
最终定义如下:$(KBUILD_CPPFLAGS) = -D__KERNEL__ -D__UBOOT__ $(KBUILD_CFLAGS) = -Wall -Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding -std=gnu11 -fshort-wchar -fno-strict-aliasing -fno-PIE -Os -fno-stack-protector -fno-delete-null-pointer-checks -Wno-maybe-uninitialized -g -fstack-usage -Wno-format-nonliteral -Wno-unused-but-set-variable -Werror=date-time $(KBUILD_SUBDIR_CCFLAGS) = 空 $(ccflags-y) = -D__ARM__ -marm -mno-thumb-interwork -mabi=aapcs-linux -mword-relocations -fno-pic -mno-unaligned-access -ffunction-sections -fdata-sections -fno-common -ffixed-r9 -msoft-float -pipe $(arch-y) $(tune-y) $(patsubst %,-I$(srctree)/%include,$(machdirs)) $(CFLAGS_$(basetarget).o)= $(CFLAGS_$(basename $(notdir $@)).o) $(depfile) = $(dir $@).$(notdir $@).d $(NOSTDINC_FLAGS)= -nostdinc -isystem /home/xd/rpi3b/toolchain/toolchain-rpi32b/bin/../lib/gcc/arm-linux-gnueabihf/7.5.0/include $(UBOOTINCLUDE) = -Iinclude -I$(srctree)/arch/$(ARCH)/include -include $(srctree)/include/linux/kconfig.h $(__c_flags) = $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(KBUILD_SUBDIR_CCFLAGS) $(ccflags-y) $(CFLAGS_$(basetarget).o) $(modkern_cflags)= 空 $(basename_flags)= -DKBUILD_BASENAME='"$(subst -,_$(basename $(notdir $@)))"' $(modname_flags) = -DKBUILD_MODNAME='"$(subst -,_$(basename $(notdir $@)))"' c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(UBOOTINCLUDE) $(__c_flags) $(modkern_cflags) $(basename_flags) $(modname_flags)