编译内核(Pixel 2)
2019-11-27 12:58:57 Author: bbs.pediy.com(查看原文) 阅读量:374 收藏

[原创]编译内核(Pixel 2)

1小时前 161

这是我在学习编译Pixel2手机内核时所记录的笔记,内容没有亮点只是记录了我编译Pixel2 手机内核时的步骤。 区别于网上其他大佬说的方法我这里没有修改编译工具的源码,只是添加了编译时所需要的工具,刷入编译好的内核到手机中没有出现触摸屏失灵可以正常使用。

aosp源码下载

下载工具:

#: mkdir ~/bin
#: PATH=~/bin:$PATH
# curl https://storage.googleapis.com/git-repo-downloads/repo > repo
# 如果不行可以使用下面的:
# curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > repo
# chmod a+x ~/bin/repo

选择分支:

# repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
// 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
// REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
// 如果需要指定版本
// N2G48C  android-9.0.0_r3
# repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-9.0.0_r3

同步源码:

创建空目录存放内核文件:

# mkdir WORKING_DIRECTORY
# cd WORKING_DIRECTORY

git下载:

// 清华
# git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/msm.git
// 谷歌
# git clone https://android.googlesource.com/kernel/msm.git
# cd msm    //进入msm工程目录

各个芯片版本:

exynos 项目包含适用于 Nexus 10 的内核源代码,可用作在 Samsung Exynos 芯片组上开展相关工作的着手点。
        git clone https://android.googlesource.com/kernel/exynos

goldfish 项目包含适用于模拟平台的内核源代码。
        git clone https://android.googlesource.com/kernel/goldfish

hikey-linaro 项目用于 HiKey 参考板,可用作在 HiSilicon 620 芯片组上开展相关工作的着手点。
        git clone https://android.googlesource.com/kernel/hikey-linaro

msm 项目包含适用于 ADP1、ADP2、Nexus One、Nexus 4、Nexus 5、Nexus 6、Nexus 5X、Nexus 6P、Nexus 7 (2013)、Pixel 和 Pixel XL 的源代码,可用作在 Qualcomm MSM 芯片组上开展相关工作的着手点。
        git clone https://android.googlesource.com/kernel/msm

omap 项目用于 PandaBoard 和 Galaxy Nexus,可用作在 TI OMAP 芯片组上开展相关工作的着手点。
        git clone https://android.googlesource.com/kernel/omap

samsung 项目用于 Nexus S,可用作在 Samsung Hummingbird 芯片组上开展相关工作的着手点。
        git clone https://android.googlesource.com/kernel/samsung

tegra 项目用于 Xoom、Nexus 7 (2012)、Nexus 9,可用作在 NVIDIA Tegra 芯片组上开展相关工作的着手点。
        git clone https://android.googlesource.com/kernel/tegra

x86_64 项目包含适用于 Nexus Player 的内核源代码,可用作在 Intel x86_64 芯片组上开展相关工作的着手点。
        git clone https://android.googlesource.com/kernel/x86_64

git同步分支:

# git checkout 4.4.4-xxxxxxx   (在手机中查看/proc/version获取)
// 也可以选择这个版本 同步分支
# git checkout -b android-msm-wahoo-4.4-pie-r2 /origin/android-msm-wahoo-4.4-pie-r2     (依据手机信息在 branch中自行寻找)

编译内核配置项

 设备 二进制文件路径 源码路径 编译配置
 taimen device/google/wahoo-kernel kernel/msm wahoo_defconfig
 walleye device/google/wahoo-kernel kernel/msm wahoo_defconfig
 angler device/huawei/angler-kernel kernel/msm angler_defconfig
 marlin device/google/marlin-kernel kernel/msm marlin_defconfig
 ... ... ... ...

为 Pixel (XL) 和 Pixel2 编译Android Pie内核:

谷歌在Android Pie上为32位用户空间添加了一个新的compat vDSO ,这需要一个32位的工具链 因此,如果未设置CROSS_COMPILE_ARM32,则构建将出错。

# export PATH=$PATH:/home/hx/android_source/android9.0/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin

# export  CROSS_COMPILE_ARM32=/home/hx/android_source/android9.0/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-

