杂七杂八

android HAL层:对Linux内核驱动的封装,Linux是开源的,如果把所有驱动实现都放在内核中,需要公布硬件厂商的源码。
运行在用户空间

一. 在Android 内核源代码工程中编写硬件驱动程序。
二. 在Android 系统中增加C 可执行程序来访问硬件驱动程序。
三. 在Android 硬件抽象层增加接口模块访问硬件驱动程序。
四. 在Android 系统中编写JNI 方法在应用程序框架层提供Java 接口访问硬件。
五. 在Android 系统的应用程序框架层增加硬件服务接口。
六. 在Android 系统中编写APP 通过应用程序框架层访问硬件服务。

croot : 切换到源码根目录
m:在源码树的跟目录执行make
mm:build当前目录下的模块
mmm:build指定目录下的模块
cgrep:在所有C/C++文件下执行grep
jgrep:在所有java文件下执行grep
resgrep:在所有res/*.xml下执行grep
godir:转到包含某个文件的目录下
printconfig:显示当前build的配置信息
add_lunch_combo:在lunch菜单增加条目

LOCAL_MODULE_TAGS:=user debug eng tests optional
user:该模块只在user模式下编译
debug:userdebug
eng:eng make的默认选项
tests:tests
optional:在所有版本都编译,除了tests

HAL 头文件路径 :Pie\hardware\libhardware\include\hardware
HAL 实现路劲 : Pie\hardware\libhardware\modules
Android硬件抽象层规范的要求,分别定义模块ID、模块结构体以及硬件接口结构体。

https://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/

source build/envsetup.sh
m help
hmm 列举可用指令
m 在源码树的根目录执行编译
mm 编译当前路径下所有模块,但不包含依赖
mmm [module_path] 编译指定路径下所有模块,但不包含依赖
mma 编译当前路径下所有模块,且包含依赖
mmma [module_path] 编译指定路径下所有模块,且包含依赖
make [module_name] 无参数,则表示编译整个Android代码

当需要重新编译所有的相关模块,则需要编译命令后增加参数-B,比如make -B

模块 make命令 mmm命令
init make init mmm system/core/init
zygote make app_process mmm frameworks/base/cmds/app_process
system_server make services mmm frameworks/base/services
java framework make framework mmm frameworks/base
frameworkres make framework-res mmm frameworks/base/core/res
jni framework make libandroid_runtime mmm frameworks/base/core/jni
binder make libbinder mmm frameworks/native/libs/binder

cgrep 所有C/C++文件执行搜索操作
jgrep 所有Java文件执行搜索操作
ggrep 所有Gradle文件执行搜索操作
mangrep [keyword] 所有AndroidManifest.xml文件执行搜索操作
mgrep [keyword] 所有Android.mk文件执行搜索操作
sepgrep [keyword] 所有sepolicy文件执行搜索操作
resgrep [keyword] 所有本地res/*.xml文件执行搜索操作
sgrep [keyword] 所有资源文件执行搜索操作

croot 切换至Android根目录
cproj 切换至当前模块的根目录
godir [filename] 跳转到包含某个文件的目录

hmm 查询所有的指令help信息
findmakefile 查询当前目录所在工程的Android.mk文件路径
print_lunch_menu 查询lunch可选的product
printconfig 查询各项编译变量值
gettop 查询Android源码的根目录
gettargetarch 获取TARGET_ARCH值

make clean 等价于 rm -rf out/
make update-api:更新API,在framework API改动后需执行该指令,Api记录在目录frameworks/base/api;

build
系统核心make文件 build/core
产品make文件 device/
模块make文件 Android.mk
out/host Android开发工具生成路径,如SDK工具
out/target/common 针对设备的共通的编译产物,包含java应用代码和java库
out/target/product/[product_name] 特定产品的编译产物及平台相关的C/C++代码和二进制文件

在out/target/product/[product_name]目录下,有几个重量级的镜像文件:
system.img:挂载为根分区,主要包含Android OS的系统文件;库,可执行文件以及预置的应用程序
ramdisk.img:主要包含init.rc文件和配置文件等;用来挂载其他系统镜像并启动 init 进程。
userdata.img:被挂载在/data,主要包含用户以及应用程序相关的数据;

LOCAL_SRC_FILES:当前模块包含的所有源码文件;
LOCAL_MODULE:当前模块的名称(具有唯一性);
LOCAL_PACKAGE_NAME:当前APK应用的名称(具有唯一性);
LOCAL_C_INCLUDES:C/C++所需的头文件路径;
LOCAL_STATIC_LIBRARIES:当前模块在静态链接时需要的库名;
LOCAL_SHARED_LIBRARIES:当前模块在运行时依赖的动态库名;
LOCAL_STATIC_JAVA_LIBRARIES:当前模块依赖的Java静态库;
LOCAL_JAVA_LIBRARIES:当前模块依赖的Java共享库;
LOCAL_CERTIFICATE:签署当前应用的证书名称,比如platform。
LOCAL_MODULE_TAGS:当前模块所包含的标签,可以包含多标签,可能值为debug,eng,user,development或optional(默认值)

LOCAL_PROPRIETARY_MODULE
BOARD_VNDK_VERSION := current

echo 0 > /proc/sys/kernel/printk 关闭内核打印

LOCAL_CFLAGS += -DXXX 相当于在所有源文件中增加一个宏定义#define
-O0不优化,-O1低级优化,-O2中级优化,-O3高级优化,-Os代码空间优化
-W[no-]<警告选项> no- 表示诊断时忽略这个警告

-Woption 让编译器给出option指定的编译警告,常用的一些如下:
unused-function: 遇到仅声明过但尚未定义的静态函数时发出警告。
unused-parameter: 从未用过的函数参数的警告。
unused-variable: 在本地声明但从未用过的变量的警告。
unused-value: 经计算但从未用过的值得警告。
return-type: 对函数返回类型不当的警告。
uninitialized:在初始化之前就使用自动变量。
float-equal: 比较两个浮点数是否相等。
-Wall 给出“几乎”所有的编译器警告,注意是“几乎”。下面是一些-Wall没有输出的警告类型:
sign-compare:将有符号类型和无符号类型数据进行比较时发出警告。
unreachable-code:如果发现从未执行的代码时给出警告。
inline:如果某函数不能按要求内嵌(inline),则无论是函数声明为inline或者是指定了-finline-functions 选项,编译都将发出警告。
-Werror 把所有的警告都视为错误处理。
-Wno-option 如果我们不想输出某些警告信息,可以使用此参数形式,比如:LOCAL_CFLAGS := -Wno-unused-parameter

1,Add module B absolute path in "LOCAL_C_INCLUDES+=" of module A make file.
LOCAL_C_INCLUDES += \ /system//include
2,is the Module B is shared library then add below in module A make file.
LOCAL_LDFLAGS += $(call intermediates-dir-for,SHARED_LIBRARIES,B)/B.so
3,At last add additional dependency for module B in module A
LOCAL_ADDITIONAL_DEPENDENCIES := B

你可能感兴趣的:(杂七杂八)