本文主要是介绍在ubuntu12.04.1LTS上搭建freescale iMX6开发板sabresd_6dq编译环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作者: 大桥++ 2013年9月6日, 若需转载,请注明出处。我们的目标是配置freescale开发板sabresd_6dq的android 4.2.2r1的编译环境。
硬件:DELL R720服务器 , Intel(R) Xeon(R) CPU E5-2690 * 2颗, 内存32GB, 2T硬盘
ubuntu与R720服务器可能有兼容性问题,需要在电源管理中把BIOS 的 power management设置为maximum performance, 同时禁用C-State。
一、安装ubuntu12.04 LTS版本
下载光盘ISO,安装
二、安装JAVA环境
从oracle官方下载 jdk-6u39-linux-x64.bin, 注意一定是java6比如6u39, 64位版本
#cp jdk-6u39-linux-x64.bin /opt/
#cd /opt/
#chmod +x jdk-6u39-linux-x64.bin
#tar zxvf jdk-6u39-linux-x64.bin
安装后生成/opt/jdk1.6.0_39目录
配置环境变量
cat setjavaenv.sh
#set java environment 设置JAVA的环境变量
export JAVA_HOME=/opt/jdk1.6.0_39
export JRE_HOME=/opt/jdk1.6.0_39/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
三、安装GCC4.4.7 (旧版本)
如果编译时提示 make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1 ,可能是gcc版本太高。
在ubuntu12.04下编译android时,若出现如此错误,那是因为gcc版本太高。需要装旧的4.4版本
通过gcc -v命令可以查看当前gcc版本,若是4.6,需要重装4.4。
安装gcc 4.4的最好方法是仅用以下两条命令,不需要其它命令,否则编译时可能会出错。
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
装完后在/usr/bin目录下$ ls -l gcc*
lrwxrwxrwx 1 root root 7 2011-10-29 09:11 gcc -> gcc-4.6
-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4
-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6
发现gcc 链接到gcc-4.6, 需要将它改为链接到gcc-4.4 :sudo mv gcc gcc.bak
sudo ln -s gcc-4.4 gcc
同理ls -l g++*
lrwxrwxrwx 1 root root 7 2011-08-14 15:17 g++ -> g++-4.6
-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4
-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6
需要将g++链接改为g++-4.4:
/usr/bin$ sudo mv g++ g++.bak
/usr/bin$sudo ln -s g++-4.4 g++
再查看gcc和g++版本号:gcc -v和g++ -v均显示gcc version 4.4.7,说明gcc 4.4安装成功。
四、 安装各种包
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 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386(与官方的命令相比,我删除了openjdk的安装包)
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so(可不装)
五、编译过程
此部分参照freescale官方提供的手册android_jb4.2.2_1.0.0-ga_doc 目录下的 《Androi_User_Guilde.pdf》
下面有几个要点要注意的
1) 官方源码 google 4.4.2 r1
先把google官方源代码下载下来,一定要选 4.2.2 r1分支。过程比较长,大约要几个小时到几天不等,视网络情况。
2) 内核 kernel
把freescale的kernel_imx使用git clone下来, 一定最后要git checkout jb4.2.2_1.0.0-ga, 然后拷贝到android源码相对根目录下。不要改文件夹名。
3) 引导 uboot
把freescale的uboot_imx使用git clone下来,一定最后要git checkout jb4.2.2_1.0.0-ga, 然后拷贝到bootable/bootloader/下。
4) patch(补丁)
安装freescale补丁source /opt/android_jb4.2.2_1.0.0-ga_source/code/jb4.2.2_1.0.0-ga/and_patch.sh
时间比较长,大约要20分钟
5) 设置环境变量
a. 设置编译缓存,这样可以加快编译速度
export USE_CCACHE=1
export CCACHE_DIR=~/ccache/.ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G
b. 设置java环境变量
#set java environment 设置JAVA的环境变量
export JAVA_HOME=/opt/jdk1.6.0_39
export JRE_HOME=/opt/jdk1.6.0_39/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
c. 设置android编译时环境变量 source build/envsetup.sh
为了方便,把以上写成脚本
setmyenv.sh 一次执行
6) 编译过程
a. lunch 选一下编译目标,这里选12. sabresd_6dq-user
b. make编译。可以make -j32, 32表示32线程,如果你用台式机intel的双核, 最好用make -j4。
make 理论上可以直接把uboot, kenel, andorid 全部自动化编译,但是经过实践发现,编译出的uboot.bin是有问题的,不能正常启动。推测可能是freescale配置的问题。解决方案是:先make全编,再进uboot_imx单独编译uboot,产生出的bin就是正确的了。编译uboot的过程详见《Androi_User_Guilde.pdf》的3.4章节。
五、编译android源码时可能遇到的问题
1. 提示缺少mkimage
有2个办法:
1) 单独编译uboot,可以生成mkimage,然后指定mkimage所在的路径,便于编译时寻找
2) apt-get install uboot-mkimage 直接网络安装即可
lzo/lzo1x.h: No such file or directory
try:sudo apt-get install liblzo2-dev
3. UUID问题
fatal error: uuid/uuid.h: No such file or directory
找不知道UUID 那个问题,你可以装一个 32位的uuid apt-get install uuid:i386, 然后再做个软连接: sudo ln -sf /lib/i386-linux-gnu/libuuid.so.1 /usr/lib/libuuid.so 就可以过了
4. multilib 问题
g++: g++: selected multilib '32' not installed
try:
sudo apt-get install libc6-dev ia32-libs lib32ncurses5-dev x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev mingw32 tofrodos python-markdown libxml2-utils
sudo apt-get install g++-4.4-multilib (一开始着一条忘了试验了,很重要)
5. 仍报multilib及mkfs.ubifs失败
如果仍然出现这个提示
make: *** [out/host/linux-x86/obj/EXECUTABLES/mkfs.ubifs_intermediates/mkfs.ubifs] Error 1
可以参考以下步骤尝试:
1) apt-get install liblzo2-2 --- 无效
2) apt-get install liblzo2-dev:i386 --无效
3)apt-get install liblzo-dev:i386 -- 无效
4)apt-get install liblzo2-2:i386
5)参考 (http://www.tuicool.com/articles/V3IV73)
sudo ln -s /usr/lib/i386-linux-gnu/liblzo2.so.2 /usr/lib/liblzo2.so
set LD_LIBRAY_PATH=/usr/lib/
无效
6)sudo apt-get remove liblzo2-dev liblzo2-2 -- 无效
7) sudo apt-get install g++-4.4-multilib
成功!
编译好后会在out/target/product/sabresd_6dq 下生成我们需要的 boot.img, system.img userdata.img等。但uboot.bin由于freescale配置的bug, 并不是我们想要的,需要单独进uboot_imx目录进行手动编译。
1. root密码要有一定的复杂度,以防在公网IP上被攻击
2. 确认安装sshd 为每个人创建user,登录主机编辑,编译
这篇关于在ubuntu12.04.1LTS上搭建freescale iMX6开发板sabresd_6dq编译环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!