zoukankan      html  css  js  c++  java
  • android编译环境的搭建和编译(全志A20平台)

    android编译环境搭建和编译
     
    • 第一部分,平台说明
        1,编译平台:I7-4770+16G-DDR3-1600+500G-HD.
        2,硬件平台:全志A20
        3,软件平台:ubuntu12.04LTS+android4.2(全志SDK)
     
     
    • 第二部分,android编译环境搭建
     
    一,开始构建Linux编译环境

    1,android官方推荐安装ubuntu12.04LTS。

    2,编译Gingerbread (2.3.x)以上android版本(包含主流版本),都应使用64位系统环境;安装ubuntu-12.04LTS-AMD64而不是ubuntu-12.04LTS-x86。

    3,在虚拟机上是可以编译android的,但是要编译android代码树,至少要保证16G的RAM或者SWAP和不少于30G的磁盘空间。

    4,还需要以下工具:Python 2.6-2.7,GNU Make 3.81-3.82,JDK 6(sun-java6-jdk),Git 1.7 or newer。

     
    二,安装sun-java6-jdk包
     
    1,下载bin文件
    下载oracle java 6 jdk 64-bit(即sun-java6-jdk)
    $ wget --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F" http://download.oracle.com/otn-pub/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin
    $ chmod u+x jdk-6u45-linux-x64.bin
    2,安装的过程
    $ ./jdk-6u45-linux-x64.bin
    $ sudo mv jdk1.6.0_45 /opt
    $ sudo update-alternatives --install "/usr/bin/java" "java" "/opt/jdk1.6.0_45/bin/java" 1
    $ sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/jdk1.6.0_45/bin/javac" 1
    $ sudo update-alternatives --install "/usr/lib/mozilla/plugins/libjavaplugin.so" "mozilla-javaplugin.so" "/opt/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so" 1
    $ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/opt/jdk1.6.0_45/bin/javaws" 
    3,ubuntu可能还有其他的jdk,下两行就是选择默认的JDK版本(sun-java6-jdk) 
    $ sudo update-alternatives --config java
    $ sudo update-alternatives --config javac
    4,设置JAVA_HOME环境变量
    $ export _JAVA_HOME=/opt/jdk1.6.0_45/
     
            有个一点注意:由于ubuntu社区已经对sun-java6-jdk不提供支持了,所以,网上那些添加源的做法已经失效了。不用再尝试了。本方法通过wget命令从oracle下载bin文件,可以离线安装更加具有普遍效应。
            
            5,可能出现的问题:由于 sun-java6-jdk最终安装在/opt目录下面,在编译android过程中可能出现,找不到jar命令的情况,这时就应当为jar在/usr/bin下面创建一个链接文件。
            5.1解决未发现jar的方法
                                 $ cd /usr/bin
                 $ sudo ln -s -f /opt/jdk1.6.0_30/bin/jar  
    
    
            5.2解决未发现javadoc的方法
    
                $ cd /usr/bin
    
                $ sudo ln -s -f /opt/jdk1.6.0_30/bin/javadoc 
     
    三,安装依赖包
        在安装过程中可能出现依赖关系的问题;一旦出现了,可以尝试一个个的安装相应的依赖包。
    de style="line-height: 14px;  font-size: 18px;"  >$ 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:i386de>
    de style="line-height: 14px;  font-size: 18px;"  >
    $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.sode>
    四,搭建完成构建
     
     
    • 第三部分 SDK包的完全编译
     
    一,SDK代码说明
        SDK包包含2个部分,lichee部分代码树和android部分
     
    二,编译lichee部分代码树
         如下代码:
    $ cd lichee
    $ ./build.sh -p sun7i_android
        编译开始前,将mkimage复制到/usr/bin下面;并将文件的权限改为0777。
     
     
     
    三,编译android部分代码树
        如下代码:
    $ cd ../android4.2.1
    $ source build/envsetup.sh
    $ lunch //选择wing_k70-eng
    $ extract-bsp    //拷贝内核和模块到android中;  
    $ make -j16
    $ pack    //完全打包 //在lichee	oolspack路径下生成了固件sun7i_android_wing-k70.img
     
     
    四,说明
        1,使用time命令组合编译,就可以得到编译所要的时间。
        2,使用pack命令打包后,所有的img形成一个固件(sun7i_android_wing-k70.img),包括内核,uboot,文件系统和android。这个新的img的存放路径是:lichee oolspacksun7i_android_wing-k70.img
     
    • 第四部分 固件的烧写( 烧写sun7i_android_wing-k70.img )
    一,寻找固件
    打包(pack)完后,在lichee/tools/pack目录下面有一个文件sun7i_android_wing-k70.img,该文件就是我们要烧录到板子的固件。
     
    二,固件说明
    固件是完全打包;已经将其他的*.img文件封包到了sun7i_android_wing-k70.img中。所以,无需在烧录别的文件了。
     
    三,固件烧写
        1,使用PhoenixSuit烧写固件。
     
    在预览中打开sun7i_android_wing-k70.img
     
     
        2,长按其他按键(非电源键),插入USB,之后不断按压电源键,这样PhoenixSuit会提示在烧写固件。在过程中,由于USB可能接触不良,要有耐心,多重复几次。固件大,下载过程长。
     
     
    3,烧写成功后,重新开启平板电脑。烧写的固件可能会与硬件不匹配,但是通过命令是可以查看,系统是否已经运行。
     
    • 第五部分  只升级内核与文件系统的方法(烧写boot.img)
    一,烧写boot.img的说明
        boot.img文件,包含内核与文件系统,但是未能将内核的模块加载进入boot.img,这点一定要注意。
     
    二,烧写过程
     
    1,编译代码树
    第一步,编译lichee
    $ cd lichee
    $ ./build.sh -p sun7i_android
    第二步,编译android
    $ cd ../android4.2.1
    $ source build/envsetup.sh
    $ lunch //选择wing_k70-eng
    $ extract-bsp
    $ make bootimage
    注意:“make -j16”和“pack”不用。在执行这些命令后,内核印象文件a20_wing4.2_to_chenwenjie/android4.2.1/out/target/product/wing-k70/boot.img时间戳会发生更新。然后,就可以使用adb推入平板电脑了。
     
    2,烧写boot.img
    boot.img 镜像文件包括了安卓系统的内核和文件系统。单独烧录boot.img的方法如下:
    > adb push Z:	o_chenwenjiea20_wing4.2_to_chenwenjieandroid4.2.1out	argetproductwing-k70oot.img /mnt/sdcard/
    > adb shell sync
    > adb shell dd if=/mnt/sdcard/boot.img of=/dev/block/nandc
    > adb shell sync
    > adb shell reboot
     
    图中命令是上面提及的命令。请注意boot.img的存放路径。在执行完毕上面的命令完毕后,平板电脑会发生重启,PC端android软件有个掉线到重新上线的过程。在推送boot.img过程中,并没有推送相关的驱动*.ko文件。
     
     
    三,注意的几个问题
    1,问题一:A20平台直接读写寄存器。
    下图就是读写寄存器的命令
     
     
    2,问题二:在升级内核与文件系统后,根据需要升级内核模块。(第六部分)
     
     
    • 第六部分 升级内核模块
    一,升级内核模块以CTP为例
     
    二,举例说明:烧录boot.img时发现的问题
     
    1,问题的解释和解决方法
    boot.img 镜像文件包括了安卓系统的内核和文件系统,但是并没有包含驱动模块,所以可能出现内核更新了,而模块不更新的现象。例如,本例中的gslX680.ko内核模块。
     
    在烧录boot.img时发现的出现一个问题,就是发现驱动模块没有被编译进入boot.img中。解决方法如下:
        > adb push Z:	o_chenwenjiea20_wing4.2_to_chenwenjielicheelinux-3.3driversinput	ouchscreengslX680.ko /system/vendor/modules
        > adb shell sync
    
        > adb remount     //解决只读问题(可选)
        > adb shell reboot
    
    如图示:
     
     
    2,问题的延伸
    如何是一个硬件失去驱动,例如删除了gslX680.ko这个文件,重启平板电脑后,机器的触摸屏不能工作。
        > adb shell
        # cd /system/vendor/modules
    
        # rm gslX680.ko
    
        # reboot
    
     
     
    同样地,反向操作又是可以恢复驱动的。
     
    3,另外解决方法,通过代码树的完全编译打包解决这个问题
    如果完全编译并且打包,那么就不会出现上述的问题。将最新的固件sun7i_android_wing-k70.img通过PhoenixSuit烧入平板电脑。
     
    4,内核模块的其他操作命令
        #insmod *.ko    //加载模块到内核
        #rmmod *    //将模块从内核中移除
        #lsmod         //显示已加载的模块
     
    • 第七部分 监视内核调试信息
     
    一,安装adb调试工具
    将目录中所有的文件复制到系统的system32的目录下。接着,就可以在cmd中使用adb命令就可以使用该调试工具。
     
     
     
    二,参看内核打印信息
        >adb shell cat /proc/kmsg > 1.txt //或者直接adb shell cat /proc/kmsg 
    在administrator的目录下就可以查看1.txt文件。1.txt文件内容如下:
     
     
    在打印信息可以提取到:在“lichee/linux-3.3/drivers/video/sun7i/disp/de_bsp/de/disp_tv.c”文件的第335行,有一行错误打印信息
    “DE_WRN("dac %d short to ground ", i);”。接下来根据调试方法和调试需要,对代码进行修改。
     
     
     
     
     
    • 附录:参考资料
     
  • 相关阅读:
    数学人眼中的湖北(五)
    数学人眼中的湖北
    范德蒙德恒等式
    日本高中数学的学习范围
    怎样搞数学竞赛
    单色三角形问题
    shell wait 和sleep 对比
    上传本地文件到github仓库
    windows2008服务器设置系统启动时程序自动运行
    小程序运行报错:errMsg: "request:fail url not in domain list"
  • 原文地址:https://www.cnblogs.com/cliuwei/p/5505347.html
Copyright © 2011-2022 走看看