环境
PC:Kali 2021.2
手机:Nexus 5、Android 6.0.1
GCC:4.8
内核版本:3.4.0
Docker相关
下载内核源码
克隆仓库
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/msm.git
查询分支
手机设置-关于手机-内核版本,形如3.4.0-g32ac281,其中short commit id即为末尾七位字符32ac281
git branch -r --contains <short commit id>
得到如下结果:
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分支
git checkout -b android-msm-hammerhead-3.4-marshmallow origin/android-msm-hammerhead-3.4-marshmallow
使用root用户进入容器bash
直接使用VSCode的Docker插件附加,或执行以下命令
cid=$(docker ps | grep aosp | cut -d" " -f1) && echo $cid
docker exec --privileged -u root -it $cid bash
配置GCC
已有安卓源码:直接配置环境变量
找到源码中gcc编译器位置,添加进PATH即可:
export PATH=/aosp/android-6.0.0_r1/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin:$PATH
无安卓源码:手动下载后配置
下载gcc
git clone https://aosp.tuna.tsinghua.edu.cn/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8
配置环境变量
export PATH=/aosp/arm-eabi-4.8/bin:$PATH
编译内核
切换到内核目录,执行以下命令即可:
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]
使用其他编译器
暂时没有使用高版本编译器编译内核的需要,待测试...
使用GCC4.9(未测试)
同理,添加到PATH后编译即可
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-linux-androideabi-
make hammerhead_defconfig
cpus=$(grep ^processor /proc/cpuinfo | wc -l)
make -j$[2*$cpus]
使用Clang(未测试)
Android’s GCC 4.9 has been deprecated in favor of Clang, and will be removed from Android in January 2020 as per the below timeline.
安卓的GCC 4.9已被弃用,使用Clang替换
打包镜像
已有安卓源码:直接编译生成
打开源码目录,执行以下操作:
source ./build/envsetup.sh
lunch aosp_hammerhead-userdebug
然后设置内核文件位置(默认使用/aosp/android-6.0.0_r1/device/lge/zImage-dtb)
export TARGET_PREBUILT_KERNEL=/aosp/kernel/msm/arch/arm/boot/zImage-dtb
之后打包即可
cpus=$(grep ^processor /proc/cpuinfo | wc -l)
make -j$[2*$cpus]
生成的镜像位于out/target/produuct/hammerhead/boot.img
无安卓源码:手动重打包
使用mkbootimg和unmkbootimg重打包镜像
其他
修改安卓内核源码 过State TracerPid wchan反调试