Android2.3.1系统源码编译

    1. 环境准备:

        编译安卓源码只能在Linux上面,建议使用64位电脑进行编译,这里使用Ubuntu14.04系统来进行编译

       

        Java环境,需要使用Oracle的JDK, Android5.0以后才可以使用OpenJDK来进行编译,推荐去Oracle官网下载压缩包自己配置环境变量来安装:(后面编译发现编译2.3.1版本Android系统源码需要jdk1.6)

       

        编译依赖包准备: ( sudo apt-get install -y flex bison gperf libesd0-dev build-essential zip curl valgrind git-core gnupg)

               

    2. 源码下载:

        Google使用repo来封装git对android源码进行管理,方便开发,这里先获取repo执行脚本并放到/bin目录以便执行:

        sudo apt-get install phablet-tools

       

        repo放到/bin目录后,新建一个文件夹,然后可以下载代码了:

        (repo init -u https://android.googlesource.com/platform/manifest -> 这是下载最新的代码,现在估计是android7.x了吧,正如研究linux的都喜欢先看linux0.11源码,这里也不求新,先看透2.3.1的源码,所以,这里需要指定下载的源码分支)

     

        然后就是漫长的等待过程了……………………

       

        中途如果网络断开,重新执行"repo sync"即可。Tips: 下载源码需要科学上网,哈哈~

        大约花了3小时,下载完成后如下:

       

        根目录就一个Makefile,看看那里面有啥:

       

        它只是包含了build/core/main.mk主入库编译,再看看它的内容:

        

        接近800行,现在先不看它,先编译再说,如果编译都通过不了,看懂了好像不懂,因为你后面都没法进行程序运行测试。

    3. 源码编译,在源码根目录直接执行make,将编译Android系统的全部模块

       

        报错,提示需要JDK1.6版本,那就安装呗,另外,对于权限禁止的,增加可执行权限即可:

       

        上面的执行生成jdk6的包:

        

         添加环境变量即可:

         

          //

         

        接着我们再make一次看看,出现如下错误:

       

        安装依赖库:

       

        再次make,出现如下错误:

       

        安装依赖库:

       

        再次make,报错:

       

        修改文件frameworks/base/tools/aapt/Android.mk,在28行加多一个参数"-fpermissive":

       

        再次make,提示类似错误,修改文件frameworks/base/libs/utils/Android.mk,在60行增加-fpermissive参数:

       

        再次编译出现如下错误:

       

        安装依赖包: sudo apt-get install zlib1g-dev && sudo apt-get install lib32z1-dev && sudo apt-get install libncurses5-dev:i386

        另外,为了编译顺利,建议降级gcc和g++到4.4版本:

      sudo apt-get install gcc-4.4 g++-4.4

      sudo rm -rf /usr/bin/gcc

      sudo rm -rf /usr/bin/g++

      sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc

      sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++

      再次make,出现如下错误:

     

      编辑提示的文件,增加如下的28行:

      

       再次make, 出现如下错误:

       

        zlib1g-dev有个头文件修改了路径,及zconf.h放到了/usr/include/x86_64-Linux-gnu/,所以将其拷贝到/usr/include/下即可:

        sudo cp /usr/include/x86_64-linux-gnu/zconf.h /usr/include/

         再次make:

        

         sudo apt-get install libswitch-perl

         再次make,等了半个多小时,终于编译成功:

        

     4. 生成SDK,可用于开发Android应用程序

           make sdk 

          

     5. 运行

           启动Android模拟器需要四个文件:

           1. Linux内核镜像文件--> zImage

           2. Android系统镜像文件--> system.img, userdata.img, ramdisk.img,上面已经编译生成,在目录out/target/product/generic下面

           export PATH=$PATH:~/Documents/source_code/android-2.3.1/out/host/linux-x86/bin (out/host/linux-x86/bin目录下是Android模拟器的位置,这里加入到环境变量中)

           export ANDROID_PRODUCT_OUT=~/Documents/source_code/android-2.3.1/out/target/product/generic

           启动模拟器:

           1.  不加任何参数表示已经配置好上面两行的环境变量: emulator

           2. 如果不配置环境变量,则要加参数指定镜像文件的位置

                emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system out/target/product/generic/system.img -data out/target/product/generic/userdata.img -ramdisk out/target/product/generic/ramdisk.img

           启动模拟器提示如下错误:

          

           安装依赖包:(来自StackOver Flow: https://stackoverflow.com/questions/4841908/sdl-init-failure-reason-is-no-available-video-device/22625691)

sudo apt-get install libsdl1.2debian:i386
           然后再次启动:

          

         可以看看其系统信息:

         

    6. 下载Linux内核源码

          上面使用repo下载同步的Android源码并不包含Linux内核源码,因此,如果需要定制Linux内核源码,就要下载下来自己进行修改编译,从上面也可以看到Android2.3.1使用的Linux内核位2.6.29。

          我们在Android系统源码根目录下进行如下操作:

          mkdir kernel && cd kernel

          git clone https://android.googlesource.com/kernel/goldfish.git

         

           下载完成后,我们需要checkout内核版本为2.6.29版本的分支:

            cd goldfish

            git branch -a

           git checkout remotes/origin/android-goldfish-2.6.29

          

    7. 编译Linux内核源码

          准备工作:

          修改Makefile文件,修改目标CPU架构(ARCH)为arm和交叉编译工具(CROSS_COMPILE),如下195和196行:

         

         Android源码提供的交叉编译工具位于prebuild/linux-x86/toolchain目录下。

         编译步骤:

         1. 配置交叉编译工具的环境变量: export PATH=$PATH:~/Documents/source_code/android-2.3.1/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin

         2. 生成指定CPU架构的硬件配置文件

             首先看看模拟器的CPU体系结构版本,为arm v5的,因此使用goldfish_defconfig文件,若为arm v7的,则使用goldfish_armv7_defconfig:

             

              make goldfish_defconfig

             

         3. 编译make生成Linux内核镜像文件zImage

        

    8. 基于定制编译的Linux内核源码启动Android模拟器

          emulator -kernel kernel/goldfish/arch/arm/boot/zImage -sysdir ./out/target/product/generic -system out/target/product/generic/system.img -data out/target/product/generic/userdata.img -ramdisk out/target/product/generic/ramdisk.img

          和前面命令相比,就是修改了内核文件的路径而已,这里使它基于刚刚编译的内核来启动:

         

    到这里,Android2.3.1源码的开发环境搭建和编译、模拟器启动都完成了,可以进入下一步学习了。


        后记:

        原本打算记录一下流程,结果因为是新配置的Ubuntu虚拟机,在编译源码那里遇到一堆问题,总算搞定了,不知不觉,时间到了00:11,赶紧睡觉,明天还要搬砖,啊哈~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值