移植Android到具体硬件编译器的制作
来源:互联网 发布:淘宝店激活页面在哪 编辑:程序博客网 时间:2024/06/05 12:43
国内外很多同行朋友在努力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 5PA*U_Xmr
#先配置uClibc,然后: z Qna;
make /
PREFIX=${TOOLCHAIN_SYSROOT} / 8 /
DEVEL_PREFIX=/usr/
RUNTIME_PREFIX=/
KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include /
CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- / }
HOSTCC=${HOSTCC_PATH} / )fa<(->vp(
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 QfpO*
${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 Eg
make && make DESTDIR=${TOOLCHAIN_SYSROOT} {Y0]TZ=ZQ*
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} / 0/B /
--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} y Z
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}- / T}
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 W
make DESTDIR=${TOOLCHAIN_SYSROOT} install yE /
Done!整个过程在本人的AthlonXP 4000 X2/Core2 Duo T5500 1G DDR667上需要约20分钟时间。
熟悉LFS的朋友应该不难搞定,只是embedded system一般不需要Native Toolchain,故少了第三趟gcc的编译。
- 移植Android到具体硬件编译器的制作
- 移植Android到具体硬件--方法及过程详解
- symantecc++编译器的作者将d语言移植到mac
- Linux内核版本和系统启动过程以及具体内核移植和根文件系统的制作
- Android移植之硬件篇
- 交叉编译器的制作
- 交叉编译器的制作
- 交叉编译器的制作
- 交叉编译器的制作
- 不同硬件平台上移植Android的Camera系统
- 不同硬件平台上移植Android的Camera系统
- 将Flash制作的AIR应用移植到iOS设备
- 最具体的u-boot移植到QT2410E开发板的过程1
- 最具体的u-boot移植到QT2410E开发板的过程2
- gcc编译器的具体处理过程
- 硬件构件的具体设计方法
- 把ffmpeg移植到android的总结
- 移植ANDROID系统到MINI2440的步骤
- 哈佛成功金句
- 看相册有感
- 求质数
- 设计模式-观察者模式实现例子(ruby)
- SQl Server05、08在64 位和32 位环境中SQL Server 磁盘存储格式均相同
- 移植Android到具体硬件编译器的制作
- 第一篇博客文章
- 安定人哦诶的mktoolchain制作
- 在WIN7上安装SQL2005时需配置IIS7
- Linux 内核中的 GCC 特性
- 什么是佛教?
- Android线程模型
- Webi Report Hidden Columns
- SQLite 简介