杂七杂八

作者: 龙遁流 | 来源:发表于2020-04-19 17:24 被阅读0次

    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

    相关文章

      网友评论

        本文标题:杂七杂八

        本文链接:https://www.haomeiwen.com/subject/pmbvbhtx.html