下载Google内核源码的三个方法

下载方案1

参考http://www.cnblogs.com/hixin/p/6892206.html

我也是参考这个方案进行下载的,发现清华的这个库维护的还是比较快的,Pixel已经能够下载到.

如何使用该镜像库可以参考:

https://mirror.tuna.tsinghua.edu.cn/help/AOSP/


下载方案2及编译方法

官方直接下载,以下内容参考自:https://source.android.com/source/building-kernels?hl=zh-cn


++++++参考文献++++++


编译内核

本页详细介绍了如何仅编译内核。以下说明假设您尚未下载整个 AOSP;如果您已完成下载,则可以跳过 git clone 对应的步骤,但下载内核源代码的步骤除外。

本部分中的所有示例均使用 hikey 内核。

选择内核

此表列出了内核源代码和二进制文件的名称及所在位置:


设备 二进制文件所在的位置 源代码所在的位置 编译配置
marlindevice/google/marlin-kernelkernel/msmmarlin_defconfig
sailfishdevice/google/marlin-kernelkernel/msmmarlin_defconfig
hikeydevice/linaro/hikey-kernelkernel/hikey-linarohikey_defconfig
anglerdevice/huawei/angler-kernelkernel/msmangler_defconfig
bullheaddevice/lge/bullhead-kernelkernel/msmbullhead_defconfig
shamudevice/moto/shamu-kernelkernel/msmshamu_defconfig
fugudevice/asus/fugu-kernelkernel/x86_64fugu_defconfig
volantisdevice/htc/flounder-kernelkernel/tegraflounder_defconfig
hammerheaddevice/lge/hammerhead-kernelkernel/msmhammerhead_defconfig
flodevice/asus/flo-kernel/kernelkernel/msmflo_defconfig
debdevice/asus/flo-kernel/kernelkernel/msmflo_defconfig
mantadevice/samsung/manta/kernelkernel/exynosmanta_defconfig
makodevice/lge/mako-kernel/kernelkernel/msmmako_defconfig
grouperdevice/asus/grouper/kernelkernel/tegrategra3_android_defconfig
tilapiadevice/asus/grouper/kernelkernel/tegrategra3_android_defconfig
magurodevice/samsung/tuna/kernelkernel/omaptuna_defconfig
torodevice/samsung/tuna/kernelkernel/omaptuna_defconfig
pandadevice/ti/panda/kernelkernel/omappanda_defconfig
stingraydevice/moto/wingray/kernelkernel/tegrastingray_defconfig
wingraydevice/moto/wingray/kernelkernel/tegrastingray_defconfig
crespodevice/samsung/crespo/kernelkernel/samsungherring_defconfig
crespo4gdevice/samsung/crespo/kernelkernel/samsungherring_defconfig

确定要使用的设备项目之后,请查看内核二进制文件的 Git 日志。设备项目采用 device/<vendor>/<name> 形式。

 
 
$ git clone https://android.googlesource.com/kernel/hikey-linaro $ cd hikey-linaro $ git log --max-count=1 kernel

内核二进制文件的提交消息中包含用于编译二进制文件的内核源代码的部分 Git 日志。该日志中的第一个条目是最新内容(也即用于编译内核的条目)。请记下提交消息,因为您在后续步骤中会用得到该消息。

确定内核版本

要确定系统映像中使用的内核版本,请对内核文件运行以下命令:

 
 
$ 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'

对于 Nexus 5 (hammerhead),请运行以下命令:

 
 
$ 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'

下载源代码

使用适当的 git clone 命令为您要编译的内核下载源代码:

 
 
