一 、关于编译时的静态库:
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部分之间的系统间通讯