硬件:至少是64位CPU,编译目录有50G剩余空间,内存2G以上,交换区4G
计算机:ubuntu 12.04 64位
官方指导编译如下
http://docs.cubieboard.org/tutorials/ct1/installation/cb3_a20-compiling_android_image_for_cubietruck
1、源码下载路径方法
两种下载方法,我是直接到cubie百度网盘上下载的,网盘上分享代码和参考资料还是很全的。
1) 在 github 下载
git clone https://bitbucket.org/cubietech/a20-android4.2_lichee.git
git clone https://bitbucket.org/cubietech/a20-android4.2_android.git
2 )在百度云下载源码压缩包:
http://pan.baidu.com/s/1kTFXnPP
3)Cubietruck下载和Cubieboard2一样
我选(cubieboard2_android_SDK_v1.05),下载后里面有android 和linux内核(lichhe)
http://docs.cubieboard.org/tutorials/cb2/development/building_your_own_android_image
2、搭建编译环境 系统ubuntu 14.10
官方推荐的系统是ubuntu 12.04 ,
2 安装 JDK
$wget dl.cubieboard.org/software/tools/android/jdk1.6.0_45.tar.gz
解压:$sudotar -xvf j dk1.6.0_45.tar.gz
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
3 安装编译所需包( Ubuntu 12.04 ):
$sudo apt-get update
$sudo apt-get upgrade
$sudo apt-get install build-essential u-boot-tools uboot-mkimage binutils-arm-linux-gnueabihf
$sudo apt-get install gcc g++ gcc-arm-linux-gnueabi gcc-arm-linux-gnueabihf g++-multilib
$sudo apt-get install cpp-arm-linux-gnueabihf libusb-1.0-0 libusb-1.0-0-dev wget fakeroot
$sudo apt-get install kernel-package zlib1g-dev libncurses5-dev build-essential
$sudo apt-get install texinfo texlive ccache zlib1g-dev gawk bison flex gettext uuid-dev
$sudo apt-get install ia32-libs git gnupg flex bison gperf build-essential zip
$sudo apt-get install curl libc6-dev x11proto-core-dev libx11-dev:i386 lib32ncurses5-dev
$sudo apt-get install libreadline6-dev:i386 mingw32 tofrodos python-markdown
$sudo apt-get install libxml2-utils xsltproc zlib1g-dev:i386 libgl1-mesa-dev
4 编译
用sudo 或者sudo -i 切换root 账户 ,在root下才能编译内核(不一定,看文件怎么放的)
拷贝内核配置文件
cd$ lichee/linux-3.4/ #进入到kernel 目录
lichee/linux-3.4$ make clean # 删除大多数的编译生成文件, 保留内核的配置文件.config
lichee/linux-3.4$ cp arch/arm/configs/cubietruck_config .config #把内核默认配置文件拷贝到根目录(/linux-3.4)下,命名为.config
lichee$ ./build.sh -p sun7i_android #编译针对 A20CPU 的linux kernel(在 lichee目录下)
等待编译完成
最后会出现
INFO : build u-boot ok
build rootfs ...
skip make rootfs for android
build rootfs ok
build lichee ok
进入lichee/out 可以看到 zImage
5、整体源码源码编译
这编译过程中需要导入JDK,但普通用户在/etc/profile中设置好了JAVA_HOME变量并引入到PATH中,用su root,是不会获取JAVA_HOME环境变量,应该用su - root命令,这时又可以找到JAVA_HOME这个变量了。
对比了一下su和su - 这两个命令的差别才明白:su是切换用户存取权限,但是没有获得环境变量,所以PATH没有被带入;su -是完全的切换用户,可以获得环境变量,所以可以找到JAVA_HOME
android编译步骤如下 :
$ cd android #进入android source code
android$ source build/envsetup.sh #设置编译环境变量
android$ lunch #选择目标硬件,这里选16
内核编译完后,进入 android 目录下。这里执行整个固件的编译,生成 system.img,userdata.img 等
镜像,最后将它们打包成我们要的固件。
输入 16 ( 选择 sugar_cubietruck-eng)
拷贝内核和模块:
android$ extract-bsp #复制linux kernel 的内核模块驱动等文件到android中,为打包做准备
编译:
android$ make -j2 #-j2是双线程 ,-4是四线程 -j8是八线程
等待 ...........时间要2个小时以上,取决于 CPU 内存 硬件
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
out/target/product/sugar-cubietruck/obj/PACKAGING/systemimage_intermediates/unsparse_system.img: 1498/32768 files (0.0% non-contiguous), 100185/131072 blocks
Install system fs image: out/target/product/sugar-cubietruck/system.img
out/target/product/sugar-cubietruck/system.img+out/target/product/sugar-cubietruck/obj/PACKAGING/recovery_patch_intermediates/recovery_from_boot.p maxsize=548110464 blocksize=4224 total=404329300 reserve=5537664
[1]+ Exit 2 make
编译完成:
root@zhz:/home/work/CubieBoard2_SDK/android#
编译完成后打包:
android$ pack 打包img
完成后出现信息如下
CopyRootToFS(/home/work/CubieBoard2_SDK/lichee/tools/pack/out/boot-resource)
c:\bat
c:\magic.bin
find magic !!
RealLen=0x4B0C00
CPlugin Free lib
CPlugin Free lib
normal
dragon image.cfg sys_partition.fex [OK]
----------image is at----------
/home/work/CubieBoard2_SDK/lichee/tools/pack/sun7i_android_sugar-cubietruck.img
pack finish
最后就会在 lichee/tools/pack 中生成我们最终的固件。
6 、编译过程中出现的错误
1)Make 4.0 需要换成3.81或者3.82版本,参考网站
Android can only be built by versions 3.81 and 3.82
删除高版本的make 4.0.8,编译安装低版本make 3.82
问题来了 如何 替换低版本make?
先查看
$ make --version
GNU Make 4.0
下载downloaded 3.82 from http://ftp.gnu.org/gnu/make/
下载 make-3.82-154.1.1.x86_64.rpm
然后解压 进入文件夹并且安装
./configure
sudo make install
make --version
GNU Make 3.82
这样就得到了 符合需求的make版本
接下来继续编译 源码
(特别注意make版本换了之后需要重新设置编译源码几个步骤,也就是source build/envsetup.sh lunch 。。。 重新操作)
2) calling gperf failed: 32512 at ./makeprop.pl line 140
sh: gperf: not found
target Generated: libwebcore <= external/webkit/Source/JavaScriptCore/create_regex_tables
Generating CSSPropertyNames.h <= CSSPropertyNames.in
sh: gperf: not found
calling gperf failed: 32512 at ./makeprop.pl line 140.
make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/css/CSSPropertyNames.h] Error 25
make: *** Deleting file `out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/css/CSSPropertyNames.h'
解决方法:sudo apt-get install gperf
{上面错误不是我编译出来的,我是拷贝参考文章,因为当时候编译美柚记录保存,不过解决方法可以,这点重要}
参考 http://www.oschina.net/question/565065_86092
7、解决以上问题之后 make 一路编译
最后出现
RealLen=0x4B0C00
CPlugin Free lib
CPlugin Free lib
normal
dragon image.cfg sys_partition.fex [OK]
----------image is at----------
/work/lichee/tools/pack/sun7i_android_sugar-cubietruck.img
pack finish
8、编译内核时出现:
解决:$sudo cp CubieBoard2_SDK/lichee/u-boot/tools/mkimage /usr/bin
9、pack完后,把CubieBoard2_SDK/lichee/tools/pack/sun7i_android_sugar-cubieboard2.img。
用LIveSuit 烧录到CT3中
10、编译好的镜像默认是HDMI显示,改成LCD
sys_config.fex 配置文件:树莓派3的Android系统一些相关功能的配置文件,通过对此文件的修改,可配置模块驱动功能的使能、关闭,以及其他参数的设置,可根据自己的硬件模块的实际情况进行配置和修改,即可实现相应的驱动功能。
sys_config.fex路径:CubieBoard2_SDK/lichee/tools/pack/chips/sun7i/configs/android/sugar-cubieboard2
参数说明:
screen0_output_type=xx 屏0 输出类型(0:none; 1:lcd; 2:tv; 3:hdmi; 4:vga)
screen0_output_mode =xx 屏0 输出模式
(used for tv/hdmi output, 0:480i 1:576i 2:480p 3:576p 4:720p50 5:720p606:1080i507:1080i608:1080p2411:1080p5010:1080p6011:pal 14:ntsc)
显示驱动配置的默认参数设置如下 :
screen0_output_type = 3
screen0_output_mode =5
即为将显示设置为了 HDMI类型输出,并以 750p60hz 的格式输出
改为:
screen0_output_type = 1
screen0_output_mode =2
重新打包:
进入Android 目录下,执行以下步骤即可生成新的镜像文件:
#source build/envsetup.sh 设置编译环境变量
#lunch 选15
#extract_bsp 复制linux kernel 的内核模块驱动等文件到android中,为打包做准备
#pack 打包img
本文档介绍了在Ubuntu 12.04 64位系统上编译Cubietruck的Android镜像的详细步骤,包括源码下载、编译环境搭建、内核编译、Android编译以及解决常见错误的方法。通过编译,用户可自定义系统设置,如将显示驱动从HDMI更改为LCD。

被折叠的 条评论
为什么被折叠?



