$(head-y)列出了首先要链接到vmlinux中的对象
$(libs-y)列出了lib.a归档文件可以被放置的目录。
剩下的列出了一个built-in.o对象文件可以被放置的目录。
$(init-y)对象将被放置在 $(head-y)后.
然后剩下的就按下面的顺序放置:
$(core-y),$(libs-y), $(drivers-y) and $(net-y).
顶层Makefile定义了所有通用目录的,arch/$(ARCH)/Makefile只添加了体系相关的目 录。
例子:
#arch/sparc64/Makefile
core-y= arch/sparc64/kernel/
libs-y= arch/sparc64/prom/ arch/sparc64/lib/
drivers-$(CONFIG_OPROFILE) = arch/sparc64/oprofile/
--- 6.4 与架构相关的启动映像
一个体系相关的Makefile指定了一系列目标,取出vmlinux文件,将它压缩到引导代码 中,然后复制生成的文件到某个地方。这个过程包含了许多安装命令。它的实际目的不 是标准化整个架构。
通常会将额外的处理程序放到arch/$(ARCH)/下的boot/目录中。
Kbuild没有提供任何有效的手段来支持编译boot/中指定的目标。因此应该手动调用 make arch/$(ARCH)/Makefile来生成boot/中的目标。
一种比较提倡的方法是在arch/$(ARCH)/Makefile中包含一个快捷方式,当进入到 arch/$(ARCH)/boot/Makefile文件中时再使用完整的路径。
例子:
#arch/i386/Makefile
boot:= arch/i386/boot
bzImage:vmlinux
$(Q)$(MAKE)$(build)=$(boot) $(boot)/$@
"$(Q)$(MAKE)$(build)=<dir>"是一种提倡的方法来激活子目录中的make。
没有任何规则用来命名体系相关的目标,但是执行"make help"命令将会列出所有相关的 目标。为了支持这个命令,必须先定义$(archhelp)。
例子:
#arch/i386/Makefile
definearchhelp
echo'* bzImage - Image(arch/$(ARCH)/boot/bzImage)'
endif
当不带任何参数执行make命令的时候,将会生成第一个遇到的目标。当前顶层Makefile 文件的第一个目标是all:。
默认情况下,每一个架构应该生成一个可引导映像。在"make help"中,默认目标使用一 个'*'来突出显示。向all:中添加一个新的先决条件:选择一个与vmlinux不同的默认目 标。
例子:
#arch/i386/Makefile
all:bzImage
当不带任何参数执行“make”命令时,bzImage将会被建立生成。
--- 6.5 建立非kbuild的目标
extra-y
extra-y指定在当前目录创建的额外目标,除了obj-*中指定的任何目标。
在下面两种情况下,将所有目标放在extra-y列表下是必要的:
1) 使能kbuild来检查命令行中的改变 – 当 $(callif_changed,xxx) 被使用
2) kbuild知道在执行"make clean"时哪些文件需要删除
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40628-12.html
我爷爷一月2300
脓包穿孔不是坏事
轮番到南海岛礁周边区域作业