LDFLAGS_vmlinux:= -e stext
OCOPYFLAGS objcopy标志
当使用$(callif_changed,objcopy)来转换一个.o文件时,OCOPYFLAGS中指定的标志就 会被使用。
$(callif_changed,objcopy)经常用来生成vmlinux中的原始二进制文件。
例子:
#arch/s390/Makefile
OCOPYFLAGS:= -O binary
#arch/s390/boot/Makefile
$(obj)/image:vmlinux FORCE
$(callif_changed,objcopy)
这个例子中,二进制文件 $(obj)/image是vmlinux得一个二进制版本。$(call if_changed,xxx)变量的使用将会在后面描述。
KBUILD_AFLAGS $(AS) 汇编器标志
默认 - 请看顶层Makfile文件
根据系统架构的要求进行追加或者修改。
例子:
#arch/sparc64/Makefile
KBUILD_AFLAGS= -m64 -mcpu=ultrasparc
KBUILD_CFLAGS $(CC) 编译器标志
默认 - 请看顶层Makfile文件
根据系统架构的要求进行追加或者修改。
大多数情况下,KBUILD_CFLAGS变量依赖于配置程序
例子:
#arch/i386/Makefile
cflags-$(CONFIG_M386)= -march=i386
KBUILD_CFLAGS= $(cflags-y)
许多体系相关的Makefiles会动态运行目标C编译器来探测支持的选项:
#arch/i386/Makefile
...
cflags-$(CONFIG_MPENTIUMII) = $(call cc-option,\
-march=pentium2,-march=i686)
...
#Disable unit-at-a-time mode ...
KBUILD_CFLAGS= $(call cc-option,-fno-unit-at-a-time)
...
第一个例子中使用了一个技巧,当一个配置选项被选择时,它的会被扩展到‘y’。
CFLAGS_KERNEL $(CC) 为编译进内核指定的选项
$(CFLAGS_KERNEL)包含额外的C编译器标志用来编译常驻内存的代码。
CFLAGS_MODULE $(CC) 为模块指定的选项
$(CFLAGS_MODULE)包含额外的C编译器标志用来编译可加载内核模块的代码。
--- 6.2 增加先决条件到archprepare
archprepare:这是一条用来列出先决条件的规则,这些先决条件是build进入子目录前 必须建立的。
这将从在包含汇编内容的头文件中使用。
例子:
#arch/arm/Makefile
archprepare: maketools
在这个例子中,在进入到子目录前目标文件maketools将会被处理。
想要知道kbuild怎么支持生成偏移头文件,请看XXX-TODO这一章。
--- 6.3 递归时列出需要访问的目录
一个体系相关的Makefile结合顶层Makefile定义了用来指定怎么编译vmlinux文件的变
量。注意没有给模块指定体系相关的区域;模块生成机制全是体系无关的。
head-y, init-y, core-y, libs-y, drivers-y,net-y
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40628-11.html
最简单证实的方式
一股浓香