一 、关于编译时的静态库:

LOCAL_SYSTEM_SHARED_LIBRARIES

如果编译时没有提供这个选项,系统编译时,会默认链接一些库,

一般是libc libstdc++ libm,可以参考/build/core/combo/TARGET_linux-x86.mk

中的DEFAULT_SYSTEM_SHARED_LIBRARIES这个变量的值。

如果编译时提供了这个选项,且值不是none或者空,

系统编译时就不会链接默认的这几个库。比如编译libc本身时。

关于这个逻辑的判断,可以参考/build/core/binary.mk

LOCAL_STATIC_LIBRARIES

应该链接到这个模块的静态库列表,这仅仅对共享库模块才有意义。

LOCAL_PREBUILT_JNI_LIBS

提取第三方应用的lib方法,使用@标识符会将apk中的so抽离出来build进apk同级目录下的lib文件夹中

二、 kernel make

其实内核Makefile体系的包含了Kconfig和Kbuild两个系统,

Kconfig 对应的是内核配置阶段,如你使用命令:make menuconfig,就是在使用Kconfig系统

Kconfig文件解析程序:scripts/kconfig/*

各个内核源代码目录中的kconfig文件:kconfig 

各个平台的缺省配置文件:arch/$(ARCH)/configs/*_defconfig

当Kconfig系统生成.config后,Kbuild 会依据.config编译指定的目标

顶层 Makefile 读取.config 文件,并根据.config 文件确定访问哪些子目录,并通过递归向下访问子目录的形式完成。

顶层Makefile同时根据.config 文件原封不动的包含一个具体架构的Makefile,其名字类似于 arch/$(ARCH)/Makefile。

该架构Makefile 向顶层Makefile 提供其架构的特别信息。每一个子目录都有一个Makefile 文件,用来执行从其上层目录传递下来的命令。

子目录的 Makefile 也从.config 文件中提取信息,生成内核编译所需的文件列表。

makefile 加log

$(warning xxxxx)

$(error xxxxx)

输出变量方式为:$(warning  $(XXX))

这个和$(wildcard)一样的。

三 、 AP和BP俗语介绍

大多数的手机都含有两个处理器:

Application Processor  :操作系统、用户界面和应用程序

Baseband Processor:(基带处理器)手机射频通讯控制软件

BP部分提供基础的通话,数据通信,和SIM卡功能。

而AP部分围绕这些基础功能,提供丰富的服务,例如通话记录,短信的编辑回复和转发等等

主要是RIL(Radio Interface Layer),它负责AP部分与BP部分之间的系统间通讯