您的位置:首页 > 移动开发 > Android开发

移植google操作系统android的5个步骤之(一)

2012-06-05 17:29 323 查看




移植google操作系统android的5个步骤之(一)

移植Android到具体硬件--方法及过程详解(1)

国内外很多同行朋友在努力porting Android到具体的硬件平台上。既然有那么多的朋友对此感兴趣,在接下来的几个贴子里,我一步步地讲解自己的移植过程。只可惜我们的板子没有GSM通信模块,不过其他已全部移植成功。

今天先做第一事件--也是所有移植工作的最初几件事之一,就是build一个支持Android的编译器。这就要求build一个至少能支持ARM926EJ-S CPU指令集及EABI规范的GNU Toolchain。也许有好心的朋友会提醒我:网上可以下载已编译好的toolchain。是的,不过,我还是建议你自己手工做一遍!在本人过去几年的开发生涯中,很多时候得益于对编译器的理解。而你自己一步步地手工build整个编译器的经历,有助于你对编译器的理解和掌握,进而在OS Kernel或其他底层开发中给你带来帮助!

闲话少叙,手工编译GNU Toolchain的步骤如下。我已把详细过程写成一个简单脚本,可从本人blog(http://AndroidSprite.spaces.live.com)下载,所有的步骤已经多人/次测试,直接运行即可生成完整toolchain。

1. 下载组件包 (版本不必与如下所列完全一致,但gcc应取4.0以上):

Android Linux Kernel, binutils-2.18 gcc-4.2.3 uClibc-0.9.29

2. 安装Android kernel及uClibc头文件 (其中KERN_PATH指向Android Kernel所在路径,TOOLCHAIN_SYSROOT为toolchain安装路径)

make -C ${KERN_PATH} \

ARCH=arm \

INSTALL_HDR_PATH=${TOOLCHAIN_SYSROOT}/usr \

headers_install

#先配置uClibc,然后:

make \

PREFIX=${TOOLCHAIN_SYSROOT} \

DEVEL_PREFIX=/usr/ \

RUNTIME_PREFIX=/ \

KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include \

CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- \

HOSTCC=${HOSTCC_PATH} \

pregen

make \

PREFIX=${TOOLCHAIN_SYSROOT} \

DEVEL_PREFIX=/usr/ \

RUNTIME_PREFIX=/ \

KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include \

CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- \

HOSTCC=${HOSTCC_PATH} \

install_headers

3. 编译binutils(里面包括大家所熟知的gnu as, gnu ld, objdump, etc),TARGET_PLATFORM设为"arm-android-linux-uclibcgnueabi"!

cd ${BUILD_PATH}/build_binutils

${BINUTILS_PATH}/configure \

--prefix=/usr \

--build=${BUILD_PLATFORM} \

--host=${BUILD_PLATFORM} \

--target=${TARGET_PLATFORM} \

--with-sysroot=${TOOLCHAIN_SYSROOT}/ \

--with-float=soft \

--disable-multilib \

--disable-werror

make && make DESTDIR=${TOOLCHAIN_SYSROOT}

4. 第一趟gcc编译,指定TARGET_CPU为"arm926ej-s"

cd ${BUILD_PATH}/gcc_pass_1

${GCC_PATH}/configure \

--prefix=${TOOLCHAIN_SYSROOT}/usr \

--build=${BUILD_PLATFORM} \

--host=${BUILD_PLATFORM} \

--target=${TARGET_PLATFORM} \

--enable-languages=c \

--with-sysroot=${TOOLCHAIN_SYSROOT} \

--disable-__cxa_atexit \

--enable-target-optspace \

--with-gnu-ld \

--disable-shared \

--enable-threads \

--enable-tls \

--enable-long-long \

--disable-multilib \

--with-float=soft \

--with-cpu=${TARGET_CPU} \

--with-tune=${TARGET_CPU}

make all-gcc && make install-gcc

5. 编译uClibc

cd ${UCLIBC_PATH}

make \

PREFIX=/ \

DEVEL_PREFIX=/ \

RUNTIME_PREFIX=/ \

KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include \

CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- \

all

make \

PREFIX=${TOOLCHAIN_SYSROOT} \

DEVEL_PREFIX=/usr/ \

RUNTIME_PREFIX=/ \

KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include \

CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- \

install_runtime install_dev

6. 第二趟编译gcc

cd ${BUILD_PATH}/gcc_pass_2

${GCC_PATH}/configure \

--prefix=/usr \

--build=${BUILD_PLATFORM} \

--host=${BUILD_PLATFORM} \

--target=${TARGET_PLATFORM} \

--enable-languages=c,c++ \

--with-sysroot=${TOOLCHAIN_SYSROOT} \

--with-build-time-tools=${TOOLCHAIN_SYSROOT}/usr/${TARGET_PLATFORM}/bin \

--disable-__cxa_atexit \

--enable-target-optspace \

--with-gnu-ld \

--enable-shared \

--enable-threads \

--with-tls \

--disable-multilib \

--enable-long-long \

--with-float=soft \

--with-cpu=${TARGET_CPU} \

--with-tune=${TARGET_CPU}

make all

make DESTDIR=${TOOLCHAIN_SYSROOT} install

Done!整个过程在本人的AthlonXP 4000+ X2/Core2 Duo T5500 + 1G DDR667上需要约20分钟时间。

熟悉LFS的朋友应该不难搞定,只是embedded system一般不需要Native Toolchain,故少了第三趟gcc的编译。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: