今天看Makefile文件,我头大了,此Makefile非彼Makefile,里面多了很多内置命令,比如origin、patsubst等等啦,这些都没听说过,更可恶的是,连网上都没有,可见,这是一件多么伤人的事情,分析这样的,真是让人折寿啊!没办法,大半天都没找出个头绪来,于是我也没什么办法了,只好利用跟踪的分析方法,就是按照安装的步骤来,通过make命令来找到突破口。这种方法的确好使。没用多久,我就稍微有了点头绪,也算今天没白白浪费掉。
先来个“make menuconfig”,这个内核编译的第一步,配置内核。因此我打开Makefile文件,查找目标--menuconfig,我操,怎么会没有,这是算是一个坎吧,怎么办呢,得想法子啊,我操,那换个,"config",我日啊,找了好长时间,发现有两个目标,很不容易。
config: scripts_basic outputmakefile FORCE
$(Q)mkdir -p include/linux include/config
$(Q)$(MAKE) $(build)=scripts/kconfig $@
%config: scripts_basic outputmakefile FORCE
$(Q)mkdir -p include/linux include/config
$(Q)$(MAKE) $(build)=scripts/kconfig $@
“%config”这是什么,没错,有点常识的都知道,一个匹配而已,真的算运气到位啊。如果是第一次执行这个肯定会找目标“script_basic”,在哪里,同样查找一下。
PHONY += scripts_basic
scripts_basic:
$(Q)$(MAKE) $(build)=scripts/basic
$(Q)rm -f .tmp_quiet_recordmcount
这个目标没有依赖关系,那么肯定每次都得执行一遍,来了,“$(Q)”是什么,查找。
ifeq ($(KBUILD_VERBOSE),1)
quiet =
Q =
else
quiet=quiet_
Q = @
endif
看到没有,其实就是为空或者"@",如果熟悉Makefile语法就知道,在指令前加上它,表示执行时,不打印