MAKEFILE

内核配置完成后,在顶层目录中执行“#make uImage”便开始编译内核。但是,uImage却不是在顶层Makefile中定义,而是在arch/$(ARCH)/Makefile中定义。

顶层Makefile Line 452:
include $(srctree)/arch/$(SRCARCH)/Makefile
其中srctree为源码绝对路径,

即该变量等于架构名称,我们以arm为例进行说明。

arch/arm/Makefile Line 230:
zImage Image xipImage bootpImage uImage: vmlinux
可见uImage依赖于vmlinux,要先生成vmlinux,然后执行下边这条指令完成编译。
arch/arm/Makefile Line 231:
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@

Q的定义:选择静态编译与否(是否打印编译信息)
MAKE: 系统环境变量,值为make
build: 值为“-f scripts/Makefile.build obj=”实际上就是调用子Makefile–scripts/Makefile.build,然后传递参数目标文件夹。
Kbuild.include被顶层Makefile所包含

源代码定位

配置

/arch/arm/Kconfig 定义了自编译内核配置文件
/arch/arm/configs 和上面的一起.定义不同的CHIP的配置(其实就是定义上面哪些配置要打开. 所以重点还是在Kconfig)

在Kconfig的1080行开始,定义了 source “arch/arm/mach-at91/Kconfig” 也就是不同的芯片会调用各自目录下的Kconfig

通过配置找代码

在MAKEFILE里找到对应配置的代码
plat-$(CONFIG_PLAT_SUNXI) := sunxi
对应的就是plat-sunxi
有的时候对应的源代码很难找. 只能用GREP来了.
比如CONFIG_CSI_OV7670 ,处理它的MAKEFILE在 drivers\media\video\sun4icsi\device\MAKEFILE

留言