Tiny4412上编译烧录android折腾笔记

经验

1. 基础环境说明

  • 开发板型号:FriendlyARM Tiny4412SDK-1312-S702
  • 编译机linux环境:Ubuntu 14.04.5 下载地址
  • Android源码版本:android-5.0.2-fs-20170116.tar.gz 下载地址
  • kernel源码版本:linux-3.0.86-20170221.tgz 下载地址
  • uboot源码版本:uboot_tiny4412_0929.tar.gz 下载地址

2. 配置步骤

以下配置步骤假设你对linux系统的基本知识已经有所了解,并已经拥有了ubuntu系统的root权限。不要盲目复制命令执行,你需要知道每条命令做了什么,根据自己的实际情况来操作。

2.1 安装交叉编译环境

  • 用到的文件:附赠的光盘中的arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz压缩包

  • 配置方法:

    1. 首先在命令行进入压缩包所在目录并使用tar命令解压,假设压缩包所在目录为/mnt/Disk-A/,则执行

      cd /mnt/Disk-A
      tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz –C /
      
    2. 配置系统环境变量。如果正常解压,此时交叉编译器已经被解压到了/opt/FriendlyARM/toolschain/4.5.1这个目录,需要设置环境变量以方便使用。

      假设你使用的shell是bash,使用你常用的编辑器(如vim,gedit)打开~/.bashrc,如果没有这个文件,则新建。例如:

      vim ~/.bashrc
      

      然后将以下语句加入该文件的最后一行。

    export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
    

    之后保存退出。

    1. 注销用户并重新登录,此时在命令行执行arm-linux-gcc –v,如果能正常输出版本信息,则说明交叉编译器已经安装成功,否则检查前两步是否出现了问题。

2.2 配置Android编译环境

  1. 安装java环境

    • 根据你要编译的android版本选择适合的JDK版本

    The master branch of Android in AOSP: Ubuntu - OpenJDK 8, Mac OS - jdk 8u45 or newer

    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

    • 以我们本次用到的Android 5.0.2 和 Ubuntu14.04为例,我们需要安装OpenJDK 7,这个包在ubuntu的软件源里有了,所以我们只需要执行

      sudo apt-get install openjdk-7-jdk
      
    • 在命令行执行javajavac来检查是否已经成功安装了java环境。

  2. 安装编译必须的软件包

  • 接下来需要在ubuntu上安装编译Android所需要的软件包。

  • 如果你是ubuntu14.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
    
  • 如果你是ubuntu12.04的版本,则执行以下命令:

    sudo apt-get install git 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 tofrodos \
      python-markdown libxml2-utils xsltproc zlib1g-dev:i386
    
    sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
    
  • 推荐使用ubuntu14.04版本进行编译工作,避免因为版本不同出现问题。

2.3 解压源码

2.3.1 解压kernel源码

将kernel源码压缩包解压到一个用于编译的文件夹中,假设我们的压缩包放在/tmp/compile/kernel中,将其解压到当前目录只需要执行以下命令:

cd /tmp/compile/kernel
tar xvzf linux-3.0.86-20170221.tgz

之后就能在当前目录下看到解压好的linux-3.0.86文件夹。

2.3.2 解压Android源码

与解压kernel类似,同样进入压缩包所在目录将源码包解压。(解压后大概14GB,要保证磁盘空间足够)

例如:

cd /tmp/compile/android
tar xvzf android-5.0.2-fs-20170116.tar.gz

执行后就能得到解压后的android源码文件夹。

2.3.2 解压uboot源码

与前二者类似,都是使用tar命令解压.tar.gz压缩包。

例如:

cd /tmp/compile/uboot
tar xvzf uboot_tiny4412_0929.tar.gz

以上的三组命令并非必需,在图形界面里解压也并没有什么影响。

2.4 编译源码

2.4.1 编译kernel
  1. 首先进入源码所在的目录,例如:

    cd /tmp/compile/kernel/linux-3.0.86
    
  2. 接下来将源码中tiny4412的内核配置设为默认配置

    cp tiny4412_android_defconfig .config
    
  3. 然后可以对内核的编译选项进行自己的调整,执行

    make menuconfig
    

    会进入一个终端里的简单界面,用于调整kernel的一些编译选项

  4. 接下来就可以使用make命令进行编译工作了。

    make -jN    # N代表编译时的线程数,根据实际情况修改,可以加速编译(如 make -j8)
    
  5. 编译好后就可以在arch/arm/boot路径下得到一个zImage文件,这就是编译好的内核。

    下图为编译好内核时的输出

2.4.2 编译Android源码
  1. 与编译kernel类似,首先cd进入源码所在目录,并载入setenv脚本设置编译时的环境:

    cd /tmp/compile/android/android-5.0.2    # 进入目录
    . setenv   #这个点其实是个source命令,中间要有空格
    
  2. 执行make命令开始编译。(需要很长时间)

    make -jN    # N代表编译时的线程数,根据实际情况修改,可以加速编译(如 make -j8)
    

    我们的8线程笔记本在编译时的情况,CPU全部占用:

    编译结束后的输出:用时 1小时18分钟56秒

    ???

  3. 这时还没有结束,还需要执行一个脚本生成一些img文件

    ./gen-img.sh
    

    然后当前目录就生成了system.img, ramdisk-u.img,这两个就是我们接下来要用到的。

2.4.3 编译uboot

uboot这里被坑了,启动andoird后一段时间lcd灭,无反应,弄好了来填坑

最终确定是板子自己的问题,没用 uboot

  1. 进入uboot源码所在目录,例如:

    cd /tmp/compile/uboot
    
  2. 配置tiny4412的make配置并编译

    cd uboot_tiny4412
    make tiny4412_config
    make
    
  3. 编译uboot烧写工具,执行

    make -C sd_fuse
    

经过以上步骤,就会得到uboot需要的四个 .bin 文件和用于将uboot写入SD卡的工具。

2.5 烧录系统

uboot这里被坑了,启动andoird后一段时间lcd灭,无反应,弄好了来填坑

最终确定是板子自己的问题,没用 uboot

烧录使用的是 superboot, 有详细的说明和带GUI的软件,无须赘述

3. 参考资料

该配置指导所参考的资源、网站、个人博客有:

4. 附注

这个文章也写了很久了,现在可能很多地方发生了变化。毕竟写了这么多,还是把它放进了博客里了。