zoukankan      html  css  js  c++  java
  • 在ubuntu14.04上编译android4.2.2系统

    原创作品,转载请注明出处,严禁非法转载             copyright:weishusheng   2015.8.1

    时下android系统非常流行,下面就来说一下,下载编译一个android系统的过程。此处仅是我个人开发过程的总结和记录,想获取更详细资料,可参考官方文档。在编译之前一定要找对相关资料,错误的资料会让你做的很痛苦,还有就是android源码下载比较慢,编译也很慢,建议下载和编译在晚上睡觉之前,这样第二天醒来就编译好了,避免了等待的烦躁。

    环境:

    电脑:Lenovo 32位  2G内存(编译android明显不够,后面会说到如何增加swap存储容量)

    主机:VMware10.0.0+ubuntu14.04(最好是64位,32位的编译会出问题)

    android版本:android4.2.2

    目标平台:TMDXEVM355x (AM355x start kit)

    参考资料:

    (1)《android4.2.2开发指导》参考TI 官方档:http://downloads.ti.com/sitara_android/esd/TI_Android_DevKit/TI_Android_JB_4_2_2_DevKit_4_1_1/index_FDS.html

    (2)《Vmware Workstation安装ubuntu14.04》参考技术博客:

    http://jingyan.baidu.com/article/0320e2c1ef9f6c1b87507bf6.html

    (3)《如何在BIOS中开启虚拟化技术》参考网络文档:

    http://wenku.baidu.com/link?url=6fySZ5sXqb67pdU3TcoegwBKrqfgJG28cA0XLy2OYkKRM5k4K8AVwj2cY6w9GD6TjXez-P_z5kRtVE0mMrYa6Gq7DpTjboauNTofPv-cHWC

    (4)《Ubuntu Linux创建和增加Swap分区教程》参考:

    http://www.linuxidc.com/Linux/2014-12/110155.htm

    (5) 另外给出android镜像、调试工具、SDk、学习文档等的中文网页链接,里面真是应有尽有,真是android学习者的福音,一定要进去看看,你绝对不会后悔的:http://www.androiddevtools.cn/

    适用对象:

    编译出的android系统适用于TMDXEVM355x (AM355x start kit)目标平台

    本文适用于android开发工作者,不需要有太多的android知识(因为对android,我也是刚入门),致力于使android开发者可以快速在TMDXEVM355x (AM355x start kit)上运行自己编译的android4.2.2系统。

    编译大体流程:

    安装ubuntu开发环境--->安装依赖库--->下载android源码--->配置交叉编译环境--->编译Bootloader--->编译android linux内核--->编译文件系统--->制作启动SD卡--->从SD卡启动

    1.安装ubuntu14.04 64位

    android的编译需要ubuntu 64位的系统,具体安装过程可以百度,在安装ubuntu之前需要开启PC的硬件虚拟化。

    2.安装依赖库

    为了顺利编译android系统,执行下面的命令安装必须的软件包和库

    $ sudo apt-get install git-core gnupg flex bison gperf build-essential 
      zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev 
      libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 
      libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos 
      python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
      minicom tftpd uboot-mkimage expect libgl1-mesa-dri
      $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

    安装JDK6

    下载JDK6,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

    执行下面的命令安装JDK6

    $ chmod a+x jdk-6uXX-linux-x64.bin
      $ ./jdk-6uXX-linux-x64.bin
      $ sudo mkdir -p /usr/lib/jvm
      $ sudo mv jdk1.6.0_XX /usr/lib/jvm/
      $ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_XX/bin/java" 1
      $ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_XX/bin/javac" 1
      $ sudo update-alternatives --config java
      $ sudo update-alternatives --config javac

    主意:
    android4.2.2系统的编译需要JDK6以上版本
    硬盘空间至少要留有30G可用空间

    3.下载android4.2.2源码(有两个方式)

    方式一:repo下载

    在HOME目录下新建bin目录,并添加环境变量

    $ mkdir ~/bin
    $ export PATH=~/bin:$PATH

    下载repo脚本,并给予脚本执行权限

    $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 
    $ chmod a+x ~/bin/repo

    执行以下命令下载android源码

    $ mkdir $HOME/rowboat-android
    $ cd $HOME/rowboat-android
    $ repo init -u git://gitorious.org/rowboat/manifest.git -m TI-Android-JB-4.2.2-DevKit-4.1.1.xml
    $ repo sync
    如果上述下载方法速度太慢,可以试试方法二

    方法二:直接下载
    下载地址:http://downloads.ti.com/sitara_android/esd/TI_Android_DevKit/TI_Android_JB_4_2_2_DevKit_4_1_1/exports/TI_Android_JB_4.2.2_DevKit_4.1.1.bin

    下载完成后,执行下面的命令进行解压
    $ cd $HOME
    $ chmod a+x TI_Android_JB_4.2.2_DevKit_4.1.1.bin
    $ ./TI_Android_JB_4.2.2_DevKit_4.1.1.bin

    解压完成后会生成许多目录,比较重要的比如:

    • Android File system : $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/
    • Android Linux Kernel: $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/kernel
    • Bootloader  : $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/u-boot
    • Toolchain location will be at $HOME/TI_Android_JB_4.2.2_DevKit_4.1.1/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin

    4.设置交叉编译工具链

    设置android源码目录下的prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin里的arm-eabi-作为交叉编译工具

    $ export PATH=$HOME/rowboat-android/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH

    注意:强烈建议把arm-eabi-设置为交叉编译工具,避免使用其他交叉编译工具而产生的冲突


    5.编译Bootloader
    进入u-boot目录
    $ cd <android source path>/u-boot

    执行下面的命令
    $ make CROSS_COMPILE=arm-eabi- distclean
    $ make CROSS_COMPILE=arm-eabi- am335x_evm_config
    $ make CROSS_COMPILE=arm-eabi- 

    这将会生成MOL、u-boot.img


    6.编译Android Linux Kernel

    进入kernel目录

    $ cd <android source path>/kernel

    执行下面的命令
    $ make ARCH=arm CROSS_COMPILE=arm-eabi- distclean
    $ make ARCH=arm CROSS_COMPILE=arm-eabi- am335x_evm_android_defconfig
    $ make ARCH=arm CROSS_COMPILE=arm-eabi- uImage

    编译完成后会在 kernel/arch/arm/boot 下产生uImage

    7.增加swap分区

    编译android文件系统时,至少需要4G的运行内存,如果少于4G,编译会通不过(当然看个人编译环境了,我是亲自试过了,2G编了一天一夜,没过,再加了2G swap,还是没过,用了整整8个小时)但我只有2G,所以需要增加swap分区,在我增加5G的swap分区后,终于编译通过了,这次用了6个小时。
    增加swap分区步骤
    首先查看当前内存情况
    $ free -m

    创建swap分区
    $ mkdir swap
    $ cd swap
    $ dd if=/dev/zero of=swapfile bs=1024 count=5000000                 //我创建了大概5.8G,需要多大,大家自己计算

    把swapfile转变为swap格式
    $ mkswap swapfile

    启动swapfile
    $ swapon swapfile

    让系统启动时自动加载这个swap文件
    $ vim /etc/fstab
    增加以下内容
    /SWAP_PATH/swapfile swap swap defaults 0 0 

    再次查看
    当前内存情况
    $ free -m

    8.编译android文件系统

    进入源码顶层目录
    $ cd <android source path>


    编译文件系统
    $ make TARGET_PRODUCT=am335xevm_sk OMAPES=4.x -j<N>  

    注意:

    N是处理器数量的两倍,这个参数可以加快编译速度

    文件系统将会在out/target/product/目录下生成

    9.压缩文件系统

    $ cd out/target/product/am335xevm_sk
    $ mkdir android_rootfs
    $ cp -r root/* android_rootfs
    $ cp -r system android_rootfs
    $ ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats android_rootfs . rootfs rootfs.tar.bz2
    mktarball.sh会把SD卡分成四个区,并把Bootloader,kernel,文件系统等自动烧录进相应的分区。


    10.编辑启动引导脚本uEnv.txt,该脚本在启动时告诉系统启动的参数
    执行下面的命令进行镜像烧写
    $ mkdir uEnv.txt
    bootargs=console=ttyO0,115200n8 androidboot.console=ttyO0 mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait init=/init ip=off
    bootcmd=mmc rescan ; fatload mmc 0 81000000 uImage ; bootm 81000000
    uenvcmd=boot

    11.新建系统镜像目录,并把Bootloader、kernel、文件系统都拷贝进去
    $ mkdir image_folder
    $ cp uEnv.txt image_folder
    $ cp kernel/arch/arm/boot/uImage image_folder
    $ cp u-boot/u-boot.img image_folder
    $ cp u-boot/MLO image_folder
    $ cp out/target/product/am335xevm_sk/rootfs.tar.bz2 image_folder
    $ cp Media_Clips image_folder

    注意:
    Media_Clips可以在官网上下载,那里有编译好的所有镜像。Media_Clipes里存放的是图片和音视频文件,也可以不烧写进系统。

    12.把镜像写入SD卡
    注意:
    SD卡至少需要2G容量
    写入时会首先格式化SD卡,原来的数据会全部丢失

    把SD卡通过读卡器连接到ubuntu,然后执行下面的命令把镜像写入SD卡
    $ cd image_folder $ sudo ./mkmmc-android.sh /dev/sd<sd card mount-point> MLO u-boot.img uImage uEnv.txt rootfs.tar.bz2 Media_Clips

     注意:

    <sd card mount-point>是SD卡的挂载点,不要选错,选错了系统可能就被格式化了。

    13.启动android系统

    成功写入SD卡后,把SD卡从读卡器取出,放入开发板,上电启动,首次启动比较慢,大概5分钟后启动成功,第二次启动会快很多。

  • 相关阅读:
    Android动画系列
    Handler处理机制
    cp命令覆盖文件时不用按Y来确认的方法
    phantomjs
    无界面模式
    win10上安装keras
    MongoDB 排序
    MongoDB 条件操作符
    MongoDB 对象操作
    SQL 和 NoSQL 的区别
  • 原文地址:https://www.cnblogs.com/thinkinglife/p/4697044.html
Copyright © 2011-2022 走看看