Android IMX6Q源码编译

参考文档:

基础知识

一、Android刷机的组件含义

  1. Android 启动流程:
    • 当你的Android手机启动时首先会启动RADIO,然后是SPL。
    • 此时SPL 会根据你的按键,确定进入哪个模式( 例如Recovery,Fastboot等等),
    • 如果没有按其他键,那么spl 会将kernel 载入到记忆体中,ramdisk 也会载入到你的设备的根目录
  1. 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

  1. 需要使用 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”
      
  2. make编译需求:

    • Android 4.0.x (Ice Cream Sandwich) 及更低版本需要将 make 3.82 还原到较低版本,以避免出现编译错误
  3. 需要的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位的系统
  4. 对应的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
    

部分实用指令

  1. 更新默认的 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 命令,将文件从多个代码库下载到本地工作目录。

  1. repo status 列出文件状态
  2. repo diff 查看未提交的修改
  3. repo start 新建一个主题分支
  4. git add 暂存更改
  5. repo upload 将更改上传到审核服务器
  6. repo sync 同步所有可用项目的文件 此处可用于检测文件是否下载完全,或者从新开始下载,在文件下载终止或卡住时,可用Ctrl+Z,中止指令后重新恢复
  7. repo branches 查看现有分支的列表
  8. repo prune 安全移除已过时的主题分支 在本地文件分支出问题时可调用
  9. repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
    初始化 Android 源代码到工作目录 -b 来指定相应分支
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容