参考文档:
基础知识
一、Android刷机的组件含义
- Android 启动流程:
- 当你的Android手机启动时首先会启动RADIO,然后是SPL。
- 此时SPL 会根据你的按键,确定进入哪个模式( 例如Recovery,Fastboot等等),
- 如果没有按其他键,那么spl 会将kernel 载入到记忆体中,ramdisk 也会载入到你的设备的根目录
- imag文件:
Kernel 操作系统内核操作系统内核是指大多数Linux操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信- data目录:安卓data目录,存放用户的一些私有文件, 会被挂载到 /data
- root目录:安卓root文件系统,里面存放init init.rc等文件,会被挂载到 /
- recovery目录:当启动到recovery模式时,做root文件系统,一般不会直接使用
- system目录:安卓system目录,存放二进制文件和库,会被挂载到 /system
- recovery.img:EXT4格式的img文件,由recovery目录生成
- userdata.img 用户文件系统其实就是userdata目录的内容
- system.img 系统文件系统其实就是system目录中的内容
- boot.img 集成内核的zImage、ramdisk.img、dtb(设备树文件)还有启动参数
- ramdisk.img 其实就是/文件目录下的内容,由root目录生成,然后被集成到boot.img,不会被直接使用
- vendor.img: 包含平台二进制文件,位于/vendor
- partition-table.img:GPT分区表映像,,用于SD卡。
二、搭建Android源码编译环境
详细可参考:https://source.android.com/source/initializing
-
需要使用 Linux 或 Mac OS,我采用的是Ubuntu 14.0.4
-
搭建一些必须的程序包:
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
-
初始化git,替换自己的邮箱和名字
git config –global user.email “test@test.com” git config –global user.name “test”
-
-
make编译需求:
- Android 4.0.x (Ice Cream Sandwich) 及更低版本需要将 make 3.82 还原到较低版本,以避免出现编译错误
-
需要的Linux版本
- Android 6.0 (Marshmallow) - AOSP master:Ubuntu 14.04 (Trusty)
- Android 2.3.x (Gingerbread) - Android 5.x (Lollipop):Ubuntu 12.04 (Precise)
- 2.3以下需要32位的系统
-
对应的JDK版本:
- Android 7.0 (Nougat) - Android 8.0 (O):Ubuntu - OpenJDK 8;Mac OS - jdk 8u45 或更高版本
- Android 5.x (Lollipop) - Android 6.0 (Marshmallow):Ubuntu - OpenJDK 7;Mac OS - jdk-7u71-macosx-x64.dmg
- Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat):Ubuntu - Java JDK 6;Mac OS - Java JDK 6
- Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu - Java JDK 5
注:
如果 Ubuntu >= 15.04 请运行以下命令: sudo apt-get update sudo apt-get install openjdk-8-jdk
I.MX6Q Android端编译流程
1. 编译命令(Ubuntu 16.04下编译)
-
安装需要的包
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip -
安装jdk
sudo apt-get install openjdk-8-jdk -
如果在Ubuntu 14.04下
sudo apt-get update
sudo apt-get install openjdk-8-jdk -
repo工具及源码下载
mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo mkdir androidsource cd androidsourc repo init -u git://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest -b android-8.0.1_r3 repo sync 注: 在此处有碰到几个问题: 1. 提示无法连接到 gerrit.googlesource.com,默认repo会去访问google链接 解决:1. 编辑 ~/bin/repo文件,修改内容REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo' 2.如果1方法还不行,则在bashrc环境变量中添加export REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo' 2. 中间可能碰到下载卡死或失败的情况 Crtl+Z中止后repo sync恢复下载,可尝试多次,防止下载不全面 3. 在下载源码时,通过repo branches指令,查看repo分支,选择自己需要的指令即可
-
repo在下载源码过程中会经常终止,启动脚本同步,其中j8,根据电脑配置,为处理器线程的2倍
#!/bin/bash echo “======= repo sync =======” repo sync -j8 while [ $? == 1 ]; do echo “====== error re-sync again =====” sleep 3 repo sync -j8 done
-
获取I.MX Android build源码
cd ~ (or any other directory you like) tar xzvf imx-o8.0.0_1.0.0_ga.tar.gz source ~/imx-o8.0.0_1.0.0_ga/imx_android_setup.sh # By default, the imx_android_setup.sh script will create the source code build environment in the folder ~/android_build # ${MY_ANDROID} will be refered as the i.MX Android source code root directory in all i.MX Andorid release documentation export MY_ANDROID=~/android_build
-
编译imx Android
cd ${MYANDROI} source build/envsetup.sh lunch sabresd_6q-userdebug make 2>&1 | tee build-log.txt #编译完成后,查看log文件,是否有错误,更改build_id或者build_number,更新${MY_ANDROID}目录的 build_in.mk #Android system image production build method 2 #$ make PRODUCT-sabreauto_6q-userdebug 2>&1 | tee build-log.txt 注:在此处碰到问题: 1. 编译android 7.0 出现Try increasing heap size with java option '-Xmx<size>'错误解决方案 export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g" ./prebuilts/sdk/tools/jack-admin kill-server ./prebuilts/sdk/tools/jack-admin start-server 然后继续编译
-
获取I.MX Kernel
cd ~/androidsource git clone git://git.freescale.com/imx/linux-2.6-imx.git kernel_imx cd kernel_imx git checkout imx-o8.0.0_1.0.0_ga
-
获取I.MX U-boot
cd ~/androidsource/bootable cd bootloader git clone git://git.freescale.com/imx/uboot-imx.git uboot-imx cd uboot-imx git checkout imx-o8.0.0_1.0.0_ga
部分实用指令
-
更新默认的 Java 版本
sudo update-alternatives --config java sudo update-alternatives --config javac
repo指令
Google源码编译介绍
repo是我们以 Git 为基础构建的代码库管理工具。Repo 可以在必要时整合多个 Git 代码库,将相关内容上传到我们的修订版本控制系统,并自动执行 Android 开发工作流程的部分环节。Repo 并非用来取代 Git,只是为了让您在 Android 环境中更轻松地使用 Git。Repo 命令是一段可执行的 Python 脚本,您可以将其放在路径中的任何位置。使用 Android 源代码文件时,您可以使用 Repo 执行跨网络操作。例如,您可以借助单个 Repo 命令,将文件从多个代码库下载到本地工作目录。
- repo status 列出文件状态
- repo diff 查看未提交的修改
- repo start 新建一个主题分支
- git add 暂存更改
- repo upload 将更改上传到审核服务器
- repo sync 同步所有可用项目的文件 此处可用于检测文件是否下载完全,或者从新开始下载,在文件下载终止或卡住时,可用Ctrl+Z,中止指令后重新恢复
- repo branches 查看现有分支的列表
- repo prune 安全移除已过时的主题分支 在本地文件分支出问题时可调用
- repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
初始化 Android 源代码到工作目录 -b 来指定相应分支
网友评论