例子:
#arch/i386/boot/Makefile
subdir-:= compressed/
上面的等式告诉kbuild在执行"make clean"命令时,同时也需要进入子目录compressed/中执
行该命令。
存在一个叫做archclean的可选目标,用来支持生成最终启动映像的Makefiles的清除机制。
例子:
#arch/i386/Makefile
archclean:
$(Q)$(MAKE) $(clean)=arch/i386/boot
当执行"make clean"命令时,make会进入arch/i386/boot目录,并且像一般情况一样进行清
除。arch/i386/boot目录中的Makefile可以使用subdir-来跟踪到更深层次的目录中去。
注意1:arch/$(ARCH)/Makefile不能使用"subdir-",因为那个文件是包含在顶层makefile中,
而kbuild机制在那个时候还是不能工作的。
注意2:在执行"make clean"时,所有core-y, libs-y, drivers-y 和 net-y列表中的目录都将会被
访问。
=== 6具体架构的Makefiles
顶层Makefile在开始进入单个的目录之前会设置环境并且做一些准备工作。顶层makefile
中包含一些通用部分,而arch/$(ARCH)/Makefile包含为了表示架构而建立kbuild需要的东西。
arch/$(ARCH)/Makefile建立了一些变量以及定义了一些目标来做准备。
当kbuild执行时,将会执行下面这些步骤(不一定完全是):
1) 配置内核 => 产生 .config文件
2) 将内核版本号保存到include/linux/version.h文件中
3) 符号链接include/asm到include/asm-$(ARCH)
4) 更新目标的所有先决条件:-附加的先决条件在arch/$(ARCH)/Makefile中指定
5) 递归地进入init-*core* drivers-* net-* libs-*列表中的列出的所有目录,并且编译生成所有目标。
-上述变量的是在arch /$(ARCH)/ Makefile中扩充
6) 所有生成的目标将会被链接最后生成vmlinux文件,它位于目标树的根部。
7) 最终,特定于体系结构的那部分程序会做所有善后工作,并且生成最终的bootimage。
-建立boot记录
-准备initrd映像和类的东西
--- 6.1 设置用来调整生成架构的变量
LDFLAGS 通用 $(LD) 选项
用于所有调用连接器的标志。
经常指定就足够了。
例子:
#arch/s390/Makefile
LDFLAGS := -m elf_s390
注意:ldflags-y可以进一步定制该标志的使用。见3.7章。
LDFLAGS_MODULE $(LD)链接模块时的选项
LDFLAGS_MODULE用来指定$(LD)链接用于模块的.ko文件时的标志。
默认情况下“-r”是用于重定位输出。
LDFLAGS_vmlinux $(LD)链接vmlinux时的选项
当链接最终的vmlinux映像的时候,LDFLAGS_vmlinux指定传递给链接的附加标志。
LDFLAGS_vmlinux使用LDFLAGS_$@支持。
例子:
#arch/i386/Makefile
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40628-10.html
更新了
却在这雇佣这么多水军
错