0%

使用docker编译安卓内核源码

环境

PC:Kali 2021.2
手机:Nexus 5Android 6.0.1
内核版本:3.4

Docker相关

详见在WSL2中使用docker编译安卓源码

下载内核源码

克隆仓库

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

查询分支

手机设置-关于手机-内核版本,形如3.4.0-g32ac281,其中short commit id即为末尾七位字符32ac281

1
git branch -r --contains <short commit id>

得到如下结果:

1
2
3
origin/android-msm-hammerhead-3.4-marshmallow
origin/android-msm-hammerhead-3.4-marshmallow-mr2
origin/android-msm-hammerhead-3.4-marshmallow-mr3

检出分支

注意:mr3版本有bug,无法查询Wifi,最后使用的是android-msm-hammerhead-3.4-marshmallow分支

1
git checkout -b android-msm-hammerhead-3.4-marshmallow origin/android-msm-hammerhead-3.4-marshmallow

使用root用户进入容器bash

1
2
cid=$(docker ps | grep aosp | cut -d" " -f1) && echo $cid
docker exec --privileged -u root -it $cid bash

配置GCC

已有安卓源码:直接配置环境变量

找到源码中gcc编译器位置,添加进PATH即可:

1
export PATH=/aosp/android-6.0.0_r1/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin:$PATH

无安卓源码:手动下载后配置

下载gcc

1
git clone https://aosp.tuna.tsinghua.edu.cn/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8

配置环境变量

1
export PATH=/aosp/arm-eabi-4.8/bin:$PATH

编译内核

切换到内核目录,执行以下命令即可:

1
2
3
4
5
6
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
make hammerhead_defconfig
cpus=$(grep ^processor /proc/cpuinfo | wc -l)
make -j$[2*$cpus]

打包镜像

已有安卓源码:直接编译生成

打开源码目录,执行以下操作:

1
2
source ./build/envsetup.sh
lunch aosp_hammerhead-userdebug

然后设置内核文件位置(默认使用/aosp/android-6.0.0_r1/device/lge/zImage-dtb

1
export TARGET_PREBUILT_KERNEL=/aosp/kernel/msm/arch/arm/boot/zImage-dtb

之后打包即可

1
2
cpus=$(grep ^processor /proc/cpuinfo | wc -l)
make -j$[2*$cpus]

生成的镜像位于out/target/produuct/hammerhead/boot.img

无安卓源码:手动重打包

使用mkbootimgunmkbootimg重打包镜像

其他

修改安卓内核源码 过State TracerPid wchan反调试

参考

Android反调试——从源码入手
nexus5重新编译手机内核,手机WiFi无法正常使用
android dtb文件位置_android 内核源码编译到刷机