# export CROSS_COMPILE=/home/hx/android_source/android9.0/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-

# export CC=/home/hx/android_source/android9.0/prebuilts/clang/host/linux-x86/clang-4053586/bin/clang

# export  CLANG_TRIPLE=/home/hx/android_source/gcc-linaro-aarch64-linux-gnu-4.8-2014.04_linux/bin/aarch64-linux-gnu-

编译 pixel2内核必要工具 : https://forum.xda-developers.com/pixel-2-xl/how-to/tools-tools-building-pixel-2-xl-kernel-t3693955

dtc     工具可以在 AOSP/extern/dtc 目录下编译  编译好后将可执行文件拷贝到 /usr/bin 目录下
mkdtimg 工具在 AOSP 目录下运行 make -j15 mkdtimg 即可编译  

make -j15 ARCH=arm64 0=out wahoo_defconfig

make -j15 ARCH=arm64 CC=/home/hx/android_source/android9.0/prebuilts/clang/host/linux-x86/clang-4053586/bin/clang CLANG_TRIPLE=aarch64-linux-gnu- CROSS_COMPILE=/home/hx/android_source/android9.0/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android- CROSS_COMPILE_ARM32=/home/hx/android_source/android9.0/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi- 0=out

make -j15 ARCH=arm64 CC=/home/hx/android_source/android8.1/prebuilts/clang/host/linux-x86/clang-4053586/bin/clang CLANG_TRIPLE=aarch64-linux-gnu- CROSS_COMPILE=/home/hx/android_source/android8.1/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android- CROSS_COMPILE_ARM32=/home/hx/android_source/android8.1/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi- 0=out

export TARGET_PREBUILT_KERNEL=/home/hx/android_source/msm/walleye/msm/arch/arm64/boot/Image.lz4-dtb

内核分支为:remotes/origin/android-msm-wahoo-4.4-pie-r2  pixel2手机 android9.1版本


编译kernel 错误和原因:

Makefile:610: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: -fstack-protector-strong not supported by compiler
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CC      kernel/bounds.s
gcc: error: unrecognized command line option ‘-mlittle-endian’
gcc: error: unrecognized command line option ‘-mgeneral-regs-only’
gcc: error: unrecognized command line option ‘-fstack-protector-strong’
make[1]: *** [kernel/bounds.s] Error 1
make: *** [prepare0] Error 2

#### make failed to build some targets (1 seconds) ####

一般报这种错是因为交叉编译工具没有设置好,导致make时选择的是本地默认的gcc,所以这里有两种解决方法1.将android目录下的交叉编译工具提出来然后设置/etc/profile文件添加这个交叉编译工具 2.下载官方提供的交叉编译工具 设置/etc/profile文件添加路径。(https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9)

编译内核:

// 将工具集加入到路径中  android8.1 是指当前源码目录
# export PATH=$PATH:/home/hx/android_source/android8.1/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin
// 设置目标架构
# export ARCH=arm64
// 设置编联合编译方式,不要漏了最后边的“-”
# export CROSS_COMPILE=aarch64-linux-android-
// 整合
# export PATH=$PATH:/home/hx/android_source/android8.1/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin  ARCH=arm64  CROSS_COMPILE=aarch64-linux-android-
// 编译
# make marline_defconfig  这里需要自己去查询编译配置项地址是上面给出
# make

打包并刷入:

// 进入Android 源码目录
# cd ~/asop/
// 设置刚刚编译完成 Image.gz-dtb 文件变量
# export TARGET_PREBUILT_KERNEL=/home/hx/android_source/msm/msm/arch/arm64/boot/Image.gz-dtb
# . build/envsetup.sh
# lunch <angler> 这里选择你的手机型号

    which would you like  [aosp_arm-eng ] 20    


// 开始编译内核
# make bootimage

内核编译完成文件存放在 out/target/product/angler/boot.img

刷入手机中

adb reboot bootloader
fastboot flash boot boot.img
fastboot reboot
 

[公告]安全测试和项目外包请将项目需求发到看雪企服平台:https://qifu.kanxue.com


文章来源: https://bbs.pediy.com/thread-255846.htm
如有侵权请联系:admin#unsafe.sh