在ubuntu12.04.1LTS上搭建freescale iMX6开发板sabresd_6dq编译环境

本文主要是介绍在ubuntu12.04.1LTS上搭建freescale iMX6开发板sabresd_6dq编译环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者: 大桥++ 2013年9月6日, 若需转载,请注明出处。

     并不像ubuntu10.04LTS 或 11.04那样符合google或freescale的编译环境好配置,在ubuntu12.04.1LTS 64位版本上需要多费些时间和精力。因此记下安装过程,便于以后参考。
     我们的目标是配置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 直接网络安装即可

2. lzo1x.h问题

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软件开发包导致的,ubuntu系统下可以使用命令sudo apt-get install uuid-dev在线安装,安装成功后,重新编译即可



找不知道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 g++-multilib
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编译环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/674901

相关文章

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

Java编译错误java.lang.NoSuchFieldError的解决方案详析

《Java编译错误java.lang.NoSuchFieldError的解决方案详析》java.lang.NoSuchFieldError是Java中的一种运行时错误,:本文主要介绍Java编译错... 目录前言解决方案1. 统一JDK版本环境2. 优化maven-compiler-plugin配置3. 清

MongoDB搭建过程及单机版部署方法

《MongoDB搭建过程及单机版部署方法》MongoDB是一个灵活、高性能的NoSQL数据库,特别适合快速开发和大规模分布式系统,本文给大家介绍MongoDB搭建过程及单机版部署方法,感兴趣的朋友跟随... 目录前言1️⃣ 核心特点1、文档存储2、无模式(Schema-less)3、高性能4、水平扩展(Sh

GO语言中gox交叉编译的实现

《GO语言中gox交叉编译的实现》本文主要介绍了GO语言中gox交叉编译的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、安装二、使用三、遇到的问题1、开启CGO2、修改环境变量最近在工作中使用GO语言进行编码开发,因

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1