cmd_<command> - 执行的命令名
例子:
#
quiet_cmd_image= BUILD $@
cmd_image = $(obj)/tools/build$(BUILDFLAGS) \
$(obj)/vmlinux.bin > $@
targets= bzImage
$(obj)/bzImage:$(obj)/vmlinux.bin $(obj)/tools/build FORCE
$(callif_changed,image)
@echo'Kernel: $@ is ready'
当更新 $(obj)/bzImage的时候,这一行
BUILD arch/i386/boot/bzImage
将会显示为 "makeKBUILD_VERBOSE=0"。
--- 6.8 预处理链接脚本
当生成vmlinux映像的时候,会使用连接器脚本arch/$(ARCH)/kernel/vmlinux。
这个脚本是vmlinux.lds.S文件的一个预处理变种,vmlinux.lds.S文件与这个脚本在同一 个目录下。makefile 语法
Kbuild知道.lds文件,并且包含一条*lds.S-> *lds规则。
例子:
#arch/i386/kernel/Makefile
always:= vmlinux.lds
#Makefile
exportCPPFLAGS_vmlinux.lds = -P -C -U$(ARCH)
赋给$(always)变量的等式是用来告诉kbuild建立vmlinux.lds目标。
赋给$(CPPFLAGS_vmlinux.lds)变量的等式是用来告诉kbuild在建立vmlinux.lds目标的时 候使用指定的选项。
当建立*.lds目标的时候,kbuild使用下面的这些变量:
KBUILD_CPPFLAGS : 在顶层Makefile文件中设置
cppflags-y : 可能在kbuild makefile文件中设置
CPPFLAGS_$(@F) : 针对特定的标志.
注意在这个赋表达式中使用文件全名。
针对*lds文件的kbuild机制在一些体系相关的文件中使用。
=== 7 Kbuild 变量
顶层Makefile导出了下列的一些变量:
VERSION,PATCHLEVEL, SUBLEVEL, EXTRERSIO
这些变量定义了当前内核的版本。很少有架构的Makefiles直接使用这些变量; 它们应该使用$(KERNELRELEASE)变量。
$(VERSION),$(PATCHLEVEL), and $(SUBLEVEL) 定义了版本号基本的三个部分,比如 "2","4", 和 "0"。这三个部分只能是数字。
$(EXTRERSION)定义了一个更小的版本子级别,它一般用于还不是正式的补丁以 及额外的补丁。它经常是一个非数字的字符串,比如"-pre4",并且它大多数情况下 是空的。
KERNELRELEASE
$(KERNELRELEASE)是一个单个的字符串,比如"2.4.0-pre4",它适合作为安装目录名 或者在版本号中出现。一些架构的Makefiles就基于这些目的使用了它。
ARCH
这个变量在目标夹头中定义,比如”i386”,”arm”,或者”sparc”。一些kbuild makefiles 通过检查$(ARCH)变量来决定编译哪些文件。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40628-14.html
反过来也可以说就算是老船我们照样没办法
好喜欢这一次的采访
祭奠为中华牺牲的士魂
能写的人很多