Ubuntu14.04下载&编译Android(2)

    xiaoxiao2025-07-14  7

    1 前言

        通过《Ubuntu14.04下载&编译Android(1)》的方法下载的源码是包含有kernel目录的(也就是包含Linux内核),然而,通过其它方法下载的源码可能并不包含kernel目录(也就是不包含Linux内核)。参考资料[9]在最后明确指出:Android4.0源码默认下载是不包括内核源码的。本文针对这种情况,分析如何下载Android & Linux源码,并进行编译。

        本文默认读者已经安装好git,repo等工具。

    2 下载Android源码

        由于无法直接从Google官网下载,改在TI OMAPZOOM下载[11][7]:

    1)登陆http://git.omapzoom.org,然后打开platform/manifest.git:

    2)浏览tags,查看可用的Android源码版本(本文以4.4.4版本为例):

        更多tags如下所示:

    3)通过repo下载源码

    mkdir android-4.4.4 cd android-4.4.4 repo init -u git://git.omapzoom.org/platform/manifest -b android-4.4.4_r2.0.1 repo sync

    注:如果网络不稳定,可能会出现中断现象,根据参考资料[10]的说明,此时可以使用下面的脚本来实现自动下载:

    #!/bin/bash echo "======start repo sync======" repo sync while [ $? == 1 ]; do echo "======sync failed, re-sync again======" sleep 3 repo sync done echo "======sync sucessed !======"

        将上述内容保存到repo_sync.sh文件中(保存于android-4.4.4目录中),然后:

    chmod +x repo_sync.sh

        此时可以通过执行上述脚本来启动下载:

    ./repo_sync.sh

    3 下载Linux内核

        通过上述方法仅仅是下载了Android源码部分,其中并没有包含Linux内核源码,下面进一步说明下载Linux内核源码的步骤:

    1)登陆http://git.omapzoom.org:

    2)在上图搜索框中输入关键字“kernel”,然后点击“Search”按钮,结果如下:

        由上图可见,具有common,exynos,goldfish,msm,omap,samsung以tegra六个平台的内核,本文以goldfish为例。

    3)双击上图的kernel/goldfish.git,进入如下页面:

        上图红色框内列出了goldfish.git的URL,可以通过该URL下载goldfish版本的Linux内核。

    4)克隆内核

    mkdir kernel cd kernel git clone git://git.omapzoom.org/kernel/goldfish.git

    5)查询远程分支

    cd goldfish git branch -a

        结果如下图所示:

    6)checkout分支

    git checkout remotes/origin/android-goldfish-3.4

        注意:不能下载android-3.18,android-goldfish-3.10和android-goldfish-4.4dev这三个版本,因为其中缺乏goldfish_defconfig或goldfish_armv7_defconfig配置文件;android-goldfish-2.6.29,android-goldfish-3.18-dev这两个版本虽然含有goldfish_defconfig和goldfish_armv7_defconfig,但是编译后无法正常启动,前者是黑屏,后者则是崩溃!

    4 编译Android源码

    1)配置 & 编译

    cd android-4.4.4 source build/envsetup.sh lunch 1 make -j4

    注意:与《Ubuntu14.04下载&编译Android(1)》不同的是,上述编译过程并没有编译Linux内核,Linux内核需要另外编译,详见下文。

    2)编译结果

        编译完成后,将会在Android源码目录中创建一个out子目录,并且在其中保存编译结果:

        其中target/product/generic子目录保存了目标板镜像文件,而host/linux-x86子目录保存了在PC端运行的工具,例如adb,fastboot和emulator:

        这里我们通过emulator工具来模拟启动刚才所编译的Android镜像。

        在命令行中断的任意路径下执行:

    emulator

        此时将会启动一个模拟器:

        特别说明:

        通过执行第2第3步,将会将emulator所在的路径添加到了环境变量PATH中,因此可以在任意路径中直接执行emulator即可。如果关闭了终端,上述环境变量会失效,

    因此在新的终端中执行emulator之前,必须先执行:

    cd android-4.4.4 source build/envsetup.sh lunch 1

        上述的lunch 1是必不可少的哦!

        然后再执行:

    emulator

    5 编译Linux内核

    1)进入上述goldfish目录

    cd goldfish

    2)配置内核

    make ARCH=arm goldfish_armv7_defconfig .config

    make ARCH=arm goldfish_armv7_defconfig

    cp arch/arm/configs/goldfish_armv7_defconfig .config make ARCH=arm menuconfig

        如果选择最下面的方法,退出配置菜单,选择保存即可。、

        注意:

        除了goldfish_armv7_defconfig(适用于Androd4.0以后版本),还有一个配置文件goldfish_defconfig(适用于Android2.3之前版本),这里不能选错,否则无法正常启动。

    3)编译内核

    make -j3 ARCH=arm CROSS_COMPILE=${CROSS_COMPILE_DIR}/arm-eabi-

        参数说明:

        -j3, 表示开启3个线程进行编译以加快速度;

        CROSS_COMPILE,指定交叉编译工具前缀;

        CROSS_COMPILER_DIR,它是一个环境变量,其值应该设置为交叉编译工具所在的路径(通常在上述下载所下载的Android源码的prebuilts目录中,例如prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin)。

    4)编译结果

    6 开启/关闭编译内核

        在编译Android系统的时候,可以同时编译Linux内核,也可以不编译!可以通过设置Android源码device目录中相应平台的Board_config.mk中的TARGET_NO_KERNEL变量的人值来达到目的[1]:

        当TARGET_NO_KERNEL的值为false时,表示 在编译Android源码的同时编译Linux内核;TARGET_NO_KERNEL的值为true时,表示 在仅仅编译Android源码,不编译Linux内核(内核需要另外独立编译)。

    参考资料

    [1]Android下载目录结构中无kernel目录

    [2]谁知道Android内核源码中goldfish部分代码到哪里去了?

    [3]最近下载android4.3的源代码,可是找不到kernel那部分代码在什么目录下?

    [4]ubuntu12.04(64bit)编译android4.4源码、sdk及kernel

    [5]Android编译自己的kernel

    [6]Android --- windows下搭建Linux环境下载编译Android源代码

    [7]国内被墙后如何获取android源代码

    [8]如何下载并编译Android4.0内核源码goldfish(图文)

    [9]如何在Ubuntu11.10(32位)下编译Android4.0源码(图文)

    [10]repo sync 时的自动续接脚本[转]

    [11]OmapZoom_WIKIPEDIA

    转载请注明原文地址: https://ju.6miu.com/read-1300700.html
    最新回复(0)