linux android源码,Android源代码Linux Kernel下载及编译

下载Android上层系统源代码

建立Android源码目录

$mkdir WORKING_DIRECTORY

$cd WORKING_DIRECTORY

初始化repo

repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

-u为源码的git服务器地址,-b为源码的某个分支,没有-b就checkout出master分支。

如果不清楚源码服务器上的分支,可以列出远程服务器上的分支。

git ls-remote --tags https://android.googlesource.com/platform/manifest

目录refs包含tags和heads两个子目录,其中存放了不同分支的头的索引,可以通过索引查看有哪些branch。

下载源代码

repo sync

下载指定模块源代码

查看有哪些模块可以下载

repo manifest -o -

上述命令等于读取的是本地源码目录中的.repo/manifest/default.xml文件,可以直接打开看这个文件。

下载模块源代码

repo sync platform/system/core

SDK编译

编译Android源码和内核时不会自动编译SDK,可以下载官方提供的SDK,也可以自己手动编译SDK。

开发应用程序的时候,常常通过SDK所带的模拟器来调试APK应用程序,比在真机上高效和便捷,模拟器可以配置出各种参数,可以验证应用程序的“适配”能力。

Linux和MacOS:

1. 下载源代码,和其他下载代码一样。

2. 选择SDK对应的产品。

$lunch sdk-eng

注意:如果通过lunch没有找到SDK相关的产品,直接就输入上述命令。

3. 运行命令编译SDK。

$make sdk

Windos:

- 运行于Windows环境下的SDK编译需要基于前面Linux的编译结果(只能在Linux环境下生成的结果,而不支持MacOS)。

- 执行Linux下编译生成SDK的所有步骤,生成Linux版本的SDK。

$ sudo apt-get install mingw32 tofrodos

- 再次执行编译命令。

$source ./build/envsetup.sh

$lunch sdk-eng

$make win_sdk

可以利用多核心CPU加速编译,如:

$make -j4 sdk

面向Host 和Target编译结果都在源码目录的out下。

- target: 通过make命令生成的都在这个目录下。

- host: SDK生成的文件存放在这里。

编译单独模块

模块编译会清除SDK生成的目录,所以可以先编译模块,然后再编译SDK。

执行如下命令,

$. build/envsetup.sh

会多出一些其他命令,可以打开build/envsetup.sh看到这些命令的函数实现。

Invoke “. build/envsetup.sh” from your shell to add the following functions to your environment:

- lunch: lunch -

- tapas: tapas [ …] [arm|x86|mips|armv5|arm64|x86_64|mips64] [eng|userdebug|user]

- croot: Changes directory to the top of the tree.

- m: Makes from the top of the tree.

- mm: Builds all of the modules in the current directory, but not their dependencies.

- mmm: Builds all of the modules in the supplied directories, but not their dependencies.

To limit the modules being built use the syntax: mmm dir/:target1,target2.

- mma: Builds all of the modules in the current directory, and their dependencies.

- mmma: Builds all of the modules in the supplied directories, and their dependencies.

- cgrep: Greps on all local C/C++ files.

- ggrep: Greps on all local Gradle files.

- jgrep: Greps on all local Java files.

- resgrep: Greps on all local res/*.xml files.

- sgrep: Greps on all local source files.

- godir: Go to the directory containing a file.

make: 不带任何参数,应用于编译整个系统,时间较长,除非必要编译整个系统。

make MediaProvider: 这种对应于单个模块编译,会把该模块依赖的其他模块也一起编译。例如make libmedia,就会把libmedia依赖的哭全部编译好。这样速度也会慢,它需要搜索整个源码来定位MediaProvider模块所用的Android.mk文件,还要判断该模块所依赖的模块是否有修改。

如果只知道目标模块的名称,应用make 模块名称方式来编译模块。

例如,make libmedia。

如果是初次编译也可以采取这种方法。

mmm packages/providers/MediaProvider:该命令编译指定目录下的目标模块,而不编译它所依赖的模块。所以,如果初次编译,采用这种方式编译一个模块会出错,因为这个模块依赖的模块还没有被编译。

mm: 这种命令方式先用cd进入目录,如cd到packages/providers/MediaProvider目录,然后执行mm命令。该命令编译当前目录下的模块。和mmm一样,只编译目标模块,所以这两个命令很快。

参数-B: 一般的编译方式都使用增量编译,即只编译发生变化的目标文件。如果需要重新编译所有目标文件,可以使用-B参数。例如,make -B 模块名称,mmm -B, mm -B。

======================================

下载Android Linux Kernel

根据image确定内核的版本

$ dd if=kernel bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' kernel | cut -d ':' -f 1) | zgrep -a 'Linux version'

例如,对于nexus5的系统来说:

$ dd if=zImage-dtb bs=1 skip=$(LC_ALL=C od -Ad -x -w2 zImage-dtb | grep 8b1f | cut -d ' ' -f1 | head -1) | zgrep -a 'Linux version'

下载Kernel源代码

mkdir ~/kernel

cd kernel

针对不同的处理器有不同的内核版本;

$ git clone https://android.googlesource.com/kernel/common.git

$ git clone https://android.googlesource.com/kernel/x86_64.git

$ git clone https://android.googlesource.com/kernel/exynos.git

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

$ git clone https://android.googlesource.com/kernel/msm.git

$ git clone https://android.googlesource.com/kernel/omap.git

$ git clone https://android.googlesource.com/kernel/samsung.git

$ git clone https://android.googlesource.com/kernel/tegra.git

例如下载通用版本:

$ git clone https://android.googlesource.com/kernel/common.git

下载选择分支的代码:

cd common// 进入common版本内核

git branch -a// 查看有哪些分支

git checkout remote/origin/Android-3.0// 选择keernel3.0分支// 或者是可以根据上面的依据image得到的版本

git checkout

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值