$ git clone https://android.googlesource.com/kernel/common.git $ git clone https://android.googlesource.com/kernel/hikey-linaro $ 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
  • goldfish 项目包含适用于所模拟的平台的内核源代码。
  • msm 项目包含适用于 ADP1、ADP2、Nexus One、Nexus 4、Nexus 5、Nexus 6、Nexus 5X、Nexus 6P、Nexus 7 (2013)、Pixel 和 Pixel XL 的源代码,可用作使用 Qualcomm MSM 芯片组的起点。
  • omap 项目用于 PandaBoard 和 Galaxy Nexus,可用作使用 TI OMAP 芯片组的起点。
  • samsung 项目用于 Nexus S,可用作使用 Samsung Hummingbird 芯片组的起点。
  • tegra 项目用于 Xoom、Nexus 7 (2012)、Nexus 9,可用作使用 NVIDIA Tegra 芯片组的起点。
  • exynos 项目包含适用于 Nexus 10 的内核源代码,可用作使用 Samsung Exynos 芯片组的起点。
  • x86_64 项目包含适用于 Nexus Player 的内核源代码,可用作使用 Intel x86_64 芯片组的起点。
  • hikey-linaro 项目用于 HiKey 参考板,可用作使用 HiSilicon 620 芯片组的起点。

下载预编译 gcc

确保预编译工具链位于您的以下路径中:

 
 
$ export PATH=$(pwd)/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH

 
 
$ export PATH=$(pwd)/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6/bin:$PATH

在 Linux 主机上,如果您没有 Android 源代码树,则可以从以下路径下载预编译工具链:

 
 
$ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6

编译内核

当您了解了内核的最后一条提交消息并已成功下载内核源代码和预编译的 gcc 后,就可以编译内核了。以下编译命令使用了 hikey 内核:

 
 
$ export ARCH=arm64 $ export CROSS_COMPILE=aarch64-linux-android- $ cd hikey-linaro $ git checkout -b android-hikey-linaro-4.1 origin/android-hikey-linaro-4.1 $ make hikey_defconfig $ make

要编译不同的内核,只需将 hikey-linaro 替换为您要编译的内核的名称即可。

映像会输出到 arch/arm64/boot/Image 目录;内核二进制文件会输出到 arch/arm64/boot/dts/hisilicon/hi6220-hikey.dtb 文件。请将 Image 目录和 hi6220-hikey.dtb 文件复制到 hikey-kernel 目录。

或者,您可以在使用 make bootimage(或编译启动映像的任何其他 make 命令行)时添加 TARGET_PREBUILT_KERNEL变量。所有设备均支持该变量,因为它是通过 device/common/populate-new-device.sh 进行设置的。例如:

 
 
$ export TARGET_PREBUILT_KERNEL=$your_kernel_path/arch/arm/boot/zImage-dtb

注意:内核名称因设备而异。要找到内核的正确文件名,请参阅内核源代码中的 device/<vendor>/<name>

++++++参考文献摘选++++++

以Pixel为例,我们编译kernel的方法如下:

source build/envsetup.sh
lunch aosp_sailfish-userdebug

export PATH=/Pixel/AOSP/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin:$PATH
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-android-
make marlin_defconfig
make

编译完成后,生成的文件在:

$ ls arch/arm64/boot/
dts  Image  Image.gz  Image.gz-dtb  install.sh  Makefile

我们发现,并没有Google编译实例中的zImage-dtb,我们去查看下:

 $ locate Image.gz-dtb | grep AOSP                                                                          Pixel/AOSP/device/google/marlin-kernel/Image.gz-dtb
 Pixel/AOSP/device/google/marlin-kernel/Image.gz-dtb-eas
 Pixel/AOSP/device/htc/flounder-kernel/Image.gz-dtb
 Pixel/AOSP/device/huawei/angler-kernel/Image.gz-dtb
 Pixel/AOSP/device/lge/bullhead-kernel/Image.gz-dtb

的确在Pixel上,这个kernel镜像换名字了,是Image.gz-dtb

因此:我们将Image.gz-dtb作为TARGET_PREBUILT_KERNEL

cd AOSP/   (即咱们下载的Android源码目录)

source build/envsetup.sh

lunch aosp_sailfish-userdebug

export TARGET_PREBUILT_KERNEL=/home/yuepx1027/new_1T_work/Pixel/private/kernel/msm/arch/arm64/boot/Image.gz-dtb

make bootimage -j4


下载方案3

https://github.com/LineageOS 来下载

如:

https://github.com/LineageOS/android_device_google_marlin


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值