1. 程式人生 > >Android 驅動開發---Android Linux 核心編譯 Nexus 5x

Android 驅動開發---Android Linux 核心編譯 Nexus 5x

本文以Nexus 5X為例,講解Android Linux 驅動開發的準備
驅動開發瞭解:
Android對硬體的支援分成了兩層,
一層放在使用者空間(User Space),
一層放在核心空間(Kernel Space),
其中,硬體抽象層執行在使用者空間,而Linux 核心驅動程式執行在核心空間。

所以Android的開放程式碼分兩層AOSP和Linux核心

1. Linux核心的下載

下載Linux核心需要確定自己的開發目標,具體的手機和型號或者開發版的系統支援資訊。
以Nexus 5X, 之前的文章,使用的分支是android-e-7.1.1-r31,對應的是bullhead。
Nexus 5x需要在msm裡找,

mkdir kernel
cd kernel
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/msm.git
cd msm

檢視所有支援的分支
git branch -a

                remotes/origin/android-msm-bluegill-3.18-pie-wear-dr
                remotes/origin/android-msm-bullhead-3.10-marshmallow-dr
                remotes/origin/android-msm-bullhead-3.10-marshmallow-dr-0
                remotes/origin/android-msm-bullhead-3.10-marshmallow-dr1.5
                remotes/origin/android-msm-bullhead-3.10-marshmallow-dr1.6
                remotes/origin/android-msm-bullhead-3.10-marshmallow-mr1
                remotes/origin/android-msm-bullhead-3.10-marshmallow-mr1-eas
                remotes/origin/android-msm-bullhead-3.10-marshmallow-mr2
                remotes/origin/android-msm-bullhead-3.10-n-mr1-preview-1
                remotes/origin/android-msm-bullhead-3.10-n-mr1-preview-2
                remotes/origin/android-msm-bullhead-3.10-n-mr2-preview-1
                **remotes/origin/android-msm-bullhead-3.10-n-mr2-preview-2**
                remotes/origin/android-msm-bullhead-3.10-n-preview-1
                remotes/origin/android-msm-bullhead-3.10-n-preview-2
                remotes/origin/android-msm-bullhead-3.10-n-preview-3
                remotes/origin/android-msm-bullhead-3.10-n-preview-4
                remotes/origin/android-msm-bullhead-3.10-n-preview-5
                remotes/origin/android-msm-bullhead-3.10-nougat
                remotes/origin/android-msm-bullhead-3.10-nougat-bugfix
                remotes/origin/android-msm-bullhead-3.10-nougat-hwbinder
                remotes/origin/android-msm-bullhead-3.10-nougat-mr0.5
                remotes/origin/android-msm-bullhead-3.10-nougat-mr0.6
                remotes/origin/android-msm-bullhead-3.10-nougat-mr1
                remotes/origin/android-msm-bullhead-3.10-nougat-mr1.1
                remotes/origin/android-msm-bullhead-3.10-nougat-mr2
                remotes/origin/android-msm-bullhead-3.10-o-mr1-preview1
                remotes/origin/android-msm-bullhead-3.10-o-preview-1
                remotes/origin/android-msm-bullhead-3.10-o-preview-2
                remotes/origin/android-msm-bullhead-3.10-o-preview-3
                remotes/origin/android-msm-bullhead-3.10-o-preview-4
                remotes/origin/android-msm-bullhead-3.10-oreo-m2
                remotes/origin/android-msm-bullhead-3.10-oreo-m3
                remotes/origin/android-msm-bullhead-3.10-oreo-m4
                remotes/origin/android-msm-bullhead-3.10-oreo-m5
                remotes/origin/android-msm-bullhead-3.10-oreo-m6
                remotes/origin/android-msm-bullhead-3.10-oreo-m7
                remotes/origin/android-msm-bullhead-3.10-oreo-mr1
                remotes/origin/android-msm-bullhead-3.10-oreo-mr1-preview2
                remotes/origin/android-msm-bullhead-3.10-oreo-r4
                remotes/origin/android-msm-bullhead-3.10-oreo-r6

下載程式碼分支
git checkout remotes/origin/android-msm-bullhead-3.10-nougat-mr2

2. 編譯程式碼

bullhead是arm64裝置,所以編譯引數要配置arm64
export PATH=$PATH:/mnt/android/android-e-7.1.1-r31/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin:$PATH
export ARCH=arm64
export SUBARCH=arm64
export CROSS_COMPILE=aarch64-linux-android-


make bullhead_defconfig
make -j$(nproc --all)
或者
make -j4

注意, bullhead_defconfig是哪裡來的的呢? 參烤下面的link:

https://source.android.com/setup/build/building-kernels

Android 驅動開發---Android Linux 核心編譯 Nexus 5x

編譯成功的介面:
Android 驅動開發---Android Linux 核心編譯 Nexus 5x
檢查是否在/arch/arm64/boot 目錄生成一個Image.gz-dtb檔案

3. 更新到Nexus 5x

檢視AOSP的目錄:device/lge/bullhead-kernel

Android 驅動開發---Android Linux 核心編譯 Nexus 5x
把這裡的Image.gz-dtb檔案替換成我們上面生成的image檔案

然後重新編譯AOSP,重新刷機

更新前的kernel version資訊:
Android 驅動開發---Android Linux 核心編譯 Nexus 5x

更新後開機有個提示:
Android 驅動開發---Android Linux 核心編譯 Nexus 5x
然後reset phone

更新後的kernel version資訊:
Android 驅動開發---Android Linux 核心編譯 Nexus 5x