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

        移植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的编译。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值