• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Android底层驱动开发四

武飞扬头像
来自东南亚的皮皮虾
帮助1

目录

一、Android源码编译

编译原理

编译组成

原生Android编译

二、Makefile文件

三、Android.mk文件

四、Android.bp文件

五、Android公码和私码

HLOS(公码)

non-HLOS(私码)

补充:http://t.csdn.cn/ktjxzhttp://t.csdn.cn/ktjxz


一、Android源码编译

编译原理

        编译: 将高级语言翻译成汇编语言或机器语言的过程,编译的本质就是一种翻译的过程。

高级语言(.c/.java)——编译——> 汇编语言(asm)——汇编——> 机器语言(二进制)——执行——> 硬件平台

        机器语言是机器能直接识别的程序语言或指令代码,无需经过翻译,指不经翻译即可为机器直接理解和接受的程序语言或指令代码。机器语言是由0和1组成的二进制数。

        编译流程实例:

hello.c —预处理器—> hello.i —编译器cc1—> hello.s —汇编器—> hello.o —链接器—> hello ——> 可执行文件

编译组成

1、预处理阶段

        主要是处理源文件中以“#”开头的预编译指令。

  • 宏定义指令,删除#define并展开宏
  • 条件编译指令,处理所有条件预编译指令,如#if, #ifdef, #endif
  • 头文件包含指令,插入头文件到“#include”处
  • 删除所有注释
  • 添加行号和文件名标识,以便编译时编译器产生调试用的行号信息
  • 保留所有#pragma编译指令

        预处理阶段会把头文件中的变量、函数都包含进来,所以hello.i文件非常大。

2、编译阶段

        将预处理得到的预处理文件进行语法分析,词法分析,语义分析,优化后,生成汇编代码文件(汇编语言源程序)。

3、汇编阶段

        利用汇编程序(汇编器)将汇编语言源程序转换成机器指令序列(机器语言程序)。

4、链接阶段

        将多个可重定位的目标文件.o合并以生成可执行文件,其可以被加载到内存中,由系统执行。

原生Android编译

        在Linux系统中,我们可以通过make命令来编译代码。执行make命令默认会在当前目录找到一个Makefile文件和Kconfig文件,然后根据Makefile文件中的指令来对代码进行编译。也就是说make命令执行的是Makefile文件中的指令,Makefile文件中的指令可以是编译命令(例如gcc),也可以是其它命令。

        在Android系统中,随着源代码越来越复杂,光一个Makefile在性能上已经满足不了,因此在该机制之上新增了自己的Android.mk和Android.bp方式,为了优雅的与Makefile兼容,soong就此诞生了。

1、谷歌给出了Android的原生编译流程,在Android根目录下执行:

(1)source build/envsetup.sh

作用:将envsetup.sh里的所有用到的命令加载到环境变量里去,设置android的编译环境。注意,该命令只在当前终端生效,如果未生效那么lunch和mm等命令是无法使用的。

(2)lunch

lunch后面的选项以“产品名-编译类型”的形式命名。编译类型有以下几种:

  • eng:工程机
  • user:最终用户机
  • userdebug:调试测试机
  • tests:测试机

作用:显示菜单让我们选择编译平台(分支)以及平台相关的编译选项,也可以在lunch后面直接跟上参数。

(3)make -j4 showcommands dist

  • -j4,开启4个线程
  • Showcommands,显示编译过程中执行的命令
  • dist,将编译后产生的发布文件拷贝到out/dist目录中

作用:make命令其实直接执行了当前目录下的Makefile脚本,编译整个android系统。

make编译命令:

命令 说明
make clean 执行清理,删除此配置的所有输出和中间文件,等同于:rm -rf out/
make all 编译所有内容,不管当前产品的定义中是否会包含
make sdk 编译出 Android 的 SDK(软件开发工具包)
make clean-sdk 清理 SDK 的编译产物
make update-api 更新 API。在 framework API 改动之后,需要首先执行该命令来更新 API,公开的 API 记录在 frameworks/base/api 目录下
make snod 从已经编译出的包快速重建系统镜像
make libandroid_runtime 编译所有 JNI framework 内容
make framework 编译所有 Java framework 内容
make services 编译系统服务和相关内容
make <local_target> 编译一个指定的模块,local_target 为模块的名称
make clean-<local_target> 清理一个指定模块的编译结果
make dump-products 显示所有产品的编译配置信息,例如:产品名,产品支持的地区语言,产品中会包含的模块等信息
make help 帮助信息,显示主要的 make 目标

Android系统的模块编译:

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgakecb
系列文章
更多 icon
同类精品
更多 icon
继续加载