移植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的编译。
相关文章推荐
- 移植google操作系统android的5个步骤之(一)
- 【转】Android移植到Asus P535步骤说明
- FFmpeg在Android上的移植优化步骤
- FFmpeg在Android上的移植优化步骤
- android微信支付移植的步骤
- Android 6410 移植步骤说明
- 【实践驱动开发3-006】TI WL1835MODCOM8 在android的移植 - SDIO wifi驱动的注册步骤
- FFmpeg在Android上的移植优化步骤 .
- FFmpeg在Android上的移植优化步骤
- 基于MT6752/32平台 Android L版本驱动移植步骤 根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Medi
- Android系统移植之arm移植步骤
- 【实践驱动开发2-001】wifi 在android 下的实现 - AR6000 系列移植详细步骤
- [置顶] Android系统移植与调试之------->Amlogic方案编译步骤
- Android移植到Asus P535步骤说明
- FFmpeg在Android上的移植优化步骤
- Android 到ARM versatile PB板移植主要步骤
- 移植ANDROID系统到MINI2440的步骤
- FFmpeg在Android上的移植优化步骤
- Android系统移植与调试之------->Amlogic方案编译步骤
- react-native移植到android项目中详细步骤