环境
PC:Kali 2021.2
手机:Nexus 5
、Android 6.0.1
GCC:4.8
内核版本:3.4.0
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 | origin/android-msm-hammerhead-3.4-marshmallow |
检出分支
注意: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
直接使用VSCode
的Docker
插件附加,或执行以下命令
1 | cid=$(docker ps | grep aosp | cut -d" " -f1) && echo $cid |
配置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 | export ARCH=arm |
使用其他编译器
暂时没有使用高版本编译器编译内核的需要,待测试…
使用GCC4.9(未测试)
同理,添加到PATH
后编译即可
1 | export ARCH=arm |
使用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替换
打包镜像
已有安卓源码:直接编译生成
打开源码目录,执行以下操作:
1 | source ./build/envsetup.sh |
然后设置内核文件位置(默认使用/aosp/android-6.0.0_r1/device/lge/zImage-dtb
)
1 | export TARGET_PREBUILT_KERNEL=/aosp/kernel/msm/arch/arm/boot/zImage-dtb |
之后打包即可
1 | cpus=$(grep ^processor /proc/cpuinfo | wc -l) |
生成的镜像位于out/target/produuct/hammerhead/boot.img
无安卓源码:手动重打包
使用mkbootimg
和unmkbootimg
重打包镜像
其他
修改安卓内核源码 过State TracerPid wchan反调试
参考
Android反调试——从源码入手
nexus5重新编译手机内核,手机WiFi无法正常使用
android dtb文件位置_android 内核源码编译到刷机